一、matlab的拟合函数polyfit()函数
matlab的多项式拟合:
polyfit()函数
功能:在最小二乘法意义之上,求解Y关于X的最佳的N次多项式函数。
在MATLAB中,polyfit函数是用于多项式曲线拟合的工具,它基于最小二乘法来找到数据的最佳拟合多项式。该函数的基本用法是p = polyfit(x, y, n),其中x和y是数据点的坐标,n是多项式的次数。函数返回的p是一个包含多项式系数的向量,这些系数按照从高到低的顺序排列。
二、举例:
以下是一个简单的例子,演示如何使用 polyfit 函数进行二次拟合。
%创建一组数据点
x = [0 1 2 3 4 5];
y = [2.1 7.7 13.6 27.2 40.9 61.1];
%进行二次拟合
p = polyfit(x,y,2);
%创建插值函数
f = polyval(p,x);
%绘制拟合结果和数据点
plot(x,y,'o',x,f,'-');
三、代码示例
以下是使用polyfit函数进行多项式拟合的一个简单示例:
% 原始数据
x = 1:20;
y = [1,12,23,46,78,98,100,123,160,210,230,270,292,350,346,386,438,349,460,512];
% 使用polyfit进行拟合
p = polyfit(x, y, 1);
% 使用polyval计算拟合的多项式结果
y_fit = polyval(p, x);
% 绘制原始数据和拟合结果
figure;
scatter(x, y, '.');
hold on;
plot(x, y_fit, 'Color', 'r');
xlabel('x');
ylabel('y');
title('使用polyfit和polyval进行拟合');
legend('原始数据', '拟合直线');
四、例子:
clc;clear;
close all;
x=[1 2 3 4 5];
y=[2.7 7.4 20.0 54.5 148.4];
r=corrcoef(x,y) ;%两个变量的相关系数
a=polyfit(x,y,2)
x1=1:0.1:5;
P=polyval(a,x1);%a是多项式拟合后返回的系数
figure(1);hold on;plot(x,y,'r*',x1,P,'b-.');
注:a是返回的两次多项式的系数,返回结果是:14.3071 -51.9929 45.2000,这意味着拟合的多项式是:
y=45.2000+(-51.9929)*x+14.3071*x^2
五、例子:
clc;clear;
close all;
x=[1 2 3 4 5];
y=[2.7 7.4 20.0 54.5 148.4];
r=corrcoef(x,y) ;
%a=polyfit(x,y,2)
b=polyfit(x,y,3)
c=polyfit(x,y,4)
x1=1:0.1:5;
%Pa=polyval(a,x1);%a是多项式拟合后返回的系数
Pb=polyval(b,x1);%a是多项式拟合后返回y系数
Pc=polyval(c,x1);%a是多项式拟合后返回的系数
%figure(1);hold on;plot(x,y,'r*',x1,Pa,'b-.');
figure(1);hold on;plot(x,y,'r*',x1,Pb,'r-.');
figure(1);hold on;plot(x,y,'r*',x1,Pc,'g-.');

注:红色是三次拟合的结果。
绿色是四次拟合的结果。
五、拟合和误差估计
polyfit函数还可以返回一个结构体S,该结构体可以用作polyval函数的输入,以获取误差估计值。如果需要对数据进行中心化和缩放以改善数值属性,可以使用[p, S, mu] = polyfit(x, y, n)语法。其中mu是一个包含中心化和缩放值的二元素向量,mu(1)是mean(x),mu(2)是std(x)。
六、使用中心化和缩放改善数值属性
在处理大量数据点的问题时,增加多项式拟合的次数并不总是能得到更好的拟合。高次多项式可能会在数据点之间振荡,导致与数据之间的拟合较差。在这些情况下,可以使用低次多项式拟合或不同的方法。此外,多项式在本质上是无边界的振荡函数,因此它们并不非常适合外插有界的数据或单调的数据。
七、算法
polyfit使用x构造范德蒙矩阵V,并生成线性系统V*p = y,其中p是多项式系数。由于范德蒙矩阵中的列是向量x的幂,因此对于高阶拟合来说,V的条件数通常较大,生成一个奇异系数矩阵。在这些情况下,中心化和缩放可以改善系统的数p属性,以产生更可靠的拟合。
八、扩展功能
polyfit函数支持大型数组计算、C/C++代码生成、基于线程的环境、GPU加速以及分布式数组计算。这些功能可以帮助处理大规模数据集,加快计算速度,并允许在集群上进行并行计算。
通过使用polyfit和polyval函数,MATLAB用户可以有效地对数据进行多项式拟合,并评估拟合的质量。这些工具在数据分析和工程计算中非常有用,尤其是在需要对实验数据或观测数据进行建模时。