我正在尝试使用 Horner 的综合除法进行多项式除法,如 Hall & Knight 所著的《初等代数》第 451 页所述。
我想用霍纳方法进行以下除法:
我已经成功地做到了这一点:
\documentclass{article}
\usepackage{arydshln}
\begin{document}
\begin{center}
\begin{tabular}{r|rrr:rr}
3 & 9 & 0 & 2 & 6 & -8 \\
\hline
-1 & & -3 & 6 & & \\
2 & & & 1 & -2 & \\
& & & & -3 & 6 \\
\hline
& 3 & -1 & 3 & 1 & -2 \\
\cdashline{5-6}
\end{tabular}
\end{center}
\end{document}
但是我怎样才能绘制如下图所示的箭头呢?
答案1
这只是一个非常快速的回答。
\documentclass[border=5pt,tikz]{standalone}
\usetikzlibrary{matrix,fit,arrows}
\begin{document}
\begin{tikzpicture}[>=latex]
\useasboundingbox (-5,-4) rectangle (5,4);
\matrix (m) [row sep=1cm,column sep=1cm,matrix of nodes]
{
3 & 9 & 0 & 2 & 6 & -8 \\
-1 & \phantom{a} & -3 & 6 & \phantom{a} & \phantom{a} \\
2 & \phantom{a} & \phantom{a} & -1 & -2 & \phantom{a} \\
\phantom{a} & \phantom{a} & \phantom{a} & \phantom{a} & -3 & 6 \\
\phantom{a} & 3 & -1 & 3 & 1 & -2 \\
\phantom{a} & $x^2$ & $x$ & T.I & $x$ & T.I \\
};
\draw ([xshift=.2cm]m-1-1.north east) -- ([xshift=.2cm]m-6-1.south east);
\draw[dashed] ([yshift=.2cm]m-1-5.north east) -- ([yshift=.2cm]m-6-5.south east);
\draw ([yshift=-.2cm]m-1-1.south west) -- ([yshift=-.2cm]m-1-6.south east);
\draw ([yshift=-.2cm]m-4-1.south west) -- ([yshift=-.2cm]m-4-6.south east);
\node[fit=(m-1-2),draw,circle,inner sep=1pt] (a) {};
\node[draw,fit=(m-1-3)(m-2-3)] (b) {};
\node[draw,fit=(m-1-4)(m-3-4)] (c) {};
\draw[->] (a) --+ (0,-1.1) --+ (-.5,-.6);
\draw[->] (b) --+ (0,-2) --+ (-.5,-1.5);
\draw[->] (c) --+ (0,-3) --+ (-.5,-2.5);
\end{tikzpicture}
\end{document}
答案2
这实际上是对回答的当前用户,因为我在评论中提出了一些“提示”,但在我亲自尝试之后,它们实际上使矩阵的线条放置变得更加困难。
我遇到的问题是,我想使用列的实际宽度和行的实际高度来放置线条,但您仍然想使用节点的最小大小来设置fit
它们周围的节点。为了解决这个问题,我添加了一个新的矩阵样式fixed matrix
,在单元格的背景中放置一个固定大小的节点,设置行的高度和列的宽度,并放置一个额外的节点,其上是实际内容(应小于所需尺寸,否则仍然无法工作)。这些节点被命名为<matrix name>-<row num>-<column num>-o
和,<matrix name>-<row num>-<column num>-i
其中o
和i
分别表示外部和内部。
通过这个我可以轻松得出以下内容:
仅使用此代码:
\begin{tikzpicture}[>=latex]
\matrix [fixed matrix] (l)
{
3 & 9 & 0 & 2 & 6 & -8 \\
-1 & & -3 & 6 & & \\
2 & & & -1 & -2 & \\
& & & & -3 & 6 \\
& 3 & -1 & 3 & 1 & -2 \\
& $x^2$ & $x$ & T.I & $x$ & T.I \\
};
\draw (l-1-1-o.north east) -- (l-6-1-o.south east);
\draw[dashed] (l-1-5-o.north east) -- (l-6-5-o.south east);
\draw (l-1-1-o.south west) -- (l-1-6-o.south east);
\draw (l-4-1-o.south west) -- (l-4-6-o.south east);
\node[fit=(l-1-2-i),draw,circle,inner sep=1pt] (a) {};
\node[draw,fit=(l-1-3-i)(l-2-3-i)] (b) {};
\node[draw,fit=(l-1-4-i)(l-3-4-i)] (c) {};
\draw[->] (a.south) --++ (0,-0.6) node[right]{$ \div $} --+ (-0.4,0.4);
\draw[->] (b.south) --++ (0,-0.6) node[right]{$ \div $} --+ (-0.4,0.4);
\draw[->] (c.south) --++ (0,-0.6) node[right]{$ \div $} --+ (-0.4,0.4);
\end{tikzpicture}
一些附加功能包括:
- 该
fixed matrix
样式接受一个参数,可用于:- 使用以下方式设置内部节点的样式
inner nodes={<style>}
- 使用以下方式设置外部节点的样式
outer nodes={<style>}
- 设置行高
row height=<dimension>
(默认为10mm
) - 设置列宽
column width=<dimension>
(默认为10mm
)
- 使用以下方式设置内部节点的样式
matrix
小缺点是,如果在调用样式之前命名fixed matrix
,则无法使用自定义矩阵名称引用单个节点,但默认值m
用作矩阵名称。
fixed matrix
将上面的代码片段中的调用更改为,fixed matrix={row height=8mm,column width=8mm,inner nodes={draw=green,line width=1pt},outer nodes={dashed,draw=blue}}
您可以获得以下图像(仅为示例,绝对不是建议的改进):
完整代码(非常感谢当前用户以此开始他的事业):
\documentclass[border=2mm,tikz]{standalone}
\usetikzlibrary{fit}
\tikzset{
fixed matrix/.cd,
row height/.initial=10mm,
column width/.initial=10mm,
name/.initial=m,
inner node style/.style={},
outer node style/.style={},
inner nodes/.code={\tikzset{fixed matrix/inner node style/.style={#1}}},
outer nodes/.code={\tikzset{fixed matrix/outer node style/.style={#1}}},
}
\tikzset{
fixed matrix/.style={
inner sep=0pt,
nodes={inner sep=0.333em},
name/.forward to=/tikz/fixed matrix/name,
execute at begin cell={
\node[
inner sep=0pt,
minimum width=\pgfkeysvalueof{/tikz/fixed matrix/column width},
minimum height=\pgfkeysvalueof{/tikz/fixed matrix/row height},
fixed matrix/outer node style,
] (\pgfkeysvalueof{/tikz/fixed matrix/name}-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn-o){};
\node[fixed matrix/inner node style] (\pgfkeysvalueof{/tikz/fixed matrix/name}-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn-i) \bgroup},
execute at end cell={\egroup;},
execute at empty cell={
\node[
inner sep=0pt,
minimum width=\pgfkeysvalueof{/tikz/fixed matrix/column width},
minimum height=\pgfkeysvalueof{/tikz/fixed matrix/row height},
fixed matrix/outer node style,
] (\pgfkeysvalueof{/tikz/fixed matrix/name}-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn-o){};},
},
fixed matrix/.append code=\tikzset{fixed matrix/.cd,#1},
}
\begin{document}
\begin{tikzpicture}[>=latex]
\matrix [fixed matrix={row height=8mm,column width=8mm,inner nodes={draw=green,line width=1pt},outer nodes={dashed,draw=blue}}] (l)
{
3 & 9 & 0 & 2 & 6 & -8 \\
-1 & & -3 & 6 & & \\
2 & & & -1 & -2 & \\
& & & & -3 & 6 \\
& 3 & -1 & 3 & 1 & -2 \\
& $x^2$ & $x$ & T.I & $x$ & T.I \\
};
\draw (l-1-1-o.north east) -- (l-6-1-o.south east);
\draw[dashed] (l-1-5-o.north east) -- (l-6-5-o.south east);
\draw (l-1-1-o.south west) -- (l-1-6-o.south east);
\draw (l-4-1-o.south west) -- (l-4-6-o.south east);
\node[fit=(l-1-2-i),draw,circle,inner sep=1pt] (a) {};
\node[draw,fit=(l-1-3-i)(l-2-3-i)] (b) {};
\node[draw,fit=(l-1-4-i)(l-3-4-i)] (c) {};
\draw[->] (a.south) --++ (0,-0.6) node[right]{$ \div $} --+ (-0.4,0.4);
\draw[->] (b.south) --++ (0,-0.6) node[right]{$ \div $} --+ (-0.4,0.4);
\draw[->] (c.south) --++ (0,-0.6) node[right]{$ \div $} --+ (-0.4,0.4);
\end{tikzpicture}
\end{document}