请使用matlab编写代码x1 x2 x3 x4和y1 y2 y3 y4分别为四组横坐标与纵坐标的值请使用B样条分别拟合由xy组成的散点图且要求经过所有点并将拟合后的四条曲线分别求导后画在同一副图中
以下是使用matlab编写的代码:
% 输入四组横坐标和纵坐标的值 x1 = [1 2 3 4]; y1 = [2 4 1 3]; x2 = [1 2 3 4]; y2 = [3 1 4 2]; x3 = [1 2 3 4]; y3 = [2 3 1 4]; x4 = [1 2 3 4]; y4 = [4 1 3 2];
% 拟合曲线 t = linspace(0,1,101); p1 = spline(x1,[y1(1),y1,y1(end)]); p2 = spline(x2,[y2(1),y2,y2(end)]); p3 = spline(x3,[y3(1),y3,y3(end)]); p4 = spline(x4,[y4(1),y4,y4(end)]);
% 画曲线 figure; subplot(2,1,1); plot(x1,y1,'o',x2,y2,'x',x3,y3,'+',x4,y4,'*'); hold on; plot(ppval(p1,t),ppval(p2,t),ppval(p3,t),ppval(p4,t)); title('B样条拟合曲线'); legend('data1','data2','data3','data4','fit1','fit2','fit3','fit4');
% 求导并画曲线 p1d = fnder(p1,1); p2d = fnder(p2,1); p3d = fnder(p3,1); p4d = fnder(p4,1); subplot(2,1,2); plot(t,ppval(p1d,t),'-',t,ppval(p2d,t),'--',t,ppval(p3d,t),':',t,ppval(p4d,t),'-.'); title('B样条拟合曲线的一阶导数'); legend('fit1','fit2','fit3','fit4');
原文地址: https://www.cveoy.top/t/topic/Kgl 著作权归作者所有。请勿转载和采集!