Verwenden einer Matrix als Parameter in einem Algorithmus
Ich versuche, einen Pseudocode-Algorithmus in LaTeX zu schreiben, bei dem eine der Funktionen Matrizen als Parameter haben muss. Ich muss es so aussehen lassen:
Ich habe das Algorithmuspaket verwendet, aber es wird nicht kompiliert, wenn ich versuche, die Matrix im Parameterfeld zu verwenden.
\begin{algorithm}
\floatname{algorithm}{Algoritmo \arabic{chapter}.}
\label{coordenatesGenerator}
\caption{Generador de una variable aleatoria normal estándar}
\begin{algorithmic}[1]
\Function{GeneradorNormalBivariada}{$\mu \in \Re^{2}, \Sigma \in \Re^{2} \times \Re^{2}; \{ u_{k}\}^{4}_{k-1} \in (0,1)^{4}$}
\State $\Sigma \gets CC^{t}$ \Comment{Descomposición de Cholesky}
\State $z_{1} \gets GeneradorNormalEstandar(u_{1},u_{2});$
\State $z_{2} \gets GeneradorNormalEstandar(u_{3},u_{4});$
\State $x_{1} \gets \mu_{1} + c_{1,1}z_{1};$
\State $x_{2} \gets \mu_{2} + c_{1,1}z_{1} + c_{2,1}z_{1} + c_{2,2}z_{2};$
\State \textbf{return} $\left( \begin{bmatrix} x_{1} \\ x_{2} \end{bmatrix} \right);$
\EndFunction
\end{algorithmic}
\end{algorithm}
Ich muss die \muund \Sigma-Werte in der angegebenen Zeile für die Matrizen ersetzen .
\Function{GeneradorNormalBivariada}{$\mu \in \Re^{2}, \Sigma \in \Re^{2} \times \Re^{2}; \{ u_{k}\}^{4}_{k-1} \in (0,1)^{4}$}
Ich freue mich über jede Hilfe, die Sie mir zu diesem Thema geben können. Dankeschön.
Antworten
Da das Argument Ihres Funktionsaufrufs durch eine \ifthenelseBedingung getestet wird , ist es am besten, die Konstruktion der Matrizen in bereits festgelegten Feldern zu speichern. Unten habe ich erstellt \mumatrixund \sigmamatrixdas wird über \useboxinnerhalb des zweiten Arguments der Funktion verwendet.
\documentclass{article}
\usepackage{algorithm,algpseudocode}
\usepackage{amsmath}
% https://tex.stackexchange.com/a/145738/5764
\algdef{SE}[FUNCTION]{Function}{EndFunction}%
[2]{\algorithmicfunction\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}%
{\algorithmicend\ \algorithmicfunction}%
\newcommand{\functioncall}{\textproc}
\begin{document}
\begin{algorithm}
\caption{An algorithm}
\newsavebox\mumatrix
\savebox{\mumatrix}{$\begin{bmatrix} \mu_1 \\ \mu_2 \end{bmatrix}$}%
\newsavebox\sigmamatrix
\savebox{\sigmamatrix}{$\begin{bmatrix} \sigma_1^2 & \sigma_{1,2} \\ \sigma_{2,1} & \sigma_2^2 \end{bmatrix}$}%
\begin{algorithmic}[1]
\Function{FunctionA}{$ \usebox{\mumatrix} \in \Re^2, \usebox{\sigmamatrix} \in \Re^2 \times \Re^2, \{ u_k \}^4_{k - 1} \in (0,1)^4$}
\State $\Sigma \gets CC^t$ \Comment{A comment}
\State $z_1 \gets \functioncall{FunctionB}(u_1, u_2);$
\State $z_2 \gets \functioncall{FunctionB}(u_3, u_4);$
\State $x_1 \gets \mu_1 + c_{1,1} z_1;$
\State $x_2 \gets \mu_2 + c_{1,1} z_1 + c_{2,1} z_1 + c_{2,2} z_2;$
\State \Return $\left( \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \right);$
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{document}
Sie können smallmatrixeine Matrix inline setzen:
\documentclass{article}
\usepackage{algorithm,algpseudocode}
\usepackage{mathtools}
\begin{document}
\begin{algorithm}
\begin{algorithmic}[1]
\Function{GeneradorNormalBivariada}{$\mu \in \Re^{2}, \Sigma \in \Re^{2} \times \Re^{2}; \{ u_{k}\}^{4}_{k-1} \in (0,1)^{4}$}
\State $\Sigma \gets CC^{t}$ \Comment{Descomposición de Cholesky}
\State $z_{1} \gets GeneradorNormalEstandar(u_{1},u_{2});$
\State $z_{2} \gets GeneradorNormalEstandar(u_{3},u_{4});$
\State $x_{1} \gets \mu_{1} + c_{1,1}z_{1};$
\State $x_{2} \gets \mu_{2} + c_{1,1}z_{1} + c_{2,1}z_{1} + c_{2,2}z_{2};$
\State \textbf{return} $\left(\bigl[\begin{smallmatrix} x_{1} \\ x_{2} \end{smallmatrix}\bigr]\right);$
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{document}