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 계정을 사용하여 온라인으로 액세스할 수 있습니다.여기. Cocalc가 필요하지 않도록 컴퓨터에 Sage를 설치할 수 있습니다. 일어나서 달리는 것이 더 어렵습니다. 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}

여기에 이미지 설명을 입력하세요

관련 정보