23.用三次样条函数去模拟汽车车门的曲线,车门曲线的型值点数据如下 (P89页) :
`%%%
function f=cf(y)
p=length(y);
for k=1:p-1;
f(k)=y(k+1)-y(k);
end
%%%
function [lk,mk,ek]=jh(x,h,f)
n=length(x);
for k=2:n-1;
lk(k)=h(k)/(h(k-1)+h(k));
mk(k)=h(k-1)/(h(k-1)+h(k));
ek(k)=3*(lk(k)*f(k-1)+mk(k)*f(k));
end
%%%
function h=bc(x)
n=length(x);
for k=1:n-1;
h(k)=x(k+1)-x(k);
end
%%%
x=[0,1,2,3,4,5,6,7,8,9,10];
y=[2.51,3.30,4.04,4.70,5.22,5.54,5.78,5.40,5.57,5.70,5.80];
h=bc(x)
f=cf(y)
[lk,mk,ek]=jh(x,h,f)
m1=0.8;
m11=0.2;
A=[2 mk(2) 0 0 0 0 0 0 0;lk(3) 2 mk(3) 0 0 0 0 0 0;0 lk(4) 2 mk(4) 0 0 0 0 0;...
0 0 lk(5) 2 mk(5) 0 0 0 0;0 0 0 lk(6) 2 mk(6) 0 0 0;0 0 0 0 lk(7) 2 mk(7) 0 0;...
0 0 0 0 0 lk(8) 2 mk(8) 0;0 0 0 0 0 0 lk(9) 2 mk(9);0 0 0 0 0 0 0 lk(9) 2]
B=[ek(2)-lk(2)*m1;ek(3);ek(4);ek(5);ek(6);ek(7);ek(8);ek(9);ek(10)-mk(10)*m11]
C=A\B
m2=C(1);m3=C(2);m4=C(3);m5=C(4);m6=C(5);m7=C(6);m8=C(7);m9=C(8);m10=C(9);
m=[m1 m2 m3 m4 m5 m6 m7 m8 m9 m10 m11]
for i=1:10;
x1=[i-1:0.00001:i]
s1=(x1-x(i+1)).^2.*(h(i)+2.*(x1-x(i))).*y(i)/h(i).^3;
s2=(x1-x(i)).^2.*(h(i)+2.*(x(i+1)-x1)).*y(i+1)/h(i).^3;
s3=(x1-x(i+1)).^2.*(x1-x(i)).*m(i)/(h(i).^2);
s4=(x1-x(i)).^2.*(x1-x(i+1))*m(i+1)/(h(i).^2);
s=s1+s2+s3+s4;
plot(x,y,'bo-',x1,s,'--red')
hold on
end
axis([0 10 0 8]);
title('汽车车门的三次插值样条曲线')
xlabel('插值点横坐标X');
ylabel('插值点纵坐标Y');
%%%
function createfigure(X1, Y1, X2, Y2, X3, Y3, X4, Y4, X5, Y5, X6, Y6, X7, Y7, X8, Y8, X9, Y9, X10, Y10, X11, Y11)
%CREATEFIGURE(X1, Y1, X2, Y2, X3, Y3, X4, Y4, X5, Y5, X6, Y6, X7, Y7, X8, Y8, X9, Y9, X10, Y10, X11, Y11)
% X1: x 数据的矢量
% Y1: y 数据的矢量
% X2: x 数据的矢量
% Y2: y 数据的矢量
% X3: x 数据的矢量
% Y3: y 数据的矢量
% X4: x 数据的矢量
% Y4: y 数据的矢量
% X5: x 数据的矢量
% Y5: y 数据的矢量
% X6: x 数据的矢量
% Y6: y 数据的矢量
% X7: x 数据的矢量
% Y7: y 数据的矢量
% X8: x 数据的矢量
% Y8: y 数据的矢量
% X9: x 数据的矢量
% Y9: y 数据的矢量
% X10: x 数据的矢量
% Y10: y 数据的矢量
% X11: x 数据的矢量
% Y11: y 数据的矢量
% 由 MATLAB 于 04-Nov-2018 18:57:48 生成
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% 创建 plot
plot(X1,Y1,'Marker','o','Color',[0 0 1]);
% 创建 plot
plot(X2,Y2);
% 创建 plot
plot(X3,Y3);
% 创建 plot
plot(X4,Y4);
% 创建 plot
plot(X5,Y5);
% 创建 plot
plot(X6,Y6);
% 创建 plot
plot(X7,Y7);
% 创建 plot
plot(X8,Y8);
% 创建 plot
plot(X9,Y9);
% 创建 plot
plot(X10,Y10);
% 创建 plot
plot(X11,Y11,'LineStyle','--','Color',[1 0 0]);
% 创建 xlabel
xlabel('插值点横坐标X','FontSize',11);
% 创建 title
title('汽车车门的三次插值样条曲线','FontSize',11);
% 创建 ylabel
ylabel('插值点纵坐标Y','FontSize',11);
% 取消以下行的注释以保留坐标轴的 X 范围
% xlim(axes1,[0 10]);
% 取消以下行的注释以保留坐标轴的 Y 范围
% ylim(axes1,[0 8]);
box(axes1,'on');
% 创建 textarrow
annotation(figure1,'textarrow',[0.728928571428571 0.7075],...
[0.468095238095238 0.660476190476191],'String',{'三次样条函数插值曲线'});
% 创建 textarrow
annotation(figure1,'textarrow',[0.520833333333333 0.559895833333333],...
[0.533720930232558 0.686046511627907],'String',{' 用线段连接插值点'});
% 创建 textarrow
annotation(figure1,'textarrow',[0.384895833333333 0.364583333333333],...
[0.436046511627907 0.582558139534884],'String',{'插值点'});`
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv16246