发布网友 发布时间:2022-04-21 19:28
共1个回答
热心网友 时间:2023-11-10 17:34
这下子好了。
clear;clc;
x=[2 3 4 5 7 8 10 11 14 15 16 18 19];
y=[106.42 108.26 109.58 109.5 110 109.93 110.49 110.59 110.6 110.9 110.76 111 111.2];
x3=min(x):0.1:max(x);%可以放在循环外
%v=zeros(3,6);没有必要,需要的话可以,v=[];
for n=1:3
v(n,1:n+3)=polyfit(x,y,n+2);
y3(:,n)=polyval(v(n,1:n+3),x3);
text=strcat(num2str(n+2),'次多项式模拟函数为');
disp(text);
disp(poly2str(v(n,1:n+3),'x'));
end
%用多项式拟合一般效果都不好,用分式拟合效果好
fun=@(a,t) (a(1)*t.^2 + a(2)*t + a(3))./ (t + a(4))
fun1=@(b,t) b(1)*exp(b(2)*t) + b(3)*exp(b(4)*t)
a0=[0.1 100 -100 -1];
b0=[100 0 -20 -1];
a=nlinfit(x,y,fun,a0)
b=nlinfit(x,y,fun1,b0)
ya=fun(a,x3);
yb=fun1(b,x3);
plot(x,y,'o',x3,y3)%
figure
plot(x,y,'o',x3,ya,'r',x3,yb,'k')