如何在 LaTeX 中创建有边界的 Hessian 矩阵?

如何在 LaTeX 中创建有边界的 Hessian 矩阵?

我应该在一道数学题中使用以下矩阵:

通缉

但根据我对 LaTeX 表格和矩阵的经验,我知道这超出了我的能力范围。

有人能告诉我如何制作以下矩阵吗?任何帮助都很好。我想我需要使用,bmatrix但之后我被难住了。

答案1

以下是我的做法:

\documentclass{article}

\usepackage{mathtools}
\usepackage{bm}

\DeclareMathOperator{\Hess}{Hess}
\newcommand*\vect[1]{\mathbf{#1}}

% http://tex.stackexchange.com/a/59955/15874
% The following piece of code measures the length of math expressions
% in order to get the length of the two horizontal rules (based on
% the chosen width of the whitespaces) in the matrix.
\makeatletter
\newcommand*\settowidthofalign[2]{%
  \setbox\z@=\vbox{
    \begin{align*}
    #2
    \ifmeasuring@\else\global\let\got@maxcolwd\maxcolumn@widths\fi
    \end{align*}
  }%
  \begingroup
  \def\or{+}\edef\x{\endgroup#1=\dimexpr\got@maxcolwd\relax}\x}
\makeatother

\newlength{\mylenA}
\newlength{\mylenB}

% Calculate length of rules.
\if \mylenA < \mylenB
  \newcommand*\ruleLength{\the\dimexpr(\mylenA-\mylenB-4*(\WhiteSpace))/2\relax}
 \else
  \newcommand*\ruleLength{\the\dimexpr(\mylenB-\mylenA-4*(\WhiteSpace))/2\relax}
\fi

% Matrix construction.
\newcommand*\Matrix[4]{%
  \left[
    \begin{array}{@{} c | c @{}}
      #1
      & \begin{array}{c}
          \vert\\
          #2\\
          \vline
          \vspace{0.5ex}
         \end{array}\\
      \hline
      \vspace{0.5ex}
      \raisebox{-0.3ex}{%
        $\rule[0.5ex]{\ruleLength}{0.4pt}
         \hspace{\WhiteSpace} #3 \hspace{\WhiteSpace}
         \rule[0.5ex]{\ruleLength}{0.4pt}$%
      }
      & \raisebox{-0.3ex}{$#4$}
    \end{array}
  \right]%
}

% Matrix entries.
\newcommand*\entryA{\Hess(f)(\vect{a}) - \lambda\Hess(g)(\vect{a})}
\newcommand*\entryB{\bm{\nabla} g(\vect{a})}
\newcommand*\entryC{D g(\vect{a})}
\newcommand*\entryD{0}

\begin{document}

% Widths of expressions in matrix entries.
\settowidthofalign{\mylenA}{\entryA}
\settowidthofalign{\mylenB}{\entryB}

\begin{equation*}
  % Width of whitespace on each side of horizontal lines.
  \def\WhiteSpace{12pt}
  % Math expression.
  H_{f,g} \binom{\vect{a}}{\lambda}
  = \Matrix{\entryA}{\entryB}{\entryC}{\entryD}
\end{equation*}

\end{document}

输出

在这种特殊情况下,这可能有点过头了,但你现在有了一个可以重复用于其他矩阵的工作构造。你所要做的就是

  • 定义新矩阵的条目(例如\entryE),
  • 定义要使用的新长度(使用\newlength),
  • 让 TeX 计算数学表达式的宽度(使用\settowidthofalign),
  • 对整个过程进行排版(使用\Matrix)。

注意:我不会将其\nabla加粗;我认为它对阅读的干扰大于帮助。

答案2

array以下是使用和一些\rule命令来处理额外行的方法里面单元格。请注意,该数组实际上由四行组成。

代码

\documentclass[varwidth]{standalone}
\usepackage{amsmath,bm}
\DeclareMathOperator\Hess{Hess}
\begin{document}
\begin{equation*}
\renewcommand*\a{\mathbf{a}}
\newcommand*\vl{\rule[-.3em]{.4pt}{1em}}
\newcommand*\hl{\rule[.5ex]{2em}{.4pt}}
%
H_{f,g}\binom{\a}{\lambda} = \left[\begin{array}{c|c}
                                  & \vl          \\
 \Hess(f)(\a)-\lambda\Hess(g)(\a) & \nabla g(\a) \\
                                  & \vl          \\ \hline
 \hl\quad Dg(\a) \quad\hl         & 0
\end{array}\right]
\end{equation*}
\end{document}

输出

在此处输入图片描述

答案3

类似这样的事?

\documentclass{article}
\usepackage{amssymb}
\usepackage{mathtools, array}
\DeclareMathOperator{\hess}{Hess}

\def\longline{\relbar\mkern-6mu\relbar}

\begin{document}

\[\setlength\extrarowheight{1pt}
  \begin{bmatrix}
    \begin{array}{c@{\,}c@{\,}c|c}
    & & & \vrule \\
    \multicolumn{3}{c|}{\hess_{f, g}(f)(\mathbf a)} & \nabla g(\mathbf a)\\
      & & & \vrule \\[-2.6ex] & & & \\
    \hline
    \longline & Dg(\mathbf a) &\longline & 0
    \end{array}
  \end{bmatrix} \]%

\end{document} 

在此处输入图片描述

答案4

如何使用普通 TeX 工具执行此操作:

\def\vec#1{{\bf#1}}
\def\lrule{\leaders\hrule height3pt depth-2.6pt\hskip2em \relax}
\def\Hess{\mathop{\rm Hess}\nolimits}
$$
  H_{f,g} {\vec a \choose \lambda} =
  \left[
  \vcenter{\offinterlineskip
     \halign{\hfil$#$\ \hfil\vrule height10pt depth5pt&\hfil\ $#$\hfil\cr
        & | \cr
        \Hess(f)(\vec a) - \lambda \Hess(g)(\vec a) & \nabla g(\vec a) \cr
        & | \cr
        \noalign{\hrule}
        \lrule\ Dg(\vec a)\ \lrule & 0 \cr
  }}
  \right]
$$

相关内容