算法中的命令 argmin 和 argmax

算法中的命令 argmin 和 argmax

我正在尝试使用我在算法中定义的argmin命令argmax,但我总是得到不在中间而是在右边的参数。有人知道如何将参数放在中间吗?

我声明一下操作人员:

\DeclareMathOperator*{\argmin}{\arg\!\min}
\DeclareMathOperator*{\argmax}{\arg\!\max}

我使用以下包来编写算法:

\usepackage[chapter]{algorithm}
\usepackage{algorithmic}

完整算法代码:

\begin{algorithm}
\begin{algorithmic} 
\STATE some statement here
\WHILE{!stop}
    \STATE $s_{i} = \argmin_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}

答案1

$引入文本样式,您将需要\displaystyle\limits
\sum\int\lim,... 的行为方式相同:显示样式公式的上标和下标位于符号的上方和下方,在文本样式公式中,它们的排版方式与普通的上标和下标相同。)

如果您发现这两种解决方案都不令人满意,您可以定义一个\limits内置的附加命令:

\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
\newcommand*{\argminl}{\argmin\limits}
\newcommand*{\argmaxl}{\argmax\limits}

或者使用具有该功能的原始宏名称:

\DeclareMathOperator*{\argminOp}{argmin}
\DeclareMathOperator*{\argmaxOp}{argmax}
\newcommand*{\argmin}{\argminOp\limits}
\newcommand*{\argmax}{\argmaxOp\limits}

但是你也可以不用\DeclareMathOperator*

\newcommand*{\argmin}{\operatornamewithlimits{argmin}\limits}
\newcommand*{\argmax}{\operatornamewithlimits{argmax}\limits}

我还声明了您的运算符,其中没有预定义的运算符\arg\max因为运算符通常都是直立字体,因此无需手动重新调整空间(\!)。

代码 A ( \limits)

\documentclass{book}
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
\begin{document}
\begin{algorithm}
\begin{algorithmic} 
\STATE some statement here
\WHILE{!stop}
    \STATE $s_{i} = \argmin\limits_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}

代码 B ( \displaystyle)

\documentclass{book}
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
\begin{document}
\begin{algorithm}
\begin{algorithmic} 
\STATE some statement here
\WHILE{!stop}
    \STATE $\displaystyle s_{i} = \argmin_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}

代码 C(内置\limits

\documentclass{book}
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
\newcommand*{\argminl}{\argmin\limits}
\newcommand*{\argmaxl}{\argmax\limits}
\begin{document}
\begin{algorithm}
\begin{algorithmic} 
\STATE some statement here
\WHILE{!stop}
    \STATE $ s_{i} = \argminl_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}

输出

在此处输入图片描述

答案2

您可以使用\limits(但这会破坏连续行之间的常规跳过):

\documentclass{book}
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
\usepackage{amsmath}

\DeclareMathOperator*{\argmin}{\arg\!\min}
\DeclareMathOperator*{\argmax}{\arg\!\max}

\begin{document}

\begin{algorithm}
\begin{algorithmic} 
\STATE some statement here
\WHILE{!stop}
    \STATE $s_{i} = \argmin\limits_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}

\end{document}

在此处输入图片描述

相关内容