最小二乘法matlab实现


前言

最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具。


1 polyfit多阶拟合

x,y为离散点数据。

p=polyfit(x,y,n)
最小二乘法计算拟合多项式系数。x,y为拟合数据向量,要求维度相同,n为拟合多项式次数(即拟合函数的阶数)。返回p(p是一个向量)保存多项式系数,由最高次向最低次排列。

y = p ( 1 ) ⋅ x n + p ( 2 ) ⋅ x n − 1 + ⋅ ⋅ ⋅ + p ( n ) ⋅ x 1 + p ( n + 1 ) y= p(1)·x^n + p(2)·x^{n-1} +···+p(n)·x^1+p(n+1) y=p(1)xn+p(2)xn1++p(n)x1+p(n+1)

y1=polyval(p,x)
计算多项式的函数值。返回在x处多项式的值,p为多项式系数,元素按多项式降幂排序。

自变量x中不重复的元素个数m,和拟合阶数k需要满足m>=k+1。简单分析:k阶拟合需要确定k+1个未知参数(如1阶拟合y = ax + b需要确定a和b两个参数),故而至少需要k+1个方程,故而需要至少k+1个不同的已知数对(x,y),由于函数中x只能对应一个y,故而需要至少k+1个不同的x。

plot(x,y,'·',x,y1,'-')
画图。

2 lsqnonlin非线性拟合

x=lsqnonlin('fun',x0)
fun是函数文件,x0是迭代初值。

函数文件

function r=fun(t)
%x,y为离散点数据。
x=[];
y=[];

%函数
r=x-t(1)*exp(t(2)*y);
x0=[];
%得到系数
t=lsqnonlin('fun',x0);

%结果可视化
y=[];
x=t(1)*exp(t(2)*y);
plot(x,y,'·');

猜你喜欢

转载自blog.csdn.net/weixin_44037272/article/details/110144072
今日推荐