制作“增强”系数矩阵的最佳方法是什么?

制作“增强”系数矩阵的最佳方法是什么?

在研究线性方程组时,提醒人们系数矩阵的最后一列保存常数是很好的。这通常在书中通过在最后一列和倒数第二列之间放置一条垂直线来实现。在 LaTex 中执行此操作的好方法是什么?

答案1

实现此目的的一种方法是使用在线线性代数教科书(两种意义上都是免费的)线性代数作者为 Jim Hefferon。本书采用 LaTeX 编写,是开源的,因此可以下载本书及其附带的样式文件。其中一个名为 的文档linalgjh.sty是关于排版常见的线性代数内容,例如增强矩阵和行归约等。增强矩阵的代码为:

\newenvironment{amatrix}[1]{%
  \left(\begin{array}{@{}*{#1}{c}|c@{}}
}{%
  \end{array}\right)
}

用途如下:

\begin{amatrix}{2}
   1 & 2 & 3 \\  a & b & c
 \end{amatrix}

(请注意,该参数比总列数少一)。我猜想@{}开头和结尾处的 s 是为了使空格与括号对齐(TH 在对 fabikw 的类似答案的评论中提到过)。

该样式文件还有其他几个可能有用的线性代数宏。

答案2

如果您使用数组构建自己的环境,那么您就比较安全。我会扩展amsmath使用可选参数的内部宏。

优点:

  • 它同时扩展多个矩阵环境(matrix,,,,,)。pmatrixbmatrixBmatrixvmatrixVmatrix

  • 这些环境的名称和含义保持不变(不是apmatrix等等)。

  • 间距等与 相同amsmath

  • 您可以做的不仅仅是插入垂直线(使用颜色和对齐方式,例如由于减号而右对齐的列)。

  • 如果省略可选参数,它的作用与amsmath环境完全相同。

警告:

  • 由于您重新定义了内部宏,因此如果原始包更改其代码,它可能无法工作。但amsmath.sty十多年来一直没有改变。如果矩阵后来发生变化,您可以调整自己的宏。

代码:

这是重新定义,只需在加载后将其放入序言中amsmath

\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
  \hskip -\arraycolsep
  \let\@ifnextchar\new@ifnextchar
  \array{#1}}
\makeatother

由于宏名称中的,我不得不使用\makeatletter... 。可选参数是的标准参数。 中的原始定义是:\makeatother@amsmath\arrayamsmath

\def\env@matrix{\hskip -\arraycolsep
  \let\@ifnextchar\new@ifnextchar
  \array{*\c@MaxMatrixCols c}}

因此,没有太多的改变。

例子:

简单增广矩阵:

\begin{pmatrix}[cc|c]
  1 & 2 & 3\\
  4 & 5 & 9
\end{pmatrix}

使用更复杂,具有不同的对齐方式、间距和颜色:

\begin{bmatrix}[*2cr@{\quad}|@{\quad}>{\color{red}}r]
  a & b & 1  &  4 \\
  c & d & -2 & -3
\end{bmatrix}

输出:

替代文本

只需删除括号中的可选参数,您就会得到标准pmatrixbmatrix

我曾在 2008 年的一篇博客文章中使用过此代码和示例:amsmath矩阵环境的扩展

如果您不想重新定义该内部宏,您可以给它一个不同的名称,并以与amatrix完全相同的方式在其上构建您的环境。amsmathpmatrix

答案3

如果你使用数组来输入矩阵,那么你只需要指定类似

\left(\begin{array}{cc|c}  
 2 & 0 & 1\\  
 0 & 1 & 1  
\end{array}\right)

答案4

如果由于某种原因(例如您尝试在 Pages 中制作增强矩阵)其他答案不起作用,您可以使用您选择的分隔符内的两个矩阵制作一个增强矩阵:

\left[
  \begin{matrix}
    1 & 2 & 3 \\
    1 & 2 & 3 \\
    1 & 2 & 3 \\
    1 & 2 & 3 \\
  \end{matrix}
  \left|
    \,
    \begin{matrix}
      4  \\
      4  \\
      4  \\
      4  \\
    \end{matrix}
  \right.
\right]

此代码生成如下矩阵:
矩阵示例

您可以通过添加\,或其他分隔符来修改分隔符之间的间距。

相关内容