使用nlinfit、fminsearch在matlab中实现基于最小二乘法的
非线性参数拟合
(整理自网上资源)
最小二乘法在曲线拟合中比较普遍。拟合的模型主要有
1.直线型
2.多项式型
3.分数函数型
4.指数函数型
5.对数线性型
6.高斯函数型
......
一般对于LS问题,通常利用反斜杠运算“\”、fminsearch或优化工具箱提供的极小化函数求解。在Matlab中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。在命令提示符后键入:cftool,即可根据数据,选择适当的拟合模型。
“\”命令
1.假设要拟合的多项式是:y=a+b*x+c*x^
2.首先建立设计矩阵X:
X=[ones(size(x)) x x^2];
执行:
para=X\y
para中包含了三个参数:para(1)=a;para(2)=b;para(3)=c;
这种方法对于系数是线性的模型也适应。
2.假设要拟合:y=a+b*exp(x)+cx*exp(x^2)
设计矩阵X为
X=[ones(size(x)) exp(x) x.*exp(x.^2)];
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*x^2
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)