nxn 行列を構築するにはどうすればよいですか?

nxn 行列を構築するにはどうすればよいですか?

大きな nxn マトリックスを作成しようとしていますが、手動で行うよりも簡単にできる手法が見つかりません。何かアイデアはありますか?

答え1

指定されたサイズのランダムな行列を出力します。

キーはsize(必須)、lbランダムな整数の下限 (デフォルト 0)、ubランダムな整数の上限 (デフォルト 20) です。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\bigmatrix}{m}
 {
  \group_begin:
  \keys_set:nn { john/bigmatrix } { #1 }
  \john_bigmatrix:
  \group_end:
 }

\tl_new:N \l__john_bigmatrix_tl

\keys_define:nn { john/bigmatrix }
 {
  size .int_set:N = \l__john_bigmatrix_size_int,
  lb   .int_set:N = \l__john_bigmatrix_lb_int,
  ub   .int_set:N = \l__john_bigmatrix_ub_int,
  lb   .initial:n = 0,
  ub   .initial:n = 20,
 }

\cs_new_protected:Nn \john_bigmatrix:
 {
  \int_compare:nT { \l__john_bigmatrix_size_int > \value{MaxMatrixCols} }
   {
    \setcounter{MaxMatrixCols}{\l__john_bigmatrix_size_int}
   }
  \int_step_function:nN { \l__john_bigmatrix_size_int } \__john_bigmatrix_row:n
  \begin{bmatrix}
  \l__john_bigmatrix_tl
  \end{bmatrix}
 }

\cs_new_protected:Nn \__john_bigmatrix_row:n
 {
  \tl_put_right:Nx \l__john_bigmatrix_tl
   {
    \int_rand:nn { \l__john_bigmatrix_lb_int } { \l__john_bigmatrix_ub_int }
   }
  \prg_replicate:nn { \l__john_bigmatrix_size_int - 1 }
   {
    \tl_put_right:Nx \l__john_bigmatrix_tl
     {
      &
      \int_rand:nn { \l__john_bigmatrix_lb_int } { \l__john_bigmatrix_ub_int }
     }
   }
  \tl_put_right:Nn \l__john_bigmatrix_tl { \\ }
 }

\ExplSyntaxOff

\begin{document}

$\bigmatrix{size=5}$ $\bigmatrix{size=6,lb=-12,ub=12}$

\bigskip

$\bigmatrix{size=15,ub=50}$

\end{document}

ここに画像の説明を入力してください

答え2

例えばMathematicaを使うと、

IdentityMatrix[10]  // TeXForm

そして、LaTeX の出力を次のようにコピーします。

\documentclass[border=12pt,12pt]{standalone}
\usepackage{amsmath}
\begin{document}
$A=
\begin{pmatrix}
 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\
 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\
 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\
 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\
\end{pmatrix}
$
\end{document}

ここに画像の説明を入力してください

答え3

パッケージと一緒にコンピュータ代数システム Sage を使用しますsagetex。まず、コードは次のとおりです。

\documentclass{article}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
latex.matrix_delimiters(left='[', right=']')
A = Matrix([[0,-1,-1],[-1,-1,0],[-1,0,1],[1,0,0],[0,0,-1],[-1,2,1]])
B = Matrix.identity(4)  
C = random_matrix(ZZ,4,3)
D = random_matrix(QQ,3,4)
\end{sagesilent}
The matrix $A=\sage{A}$ was input by hand. The matrix $B=\sage{B}$ is defined  in Sage.
The matrix $C=\sage{C}$ is $4 \times 4$ matrix consisting of integers determined
at random. The matrix $D=\sage{D}$ is a $3 \times 4$ matrix consisting of rational 
numbers determined randomly.

Computing $C \cdot D= \sage{C*D}$ is easy. You can compute use Sage to test if 
matrices are singular or nonsingular and even calculate their inverses. 
Sage will take care of the calculations but 
you'll have to spend time making the output look a little nicer.
\end{document}

次に、出力を示します。一部の行列構成はランダムなので、同じコードを実行した場合とは異なる結果になるはずです。 ここに画像の説明を入力してください

最後に、基本的な構成はC = random_matrix(ZZ,4,3)であり、

  1. Cは定義する行列です
  2. 4は行数です
  3. 3は列の数です
  4. ZZ はエントリが整数の場合、QQ は有理数の場合、RR は実数の場合、CC は複素数の場合です。有限体でも作業できます。ドキュメントを参照してください。

行列 A は、エントリごとに定義できる方法を示しましたが、B は、Sage が 4x4 単位行列を作成する方法を示しています。行列を設定したら、Sage が計算も行います。これにより、不注意なミスが文書に紛れ込むのを防ぎます。Sage は LaTeX ディストリビューションの一部ではありませんが、無料の Cocalc アカウントを使用してオンラインでアクセスできます。ここSageをコンピュータにインストールしてCocalcを使わなくてもよいようにすることも可能です。ただし、その場合は起動と実行が難しくなります。SAGEで行列を扱うための重要なドキュメントは、ここここここ、 そしてここSage は大きな行列でも問題ありませんが、ページ上に表示すると問題が生じます。コード内で \usepackage{fullpage} を使用すると、スペースが解放され、20 x 20 の行列を印刷できるようになります。

答え4

正規乱数の行列knitr:

\documentclass{article}
\usepackage{amsmath}

<<bmatrix,echo=F>>=
options(digits=2) 
bmatrix <- function(matr) {
printmrow <- function(x) {cat(cat(x,sep=" & "),"\\\\ \n")}
cat("\\begin{bmatrix}","\n")
body <- apply(matr,1,printmrow)
cat("\\end{bmatrix}")}
@

\begin{document}
\[ A = 
<<echo=F,results='asis'>>=
bmatrix(round(matrix(rnorm(6), 2 ,3),3))
@
\]
\[ B =
<<echo=F,results='asis'>>=
bmatrix(round(matrix(abs(rnorm(120)), 12 ,10),1))
@
\]
\setcounter{MaxMatrixCols}{12}
\[ C =
<<echo=F,results='asis'>>=
bmatrix(round(matrix(abs(rnorm(144)), 12 ,12),1))
@
\]
\end{document}

ここに画像の説明を入力してください

関連情報