霍纳多项式长除法

霍纳多项式长除法

我正在尝试使用 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其中oi分别表示外部和内部。

通过这个我可以轻松得出以下内容:

在此处输入图片描述

仅使用此代码:

\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}

相关内容