如何构建 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}

在此处输入图片描述

相关内容