我真的很难为优化问题对齐方程组。一开始一切都很好,直到我开始添加约束。
到目前为止我已经获得了以下代码:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\begin{aligned}
\text{minimize}\qquad && \parallel A^{\text{ind}} w \text{ diag}(x^{\text{ind}})\parallel\\
\text{subject to }\qquad && w=b-s+w^0\\
\phantom{\text{subject to }} & l^b &\le b &\le u^b\\
\phantom{\text{subject to }} & l^s &\le s &\le u^s\\
\phantom{\text{subject to }} & l^{\text{bukd}} &\phantom{\le} t(b+s) &\le u^t\\
\phantom{\text{subject to }} & l^{\text{bukd}} &\le A^{\text{dur}} w \text{ diag}(x^{\text{buk}}) &\le u^{\text{bukd}}\\
\phantom{\text{subject to }} & l^{\text{curp}} &\le A^{\text{dur}} w \text{ diag}(x^{\text{cur}}) &\le u^{\text{curp}}\\
\end{aligned}
\]
\end{document}
可以看到,变量 'b' 和 's' 没有在中间对齐。此外,第一个小于或等于号也没有对齐,尽管它们前面都有一个符号 '&'。
是否有人可以帮助我将优化问题的所有约束都调整到中心位置?
答案1
好吧,您可以使用以下内容进行进一步改进(您可以删除\qquad
,避免\parallel
等),但它会逐渐变得更丑陋;
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter{\diagpars}{(}{)}
\newcommand{\diag}{\operatorname{diag}\diagpars}
\newcommand{\norm}[1]{\displaystyle \left\| #1 \right\|}
\begin{document}
\[
\begin{matrix}
\text{minimize} &&& \norm{A^{\text{ind}} w \diag{x^{\text{ind}}}}\\
\text{subject to } &&& w=b-s+w^0\\
& l^b &\le &b &\le &u^b\\
& l^s &\le &s &\le &u^s\\
& l^{\text{bukd}} &\le &t(b+s) &\le &u^t\\
& l^{\text{bukd}} &\le &A^{\text{dur}} w \text{ diag}(x^{\text{buk}}) &\le &u^{\text{bukd}}\\
& l^{\text{curp}} &\le &A^{\text{dur}} w \text{ diag}(x^{\text{cur}}) &\le &u^{\text{curp}}\\
\end{matrix}
\]
\end{document}
相反,重新表述你的约束实际上的含义,例如b\in[l^b,u^b]
等等。
答案2
以下内容可能接近您正在寻找的内容:
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\diag}{diag}
\begin{document}
\[
\text{Minimize\quad}
\| A^{\text{ind}} w \diag(x^{\text{ind}}) \|
\]
\[
\begin{array}{r @{}c@{} c @{}c@{} l}
\text{subject to:\quad}w&{}={}&\multicolumn{1}{@{}l}{b-s+w^0}\\
l^b &\le& b &{}\le{}& u^b\\
l^s &\le& s &\le& u^s\\
l^{\text{bukd}} &\le& t(b+s) &\le& u^t\\
l^{\text{bukd}} &\le& A^{\text{dur}} w \diag(x^{\text{buk}})
&\le& u^{\text{bukd}}\\
l^{\text{curp}} &\le& A^{\text{dur}} w \diag(x^{\text{cur}})
&\le& u^{\text{curp}}\\
\end{array}
\]
\end{document}
控制环境的语法array
一开始可能看起来有点复杂,所以这里有一个快速指南:
- 这两个
@{}c@{}
结构用于定位等号/不等号;该@{}
指令抑制了正常的列间空白量, - 、
r
和c
指令l
用于定位剩余的材料, - 在数组的第一行中,
{}={}
内容告知 LaTeX=
应将符号视为关系运算符(通过在两侧插入一些空格);{}\le{}
数组的第二行也是如此。(请注意,只需要指定额外的{}
内容一次每列。 - 在数组的第一行中,等式关系 RHS 上的材料通过语句强制左对齐
\multicolumn{1}{@{}l}{...}
。在@{}
“l”之前,是为了抑制 LaTeX 默认行为,即(重新)插入额外的列间空格\arraycolsep
。
最后,我将“最小化”和“服从”组放入两个单独的 displaymath 环境中。这样可以插入更多空间,如果需要,还可以在两个组之间插入分页符。
答案3
一个简单的解决方案就是使用单个对齐字符来左对齐约束:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\begin{aligned}
\text{minimize}\qquad & \| A^{\text{ind}} w \text{ diag}(x^{\text{ind}})\|\\
\text{subject to }\qquad & w=b-s+w^0\\
& l^b \le b \le u^b\\
& l^s \le s \le u^s\\
& l^{\text{bukd}} \phantom{\le} t(b+s) \le u^t\\
& l^{\text{bukd}} \le A^{\text{dur}} w \text{ diag}(x^{\text{buk}}) \le u^{\text{bukd}}\\
& l^{\text{curp}} \le A^{\text{dur}} w \text{ diag}(x^{\text{cur}}) \le u^{\text{curp}}\\
\end{aligned}
\]
\end{document}
然后会产生以下内容:
答案4
另一种可能性是,不等号垂直对齐,但保持成本和等式约束在左边:
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\diag}{diag}
\begin{document}
\begin{align*}
\text{minimize} \quad & \lVert A^{\text{ind}} w \text{ diag}(x^{\text{ind}})\rVert \\
\text{subject to} \quad & w=b-s+w^0 \\
& \hspace{-.3em} % this is for correcting a small offset of the array to the right
\begin{array}{lcccl}
l^b & \leq & b & \leq & u^b \\
l^s & \leq & s & \leq & u^s \\
l^{\text{bukd}} & \leq & t(b+s) & \leq & u^t \\
l^{\text{bukd}} & \leq & A^{\text{dur}} w \diag (x^{\text{buk}}) & \leq & u^{\text{bukd}} \\
l^{\text{curp}} & \leq & A^{\text{dur}} w \diag (x^{\text{cur}}) & \leq & u^{\text{curp}} \\
\end{array}
\end{align*}
\end{document}