Usando una matriz como parámetro en un algoritmo
Estoy tratando de escribir un algoritmo de pseudocódigo en LaTeX, donde una de las funciones necesita tener matrices como parámetro. Necesito que se vea así:
He estado usando el paquete de algoritmos, pero no se compilará si intento usar la matriz en el campo de parámetros.
\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}
Necesito reemplazar los valores \muy \Sigmaen la línea especificada para las matrices.
\Function{GeneradorNormalBivariada}{$\mu \in \Re^{2}, \Sigma \in \Re^{2} \times \Re^{2}; \{ u_{k}\}^{4}_{k-1} \in (0,1)^{4}$}
Agradezco cualquier ayuda que pueda brindarme sobre este tema. Gracias.
Respuestas
Dado que el argumento de la llamada a la función es probado por un \ifthenelsecondicional, es mejor almacenar la construcción de las matrices dentro de cajas ya establecidas. A continuación, creé \mumatrixy \sigmamatrixeso se usa \useboxdentro del segundo argumento de la función.
\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}
Puede usar smallmatrixpara establecer una matriz en línea:
\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}