当前位置:文档之家› 参数三次埃尔米特插值实例分析

参数三次埃尔米特插值实例分析


2
公式推导
参数三次曲线,简称 PC 曲线,表示为: ������(t) = ������0 + ������1 t + ������2 ������ 2 + ������3 ������ 3 , ������ ∈ [0,1] 确定四个系数矢量的方法是给定曲线两端点及其切矢。 对函数中参数 t 求导,得: ������������ ������′ (������) = = ������1 + 2������2 ������ + 3������3 ������ 2 ������������ 用������ = 0,1代入以上两式,得: ������0 = ������(0) ������0 + ������1 + ������2 + ������3 = ������(1) ������1 = ������′ (0) ������1 + 2������2 + 3������3 = ������′ (1) 写成矩阵形式: ������(0) 1 0 0 0 ������0 ������ ������(1) 1 1 1 1 1 [ ] [������ ] = ′ ������ (0) 0 1 0 0 2 ������ 0 1 2 3 3 [������′ (1)] 于是可得: ������0 1 0 0 0 ������(0) ������1 0 0 1 0 ������(1) [������ ] = [ ] 2 −3 3 −2 −1 ������′ (0) ������3 2 −2 1 1 [������′ (1)] 将上式代入函数方程,得: 1 0 0 0 ������(0) 0 0 1 0 ������(1) ������(t) = [1 ������ ������ 2 ������ 3 ] [ ] −3 3 −2 −1 ������′ (0) 2 −2 1 1 [������′ (1)] 上式即与标量形式的三次埃尔米特插值相对应的参数形式,即定义在区间������ ∈ [0,1]
′ ⃗ ,即������′ ⃗ 为0 0 = ������n−1 = 0,此时矩阵方程有解,使用高斯消元法即可解得一组解。
通过以上步骤求得每个数据点的切矢,以及知道他们的坐标,即可进行分段参 数三次埃尔米特插值,这里以������ = 0.34������ 3 + 3������为被插曲线,使用等距参数化取得 数据点进行插值,插值曲线如下图所示: 3 被插函数y=0.34*x. +3*x,姓名: 彭茂武 学号:2018210378
0
图 3 插值曲线为自由曲线
4
分段参数三次埃尔米特插值
由以上两点参数三次埃尔米特插值的特点,我们可以对多个数据点进行 n 次两 点插值,然后将其组合成一条曲线,这种方法称为分段参数三次埃尔米特插值,其 中最大的问题是将 n 端三次参数曲线光滑拼接。 这里引出两端曲线光滑拼接的条件: 1.边界重合:前一段曲线的终点为后一段曲线的起点; 2.切向矢量连续:前一段曲线终点处的切矢等于后一段曲线起点处的切矢; 3.曲率连续:前一段曲线终点处的二阶切矢等于后一段曲线起点处的二阶切矢。 即: ������������ (1) = ������������ (0) ′ { ������′ ������ (1) = ������������ (0) ′′ ������′′ ������ (1) = ������������ (0) 对������(������) 求二阶导数得: 1 0 0 0 ������(0) 0 0 1 0 ������(1) ������′′ (t) = [0 0 2 6������] [ ] −3 3 −2 −1 ������′ (0) 2 −2 1 1 [������′ (1)] 将������ = 0,1代入得: ′ ′ ������′′ ������ (0) = −6������������ (0) + 6������������ (1) − 4������������ (0) − 2������������ (1) ′ ′ ������′′ ������ (1) = 6������������ (0) − 6������������ (1) + 2������������ (0) + 4������������ (1) 化简可得: ′ ′ ������′ ������ (0) + 4������������ (0) + ������r (1) = 3[������������ (1) − ������������ (0)] 上式即为两段三次参数曲线光滑连接的条件。 则 n 段三次参数曲线光滑连接的条件为: ′ ′ ������′ ������ = 1,2,3, ⋯ , n ������−1 + 4������������ + ������������+1 = 3[������������+1 − ������������−1 ], 利用这个公式,可以得到:
60
40
20
Y轴
0
-20
-40
数据点 被插曲线 插值曲线 -6 -4 -2 0 X轴 2 4 6 8
-60 -8
被插函数y=0.34*x. +3*x,姓名: 彭茂武 学号:2018210378 60
图 4 等距划分为 10 段时的插值曲线 3
40
20
Y轴
0
-20
-40
数据点 被插曲线 插值曲线 -6 -4 -2 0 X轴 2 4 6 8
������′ 3( ������2 − ������0 ) − ������′ 1 0 ������′ 3(������ − ������ ) 3 1 2 = ∙ ∙ ∙ ∙ 1 ∙ ∙ ′ ′ ] ( ������ [ 3 ������ − ������ 1 4 [ ������−2 ] ������−1 ������−3 ) − ������n−1 )] 其中有 n 个未知数,n-2 个方程,所以无法求得解,把两个端点看成自由点,即切矢 4 1 1 4 1 1 ∙ ∙ [
参数三次埃尔米特插值实例分析 1 前言
由前面学习的知识得知,多项式曲线在处理多点高次插值时会出现震荡的问题 (即 Runge 现象),使曲线的光滑度大打折扣,特别是在两端。而单一低次多项 式曲线难以描述复杂形状的曲线。故而,唯一选择就是将一段段低次曲线在满足一 定连接条件下拼接起来,这个过程生成的曲线称为组合曲线。相应用分片定义的曲 面称为组合曲面。由于人们不希望一条组合曲线包含太多段,且并非次数越低越 好,在实践中,设计人员逐渐总结得到三次曲线是一个较好的折中。因为参数三次 曲线是既可以带有拐点的平面曲线,又能生成空间曲线的次数最低的参数多项式曲 线。在参数三次曲线中,埃尔米特插值具备形式简单,物理意义明确,控制简单的 优点,故本次实验选用埃尔米特插值方法来进行分段插值。
5
5.1
附录
两点参数三次埃尔米特插值 matlab 代码
x=[10 30]; y=[10 30]; %两端点坐标 x_=[15 5]; y_=[25 25]; %两控制点坐标 plot(x,y,'ok',x_,y_,'sk',x,y,'--b'); hold on; plot([x(1),x_(1)],[y(1),y_(1)],'r'); h1=plot([x(2),x_(2)],[y(2),y_(2)],'r'); hold on; t=linspace(0,1,16); %插值细分量 H=[(t.^0)',t',(t.^2)',(t.^3)']*[1,0,0,0;0,0,1,0;-3,3,-2,-1;2,-2,1,1]*[x(1),y(1);x(2),y(2);x_(1)x(1),y_(1)-y(1);x_(2)-x(2),y_(2)-y(2)]; %进行参数三次埃尔米特插值 plot(H(:,1),H(:,2),'-k'); xlim([0,45]); ylim([0,35]); xlabel('X轴') ylabel('Y轴') set(get(get(h1,'Annotation'),'LegendInformation'),'IconDisplayStyle','off'); legend('端点','控制点','弦线','控制点','插值曲线',0); title('两点参数埃尔米特插值 '); grid on; hold on; 5.2 N=30; 分段参数三次埃尔米特插值 matlab 代码
function X=Guass(A,b)
n=size(A,1); X=zeros(n,1); for j=1:n-1 T=[]; a=A(j:n,j); m=find(abs(a)==max(abs(a))); A([j,m(1)+j-1],:) = A([j+m(1)-1,j],:); [b(j), b(j+m(1)-1)] = deal(b(m(1)+j-1),b(j)); for i=1:n-j T(i)=-A(i+j,j)/A(j,j); A(i+j,:)=A(i+j,:)+A(j,:)*T(i); b(i+j)= b(i+j)+b(j)*T(i); end end for i=n:-1:1 sum=0; for j=n:-1:i+1 sum=sum+X(j)*A(i,j); end X(i)=(b(i)-sum)/A(i,i); end
பைடு நூலகம்
0
图 1 插值曲线为直线
35
30
25
相关主题