引言
使用MATLAB拟合曲线有两种常用方式:1)使用cftool工具箱;2)polyfit函数多项式拟合。工具箱需要人工交互得到拟合结果,结果不适合调用。我们下面针对polyfit函数结合例子拟合进行测试。
polyfit
调用方式:
p = polyfit(x,y,n)
[p,S] = polyfit(x,y,n)
[p,S,mu] = polyfit(x,y,n)
此 MATLAB 函数 返回阶数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中)。p 中的系数按降幂排列,p 的长度为n+1。
例子
x = linspace(0,4*pi,10);
y = sin(x);
p = polyfit(x,y,7);
x1 = linspace(0,4*pi);
y1 = polyval(p,x1);
figure
plot(x,y,'o')
hold on
plot(x1,y1)
hold off
拟合结果为7次多项式,当我们无法确定多项式时,如何自动的判断阶数呢?
for i=1:10
p = polyfit(x,y,i);
f = polyval(p,x); %计算拟合函数在x处的值。
if sum((f-y).^2)<0.01
n = i
break;
end
end
假设我们的误差平方和精度范围为0.01,那么通过以上程序,我们可以看到用7阶函数拟合,就可以达到精度要求。在多项式进行拟合的时候这个值我们在程序执行的过程中就直接可以调用。
完整示例
clc
clear all
close all
x = linspace(0,4*pi,10);
y = sin(x);
for i=1:10
p = polyfit(x,y,i);
f = polyval(p,x); %计算拟合函数在x处的值。
if sum((f-y).^2)<0.01
n = i
break;
end
end
p = polyfit(x,y,n);
x1 = linspace(0,4*pi);
y1 = polyval(p,x1);
figure
plot(x,y,'o')
hold on
plot(x1,y1)
hold off
f = poly2sym(p)