多項式の平行移動


調査しても出てこないが、簡単すぎるので記事として残すかは微妙なところ。
特に高次成分が問題になる場合、最小二乗法などの多項式近似の時にあると少し便利。



# 問題設定

```math
y = \sum_{k=0}^n a_k x^k
```

と表される多項式を、

```math
y = \sum_{k=0}^n a_k (x+x_0)^k
```

としてx軸に-x0だけ平行移動する。平行移動した場合、


```math
y = \sum_{k=0}^n a'_k x^k
```

としたら、新しい係数(a'k)はどのように表現されるかを考える。

# 公式

```math
_nC_k = \frac{n!}{k!(n-k)!}
```
として、

```math
\left(
 \begin{array}{ccc}
  a'_n \\
  a'_{n-1} \\
  \vdots \\
  a'_1 \\
  a'_0 \\
 \end{array}
  \right)
  = \left(
    \begin{array}{ccc}
      1 & 0 & \cdots & 0 & 0 \\
      _{n}C_1 x_0 & 1 & \cdots & 0 & 0 \\
      \vdots & \vdots & \ddots & \vdots & \vdots \\
      _{n}C_1 x_0^{n-1} & _{n-1}C_1 x_0^{n-1} & \cdots & 1 & 0 \\
      _{n}C_0 x_0^{n} & _{n-1}C_0 x_0^{n-1} & \cdots & _1C_0 x_0 & 1\\
    \end{array}
  \right)

\left(
 \begin{array}{ccc}
  a_n \\
  a_{n-1} \\
  \vdots \\
  a_1 \\
  a_0 \\
 \end{array}
  \right)
```

証明は二項定理より明らか。

```math
(x+x_0)^n = \sum_{k=0}^n {_n}C_k x^k x^{n-k}
```

# 例：3次の場合


```math
\left(
 \begin{array}{ccc}
  a'_3 \\
  a'_2 \\
  a'_1 \\
  a'_0 \\
 \end{array}
  \right)
  = \left(
    \begin{array}{ccc}
      1 & 0 & 0 & 0 \\
      _{3}C_2 x_0 & 1 & 0 & 0 \\
      _{3}C_1 x_0^{2} & _{2}C_1 x_0 & 1 & 0 \\
      _{3}C_0 x_0^{3} & _{2}C_0 x_0^{2} & _1C_0 x_0 & 1\\
    \end{array}
  \right)

\left(
 \begin{array}{ccc}
  a_3 \\
  a_2 \\
  a_1 \\
  a_0 \\
 \end{array}
\right)
```

```math
\left(
 \begin{array}{ccc}
  a'_3 \\
  a'_2 \\
  a'_1 \\
  a'_0 \\
 \end{array}
  \right)
  = \left(
    \begin{array}{ccc}
      1 & 0 & 0 & 0 \\
      3 x_0 & 1 & 0 & 0 \\
      3 x_0^{2} & 2 x_0 & 1 & 0 \\
      x_0^{3} & x_0^{2} & x_0 & 1\\
    \end{array}
  \right)

\left(
 \begin{array}{ccc}
  a_3 \\
  a_2 \\
  a_1 \\
  a_0 \\
 \end{array}
\right)
```

# 陰関数について


陰関数の場合も、基本的には同様で、xだけ、yだけの項で表される場合は式を書き下して、同じように行列の形で書けます。

## 例：円の方程式

```math
x^2 + y^2 = r^2
```

平行移動により

```math
x^2 + a_1 x + a_0 + y^2 + b_1 y + b_0 = r^2
```

としたとすると、

```math
\left(
 \begin{array}{ccc}
  a_2 \\
  a_1 \\
  a_0 \\
 \end{array}
  \right)
  = \left(
    \begin{array}{ccc}
      1 & 0 & 0 \\
      2 x_0 & 1 & 0 \\
      x_0^{2} & x_0 & 1 \\
    \end{array}
  \right)

\left(
 \begin{array}{ccc}
  1 \\
  0 \\
  0 \\
 \end{array}
\right) = 
\left(
 \begin{array}{ccc}
  1 \\
  2x_0 \\
  x_0^2 \\
 \end{array}
\right) 
```


```math
\left(
 \begin{array}{ccc}
  b_2 \\
  b_1 \\
  b_0 \\
 \end{array}
  \right)
  = \left(
    \begin{array}{ccc}
      1 & 0 & 0 \\
      2 y_0 & 1 & 0 \\
      y_0^{2} & y_0 & 1 \\
    \end{array}
  \right)

\left(
 \begin{array}{ccc}
  1 \\
  0 \\
  0 \\
 \end{array}
\right) = 
\left(
 \begin{array}{ccc}
  1 \\
  2y_0 \\
  y_0^2 \\
 \end{array}
\right) 
```

となり、明らかに平行移動したときの式


```math
(x+x_0)^2 + (y+y_0)^2 = r^2
```

と同じになります。

これをさらにまとめて、

```math
\left(
 \begin{array}{ccc}
  a_2 \\
  b_2 \\
  a_1 \\
  b_1 \\
  a_0 \\
  b_0 \\
 \end{array}
  \right)
  = \left(
    \begin{array}{ccc}
      1 & 0 & 0 & 0 & 0 & 0 \\
      0 & 1 & 0 & 0 & 0 & 0 \\
      2 x_0 & 0 & 1 & 0 & 0 & 0 \\
      0 & 2 y_0 & 0 & 1 & 0 & 0 \\ 
      x_0^{2} & 0 & x_0 & 0 & 1 & 0 \\
      0 & x_0^{2} & 0 & y_0 & 0 & 1 \\
    \end{array}
  \right)

\left(
 \begin{array}{ccc}
  1 \\
  1 \\
  0 \\
  0 \\
  0 \\
  0 \\
 \end{array}
\right) = 
\left(
 \begin{array}{ccc}
  1 \\
  1 \\
  2x_0 \\
  2y_0 \\
  x_0^2 \\
  y_0^2 \\
 \end{array}
\right) 
```

と書くと、より一般化された表現になって良いでしょう。

## 二次形式

```math
x^2 + q_{12} xy + y^2 = C
```

の形式を持つ関数(二次形式)を-x0, -y0だけ平行移動して、

```math
x^2 + q_{12}' xy + y^2 + a_1' x + b_1' y + a_0 = C
```

と表したとします。このとき、

```math
\left(
 \begin{array}{ccc}
  1 \\
  q'_{12} \\
  1 \\
  a'_1 \\
  b'_1 \\
  a_0 \\
 \end{array}
  \right)
  = \left(
    \begin{array}{ccc}
      1 & 0 & 0 & 0 & 0 & 0 \\
      0 & 1 & 0 & 0 & 0 & 0 \\
      0 & 0 & 1 & 0 & 0 & 0 \\
      2x_0 & ? & 0 & 1 & 0 & 0 \\ 
      0 & ?  & 2y_0 & 0 & 1 & 0 \\
      x_0^2 & ? & y_0^2 & 0 & 0 & 1 \\
    \end{array}
  \right)

\left(
 \begin{array}{ccc}
  1 \\
  q_{12} \\
  1 \\
  0 \\
  0 \\
  0 \\
 \end{array}
\right)
```

というのは今までの公式で導けますが、?を別途求めてあげる必要があります。
(自動化は出来るのですが、個別の次数がややこしくなるので、ここでは書かないほうがいいでしょう。
やり方としては, xとyの次数を出して、個別に展開してくるときの係数がどうなるかを埋めます。そして、計算が必要な次数は(xの次数+yの次数)より小さいところだけなので、それを抽出するようなイメージです。)

xyの項に注目すると、x0, y0だけ平行移動したことにより

```math
q_{12} (x+x_0)(y+y_0) = q_{12} (xy +y_0 x +x_0 y + x_0 y_0)
```

となるので、?の部分を埋めて、

```math
\left(
 \begin{array}{ccc}
  1 \\
  q'_{12} \\
  1 \\
  a'_1 \\
  b'_1 \\
  a_0 \\
 \end{array}
  \right)
  = \left(
    \begin{array}{ccc}
      1 & 0 & 0 & 0 & 0 & 0 \\
      0 & 1 & 0 & 0 & 0 & 0 \\
      0 & 0 & 1 & 0 & 0 & 0 \\
      2x_0 & y_0 & 0 & 1 & 0 & 0 \\ 
      0 & x_0  & 2y_0 & 0 & 1 & 0 \\
      x_0^2 & x_0 y_0 & y_0^2 & 0 & 0 & 1 \\
    \end{array}
  \right)

\left(
 \begin{array}{ccc}
  1 \\
  q_{12} \\
  1 \\
  0 \\
  0 \\
  0 \\
 \end{array}
\right)
```

となります。

上記のようなやり方は、きちんとフローを考えたらプログラマブルに出来ると思うので、平行移動が面倒と感じたら実装してみると良いです。