Verwenden einer Matrix als Parameter in einem Algorithmus

Oct 20 2020

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

2 Werner Oct 20 2020 at 03:42

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}
DG' Oct 20 2020 at 03:52

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}