
Ich versuche, eine große NxN-Matrix zu erstellen, kann aber keine Technik finden, die das einfacher macht, als es manuell zu tun. Irgendwelche Ideen?
Antwort1
Dies druckt eine Zufallsmatrix mit der angegebenen Größe.
Die Schlüssel sind size
(obligatorisch) lb
für die Untergrenze der Zufallszahlen (Standard 0) und ub
für die Obergrenze der Zufallszahlen (Standard 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}
Antwort2
Verwenden Sie beispielsweise Mathematica,
IdentityMatrix[10] // TeXForm
Und kopieren Sie die Ausgabe für LaTeX wie folgt.
\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}
Antwort3
Verwenden Sie das Computeralgebrasystem Sage zusammen mit dem sagetex
Paket. Hier ist zunächst der Code:
\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}
Als nächstes folgt die Ausgabe. Da einige meiner Matrixkonstruktionen zufällig sind, sollte sie anders aussehen als Ihre Ausführung desselben Codes.
Schließlich ist die Grundkonstruktion C = random_matrix(ZZ,4,3) wobei
- C ist die Matrix, die Sie definieren
- 4 ist die Anzahl der Zeilen
- 3 ist die Anzahl der Spalten
- ZZ steht für Einträge, die ganzzahlig sind, QQ für rational, RR für reell und CC für komplex. Sie können auch mit endlichen Körpern arbeiten. Siehe die Dokumentation.
Beachten Sie, dass ich gezeigt habe, wie Sie Matrix A Eintrag für Eintrag definieren können, während B zeigt, wie Sage die 4x4-Einheitsmatrix für Sie erstellt. Nachdem Sie Ihre Matrizen eingerichtet haben, führt Sage auch die Berechnungen durch. Dies verhindert, dass sich Flüchtigkeitsfehler in Ihr Dokument einschleichen. Sage ist nicht Teil der LaTeX-Distribution, aber Sie können online mit einem kostenlosen Cocalc-Konto darauf zugreifen.Hier. Es ist möglich, Sage auf Ihrem Computer zu installieren, sodass Sie Cocalc nicht benötigen. Das ist schwieriger einzurichten und zum Laufen zu bringen. Einige wichtige Dokumentationen für die Arbeit mit Matrizen in SAGE sindHier,Hier,Hier, UndHier. Sage hat keine Probleme mit großen Matrizen, aber ihre Anzeige auf der Seite wird problematisch. Die Verwendung von \usepackage{fullpage} in Ihrem Code kann Platz freigeben, sodass ich eine 20 x 20 Matrix ausdrucken kann.
Antwort4
Matrizen normaler Zufallszahlen mit 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}