主题:拟合问题
function []=interp(X,Y,xx,m)
x=[20 40 60 80 100 120 140 160 180 200];%采样时间
y=[-0.12 -0.02 0.11 0.2 0.25 0.34 0.5 0.61 0.68 0.74];%采样值
y0=0;
c(1)=0;
xx=30;%待计算插值点
m=3;%数值精度
h=20;%采样步长
interval=0.025;
n=10;
b(1)=c(1)+(y(1)-y0)/(h^2);
a(1)=y(1)-b(1)*(h^2);
c(2)=-b(1);
for i=2:10
b(i)=c(i)+((y(i)-y(i-1))/(h^2));
a(i)=y(i)-b(i)*(h^2);
c(i+1)=-b(i);
end
syms t
digits(m);
yy(1)=a(1)+b(1)*(t^2)+c(1)*((x(1)-t)^2);
yy(10)=a(10)+b(10)*(t^2-x(9))+c(10)*((x(10)-t)^2);
for i=2:n
yy(i)=a(i)+b(i)*((t-x(i-1))^2)+c(i)*((x(i)-t)^2);%输出二次样条插值函数
yy(i)=simplify(yy(i))
coeff=sym2poly(yy(i))
if length(coeff)~=3
tt=coeff(1:2)
coeff(1:3)=0;
coeff(2:3)=tt;
end
val=x(i-1);
interval:x(i);
for k=1:length(val)
fval(k)=coeff(1)*val(k)^2+coeff(2)*val(k)+coeff(3);
end
if mod(i,2)==1
plot(val,fval,'O')
else plot(val,fval,'^')
end
hold on
clear val fval
ans=sym(coeff,'d');
ans=poly2sym(ans,'t');
fprintf('在区间[%f,%f]内\n',x(i-1),x(i));
fprintf('二次样条函数S(%d)=',i);
pretty(ans);
hold on
plot(x,y,'r*')
end
求助:结果怎么把拟合曲线都画出来?
x=[20 40 60 80 100 120 140 160 180 200];%采样时间
y=[-0.12 -0.02 0.11 0.2 0.25 0.34 0.5 0.61 0.68 0.74];%采样值
y0=0;
c(1)=0;
xx=30;%待计算插值点
m=3;%数值精度
h=20;%采样步长
interval=0.025;
n=10;
b(1)=c(1)+(y(1)-y0)/(h^2);
a(1)=y(1)-b(1)*(h^2);
c(2)=-b(1);
for i=2:10
b(i)=c(i)+((y(i)-y(i-1))/(h^2));
a(i)=y(i)-b(i)*(h^2);
c(i+1)=-b(i);
end
syms t
digits(m);
yy(1)=a(1)+b(1)*(t^2)+c(1)*((x(1)-t)^2);
yy(10)=a(10)+b(10)*(t^2-x(9))+c(10)*((x(10)-t)^2);
for i=2:n
yy(i)=a(i)+b(i)*((t-x(i-1))^2)+c(i)*((x(i)-t)^2);%输出二次样条插值函数
yy(i)=simplify(yy(i))
coeff=sym2poly(yy(i))
if length(coeff)~=3
tt=coeff(1:2)
coeff(1:3)=0;
coeff(2:3)=tt;
end
val=x(i-1);
interval:x(i);
for k=1:length(val)
fval(k)=coeff(1)*val(k)^2+coeff(2)*val(k)+coeff(3);
end
if mod(i,2)==1
plot(val,fval,'O')
else plot(val,fval,'^')
end
hold on
clear val fval
ans=sym(coeff,'d');
ans=poly2sym(ans,'t');
fprintf('在区间[%f,%f]内\n',x(i-1),x(i));
fprintf('二次样条函数S(%d)=',i);
pretty(ans);
hold on
plot(x,y,'r*')
end
求助:结果怎么把拟合曲线都画出来?