MathSword教程9.分段多项式拟合

1 背景
对于二维函数问题,有时我们希望用分段多项式去逼近复杂的函数(三次样条插值就使用了这一思想),也就是说希望建立如下的数学模型去匹配测试数据  
(1)
$$
y=\begin{cases}
A_{0,0}+\sum_{i=1}^nA_{0,i}x^i&,x<b_0
\\
A_{1,0}+\sum_{i=1}^nA_{1,i}x^i&,b_0\leq x < b_1
\\
A_{2,0}+\sum_{i=1}^nA_{2,i}x^i&,b_1\leq x < b_12
\\

\\
A_{m,0}+\sum_{i=1}^nA_{m,i}x^i &,b_{m-1}\leq x < b_m
\end{cases}
$$
公式里\(n\)为多项式最高次数,\(m+1\)为分的段数, \(b_0,b_1,b_2,…,b_m\)为分段临界点。

如果严格要求(1)里的模型在定义域里\(p\)阶导连续(这里\(p\)为大于等于0的整数),则这时在分界点处必然满足如下关系  
(2)
$$
\begin{cases}
f(p-1,p)A_{0,p}+\sum_{i=p+1}^nf(p,i)b_0^{i-p}A_{0,i}&=f(p-1,p)A_{1,p}+\sum_{i=p+1}^nf(p,i)b_0^{i-p}A_{1,i}
\\
f(p-1,p)A_{1,p}+\sum_{i=p+1}^nf(p,i)b_1^{i-p}A_{1,i}&=f(p-1,p)A_{2,p}+\sum_{i=p+1}^nf(p,i)b_1^{i-p}A_{2,i}
\\
f(p-1,p)A_{2,p}+\sum_{i=p+1}^nf(p,i)b_2^{i-p}A_{2,i}&=f(p-1,p)A_{3,p}+\sum_{i=p+1}^nf(p,i)b_2^{i-p}A_{3,i}
\\

\\
f(p-1,p)A_{m-1,p}+\sum_{i=p+1}^nf(p,i)b_{m-1}^{i-p}A_{m-1,i}&=f(p-1,p)A_{m,p}+\sum_{i=p+1}^nf(p,i)b_{m-1}^{i-p}A_{m,i}
\end{cases}
$$
公式里\(f(p,i)\)函数定义如下  
(3)
$$
f(p,i)=\begin{cases}
1&,p=-1
\\
1&,p=0
\\
\prod_{k=1}^p(i+1-k)&,p>0
\end{cases}
$$
最终(2)可以变为  
(4)
$$
\begin{cases}
A_{1,p}&=A_{0,p}+\dfrac{1}{f(p-1,p)}\sum_{i=p+1}^nf(p,i)b_0^{i-p}(A_{0,i}-A_{1,i})
\\
A_{2,p}&=A_{1,p}+\dfrac{1}{f(p-1,p)}\sum_{i=p+1}^nf(p,i)b_1^{i-p}(A_{1,i}-A_{2,i})
\\
A_{3,p}&=A_{2,p}+\dfrac{1}{f(p-1,p)}\sum_{i=p+1}^nf(p,i)b_2^{i-p}(A_{2,i}-A_{3,i})
\\

\\
A_{m,p}&=A_{m-1,p}+\dfrac{1}{f(p-1,p)}\sum_{i=p+1}^nf(p,i)b_{m-1}^{i-p}(A_{m-1,i}-A_{m,i})
\end{cases}
$$
有时还需要模型通过类似公式(5)里的特定点,这时可根据(2)导出类似(4)的表达式,进而进行变量替换。 
(5)
$$
\begin{cases}
y|_{x=1.2}&=3.6
\\\\
\dfrac{dy}{dx}|_{x=2.5}&=-0.8
\\\\
\dfrac{d^2y}{dx^2}|_{x=-1.2}&=-0.36
\\\\

\end{cases}
$$

因此在实际处理分段多项式过程中,为了求解系数,可以通过(4)(5)将变量进行消除替代,然后再使用最小二乘求解拟合,最终求得的结果就严格满足第几阶导连续的要求。

PS:对于超过二维的多维数据,也可以尝试用分段多项式进行处理,这时构建的模型随着维度增加系数更多,在实际处理时如果也要求数据在分界点处具有几阶导连续,本质上也可如上面公式一般导出各个系数之间的关系。

2 教程

针对二维分段多项式,MathSword软件内置了单独的控制窗口进行处理,软件里支持几阶导连续约束,也支持通过特定点的约束,除了可以直接求解多项式分段系数外,还支持寻优最佳的分界点。