matlab非线性参数拟合估计_很好的参考材料
- 格式:docx
- 大小:19.51 KB
- 文档页数:2
使用nlinfit 、fminsearch 在matlab 中实现基于最小二乘法的
非线性参数拟合
(整理自网上资源) 最小二乘法在曲线拟合中比较普遍。拟合的模型主要有
1. 直线型
2. 多项式型
3. 分数函数型
4. 指数函数型
5. 对数线性型
6. 高斯函数型一般对于 LS 问题,通常利用反斜杠运算“”、 fminsearch 或优化工具箱提供的极小化函数求解。在 Matlab 中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。在命令提示符后键入: cftool ,即可根据数据,选择适当的拟合模型。
“”命令
1. 假设要拟合的多项式是:y=a+b*x+c*xT.首先建立设计矩阵X:
X=[o nes(size(x)) x x A2];
执行:
para=X\y
para 中包含了三个参数: para(1)=a;para(2)=b;para(3)=c;
这种方法对于系数是线性的模型也适应。
2. 假设要拟合: y=a+b*exp(x)+cx*exp(xA2)
设计矩阵 X 为
X=[ones(size(x)) exp(x) x.*exp(x.A2)];
para=X\y
3. 多重回归(乘积回归)
设要拟合: y=a+b*x+c*t ,其中 x 和 t 是预测变量, y 是响应变量。设计矩阵为X=[ones(size(x)) x t] % 注意 x,t 大小相等!
para=X\y polyfit 函数
polyfit 函数不需要输入设计矩阵,在参数估计中, polyfit 会根据输入的数据生成设计矩阵。
1. 假设要拟合的多项式是: y=a+b*x+c*xA2 p=polyfit(x,y,2)
然后可以使用 polyval 在 t 处预测: y_hat=polyval(p,t)
polyfit 函数可以给出置信区间。
[p S]=polyfit(x,y,2) %S 中包含了标准差
[y_fit,delta] = polyval(p,t,S) % 按照拟合模型在 t 处预测
在每个 t 处的 95%CI为:(y_fit-1.96*delta, y_fit+1.96*delta)
2. 指数模型也适应
假设要拟合: y = a+b*exp(x)+c*exp(x.?2) p=polyfit(x,log(y),2)
fminsearch 函数
fminsearch 是优化工具箱的极小化函数。 LS 问题的基本思想就是残差的平方和(一种范数,由此,LS产生了许多应用)最小,因此可以利用fminsearch函数进行曲线拟合。
假设要拟合: y = a+b*exp(x)+c*exp(x.?2)
首先建立函数,可以通过 m文件或函数句柄建立:
x=[ .. ]';
y=[ .. ]';
f=@(p,x) p(1)+p(2)*exp(x)+p(3)*exp(x.?2) % 注意向量
化:p(1)=a;p (2)=b;p (3)=c;
%可以根据需要选择是否优化参数
%opt=options()
p0=ones(3,1);% 初值
para=fminsearch(@(p) (y-f(p,x)).A2,p0) % 可以输出 Hessian 矩阵 res=y-
f(para,x)% 拟合残差
曲线拟合工具箱提供了很多拟合函数,对大样本场合比较有效!非线性拟合nlinfit 函数
clear all;
x1=[0.4292 0.4269 0.381 0.4015 0.4117 0.3017]';
x2=[0.00014 0.00059 0.0126 0.0061 0.00425 0.0443]';
x=[x1 x2];
y=[0.517 0.509 0.44 0.466 0.479 0.309]';
f=@(p,x)
2.350176*p(1)*(1-1/p(2))*(1-(1-x(:,1).A(1/p(2))).Ap(2)).A2.*(x(:,1).A (-1/p(2))-1).A(-p(2)).*x(:,1).A(-1/p(2)-0.5).*x(:,2);
p0=[8 0.5]'; opt=optimset('TolFun',1e-3,'TolX',1e-3);%
[p R]=nlinfit(x,y,f,p0,opt)
2. 多项式型的一个例子
1900-2000 年的总人口情况的曲线拟合
clear all;close all;
%cftool 提供了可视化的曲线拟合!
t=[1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000]';