機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

2次元の点列にフィットする両端点と両端点の接ベクトルを固定した3次ベジェ曲線を求める

はじめに

本記事は2次元の点列にフィットする3次ベジェ曲線を求める(以下、元記事)を元に書いています。
元記事に出てくる数は使いまわします。

要件

タイトルの「両端点と両端点の接ベクトルを固定した」とは「始点の位置ベクトル」と「終点の位置ベクトル」と「始点の接ベクトル」と「終点の接ベクトル」を固定したという意味です。

求めるべき変数

{\bf p}_0 における接ベクトルを {\bf t}_1{\bf p}_3 における符号を反転した接ベクトルのを {\bf t}_2 とします。

{\bf p}_1{\bf p}_0 を通り方向ベクトルが {\bf t}_1=\begin{pmatrix}t_{0x}&t_{0y}\end{pmatrix}^\top の直線上にあり、 {\bf p}_0 から見て {\bf t}_1 方向に存在するとすれば \alpha_1>0 を用いて、以下のように書けます。

\begin{eqnarray}
{\bf p}_1={\bf p}_0+\alpha_1{\bf t}_1\tag{1}
\end{eqnarray}

{\bf p}_2{\bf p}_3 を通り方向ベクトルが {\bf t}_2=\begin{pmatrix}t_{3x}&t_{3y}\end{pmatrix}^\top の直線上にあり、 {\bf p}_3 から見て {\bf t}_2 方向に存在するとすれば \alpha_2>0 を用いて、以下のように書けます。

\begin{eqnarray}
{\bf p}_2={\bf p}_3+\alpha_2{\bf t}_2\tag{2}
\end{eqnarray}

よって、求める変数は \alpha_1,\alpha_2 です。

目的関数の定義

目的関数 {\rm E}{\rm E}_x,{\rm E}_y を足し合わせて、以下のように定義します。

\begin{eqnarray}
{\rm E}(\alpha_1,\alpha_2)&=&\sum_{n=1}^N||{\bf r}(t_n)-{\bf x}_n||^2\tag{3}
\end{eqnarray}

解析的に解く

{\rm E}\alpha_1,\alpha_2微分して =0 とおきます。


\begin{eqnarray}
\left\{
\begin{array}{l}
\dfrac{\partial {\rm E}}{\partial \alpha_1}=0\hspace{100px}(4)\\
\dfrac{\partial {\rm E}}{\partial \alpha_2}=0\hspace{100px}(5)\\
\end{array}
\right.
\end{eqnarray}

(4) の左辺を変形します。

\begin{eqnarray}
\dfrac{\partial {\rm E}}{\partial \alpha_1}&=&\dfrac{\partial}{\partial \alpha_1}\sum_{n=1}^N||{\bf r}(t_n)-{\bf x}_n||^2\\
&=&2\sum_{n=1}^N({\bf r}(t_n)-{\bf x}_n)^\top\dfrac{\partial}{\partial \alpha_1}({\bf r}(t_n)-{\bf x}_n)\\
&=&2\sum_{n=1}^N({\bf r}(t_n)-{\bf x}_n)^\top\dfrac{\partial}{\partial \alpha_1}({\rm B}_0^3(t_n){\bf p}_0+{\rm B}_1^3(t_n){\bf p}_1+{\rm B}_2^3(t_n){\bf p}_2+{\rm B}_3^3(t_n){\bf p}_3-{\bf x}_n)\\
&=&2\sum_{n=1}^N({\bf r}(t_n)-{\bf x}_n)^\top\dfrac{\partial}{\partial \alpha_1}({\rm B}_0^3(t_n){\bf p}_0+{\rm B}_1^3(t_n)({\bf p}_0+\alpha_1{\bf t}_1)+{\rm B}_2^3(t_n)({\bf p}_3+\alpha_2{\bf t}_2)+{\rm B}_3^3(t_n){\bf p}_3-{\bf x}_n)\\
&=&2\sum_{n=1}^N({\bf r}(t_n)-{\bf x}_n)^\top\dfrac{\partial}{\partial \alpha_1}{\rm B}_1^3(t_n)\alpha_1{\bf t}_1\\
&=&2\sum_{n=1}^N({\bf r}(t_n)-{\bf x}_n)^\top{\rm B}_1^3(t_n){\bf t}_1\\
&=&2\sum_{n=1}^N{\rm B}_1^3(t_n)({\rm B}_0^3(t_n){\bf p}_0+{\rm B}_1^3(t_n)({\bf p}_0+\alpha_1{\bf t}_1)+{\rm B}_2^3(t_n)({\bf p}_3+\alpha_2{\bf t}_2)+{\rm B}_3^3(t_n){\bf p}_3-{\bf x}_n)^\top{\bf t}_1\\
&=&2\left({\rm A}_{1,1}||{\bf t}_1||^2\alpha_1+{\rm A}_{1,2}{\bf t}_2^\top{\bf t}_1\alpha_2+{\rm A}_{1,0}{\bf p}_0^\top{\bf t}_1+{\rm A}_{1,1}{\bf p}_0^\top{\bf t}_1+{\rm A}_{1,2}{\bf p}_3^\top{\bf t}_1+{\rm A}_{1,3}{\bf p}_3^\top{\bf t}_1-\sum_{n=1}^N{\rm B}_1^3(t_n){\bf x}_n^\top{\bf t}_1\right)\\
&=&2\left({\rm A}_{1,1}||{\bf t}_1||^2\alpha_1+{\rm A}_{1,2}{\bf t}_2^\top{\bf t}_1\alpha_2+{\bf t}_1^\top\left({\rm A}_{1,0}{\bf p}_0+{\rm A}_{1,1}{\bf p}_0+{\rm A}_{1,2}{\bf p}_3+{\rm A}_{1,3}{\bf p}_3-\sum_{n=1}^N{\rm B}_1^3(t_n){\bf x}_n\right)\right)\\
&=&2\left({\rm A}_{1,1}||{\bf t}_1||^2\alpha_1+{\rm A}_{1,2}{\bf t}_2^\top{\bf t}_1\alpha_2-X_1\right)\tag{6}
\end{eqnarray}

(4){\rm A}_{i,j}=\displaystyle\sum_{n=1}^N{\rm B}_i^3(t_n){\rm B}_j^3(t_n),\ X_i=-{\bf t}_i^\top\left({\rm A}_{i,0}{\bf p}_0+{\rm A}_{i,1}{\bf p}_0+{\rm A}_{i,2}{\bf p}_3+{\rm A}_{i,3}{\bf p}_3-\sum_{n=1}^N{\rm B}_i^3(t_n){\bf x}_n\right) とおきました。
(5) の左辺を変形します。

\begin{eqnarray}
\dfrac{\partial {\rm E}}{\partial \alpha_2}&=&2\sum_{n=1}^N({\bf r}(t_n)-{\bf x}_n)^\top\dfrac{\partial}{\partial \alpha_2}({\rm B}_0^3(t_n){\bf p}_0+{\rm B}_1^3(t_n)({\bf p}_0+\alpha_1{\bf t}_1)+{\rm B}_2^3(t_n)({\bf p}_3+\alpha_2{\bf t}_2)+{\rm B}_3^3(t_n){\bf p}_3-{\bf x}_n)\\
&=&2\sum_{n=1}^N({\bf r}(t_n)-{\bf x}_n)^\top\dfrac{\partial}{\partial \alpha_2}{\rm B}_2^3(t_n)\alpha_2{\bf t}_2\\
&=&2\sum_{n=1}^N({\bf r}(t_n)-{\bf x}_n)^\top{\rm B}_2^3(t_n){\bf t}_2\\
&=&2\sum_{n=1}^N{\rm B}_2^3(t_n)({\rm B}_0^3(t_n){\bf p}_0+{\rm B}_1^3(t_n)({\bf p}_0+\alpha_1{\bf t}_1)+{\rm B}_2^3(t_n)({\bf p}_3+\alpha_2{\bf t}_2)+{\rm B}_3^3(t_n){\bf p}_3-{\bf x}_n)^\top{\bf t}_2\\
&=&2\left({\rm A}_{2,1}{\bf t}_2^\top{\bf t}_1\alpha_1+{\rm A}_{2,2}||{\bf t}_2||^2\alpha_2+{\rm A}_{2,0}{\bf p}_0^\top{\bf t}_2+{\rm A}_{2,1}{\bf p}_0^\top{\bf t}_2+{\rm A}_{2,2}{\bf p}_3^\top{\bf t}_2+{\rm A}_{2,3}{\bf p}_3^\top{\bf t}_2-\sum_{n=1}^N{\rm B}_2^3(t_n){\bf x}_n^\top{\bf t}_2\right)\\
&=&2\left({\rm A}_{2,1}{\bf t}_2^\top{\bf t}_1\alpha_1+{\rm A}_{2,2}||{\bf t}_2||^2\alpha_2+{\bf t}_2^\top\left({\rm A}_{2,0}{\bf p}_0+{\rm A}_{2,1}{\bf p}_0+{\rm A}_{2,2}{\bf p}_3+{\rm A}_{2,3}{\bf p}_3-\sum_{n=1}^N{\rm B}_2^3(t_n){\bf x}_n\right)\right)\\
&=&2\left({\rm A}_{2,1}{\bf t}_2^\top{\bf t}_1\alpha_1+{\rm A}_{2,2}||{\bf t}_2||^2\alpha_2-X_2\right)\tag{7}
\end{eqnarray}

(6),(7) をそれぞれ式 (4),(5) に代入します。

\begin{eqnarray}
&&\left\{
\begin{array}{l}
2\left({\rm A}_{1,1}||{\bf t}_1||^2\alpha_1+{\rm A}_{1,2}{\bf t}_2^\top{\bf t}_1\alpha_2-X_1\right)=0\\
2\left({\rm A}_{2,1}{\bf t}_2^\top{\bf t}_1\alpha_1+{\rm A}_{2,2}||{\bf t}_2||^2\alpha_2-X_2\right)=0
\end{array}
\right.\\
&&\Rightarrow\left\{
\begin{array}{l}
{\rm A}_{1,1}||{\bf t}_1||^2\alpha_1+{\rm A}_{1,2}{\bf t}_2^\top{\bf t}_1\alpha_2=X_1\\
{\rm A}_{2,1}{\bf t}_2^\top{\bf t}_1\alpha_1+{\rm A}_{2,2}||{\bf t}_2||^2\alpha_2=X_2
\end{array}\\
\right.\\
&&\Rightarrow
\begin{pmatrix}{\rm A}_{1,1}||{\bf t}_1||^2 & {\rm A}_{1,2}{\bf t}_2^\top{\bf t}_1\\ {\rm A}_{2,1}{\bf t}_2^\top{\bf t}_1 & {\rm A}_{2,2}||{\bf t}_2||^2\end{pmatrix}
\begin{pmatrix}\alpha_1\\ \alpha_2\end{pmatrix}
=
\begin{pmatrix}X_1\\ X_2\end{pmatrix}\\
&&\Rightarrow
\begin{pmatrix}\alpha_1\\ \alpha_2\end{pmatrix}
=
\begin{pmatrix}{\rm A}_{1,1}||{\bf t}_1||^2 & {\rm A}_{1,2}{\bf t}_2^\top{\bf t}_1\\ {\rm A}_{2,1}{\bf t}_2^\top{\bf t}_1 & {\rm A}_{2,2}||{\bf t}_2||^2\end{pmatrix}^{-1}
\begin{pmatrix}X_1\\ X_2\end{pmatrix}\tag{8}
\end{eqnarray}

(8) を計算すれば、\alpha_1,\alpha_2 が求まります。

目次へ戻る