
Я пытаюсь создать большую матрицу 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), где
- C — это матрица, которую вы определяете.
- 4 — количество строк
- 3 — количество столбцов
- ZZ — для целых чисел, QQ — для рациональных, RR — для действительных, CC — для комплексных. Вы также можете работать с конечными полями. Смотрите документацию.
Обратите внимание, что я показал, как вы можете определить матрицу A, запись за записью, в то время как B показывает, как Sage создаст для вас матрицу идентичности 4x4. После того, как вы настроите матрицы, Sage также выполнит вычисления. Это предотвращает появление ошибок по неосторожности в вашем документе. Sage не является частью дистрибутива LaTeX, но вы можете получить к нему доступ онлайн с помощью бесплатной учетной записи Cocalcздесь. Можно установить Sage на свой компьютер, и тогда вам не понадобится Cocalc. Это сложнее настроить и запустить. Некоторая важная документация по работе с матрицами в SAGEздесь,здесь,здесь, издесь. У Sage нет проблем с большими матрицами, но их отображение на странице становится проблематичным. Использование \usepackage{fullpage} в вашем коде может освободить место, так что я могу напечатать матрицу 20 на 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}