Matlab 最小二乘 曲线拟合

Matlab: 最小二乘 曲线拟合
问题:给定一批数据点(输入变量与输出变量的数据),需确定满足特定要求的曲线或曲面。如果输入变量和输出变量都只有一个,则属于一元函数的拟合和插值;而若输入变量有多个,则为多元函数的拟合和插值(有点回归分析的意思)
解决方案:
顽皮故事1 若要求所求曲线(面)通过所给所有数据点,就是插值问题;
2 若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合。
祖国版图上的世界之最
泛华建设集团注意:插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同的。而面对一个实际问题,究竟应该用插值还是拟合,有时容易确定,有时则并不明显
数据拟合的具体作法是:对给定数据 (i=0,1,…,m),在取定的函数类中,求,使误差(i=0,1,…,m)的平方和最小,即
    =
从几何意义上讲,就是寻求与给定点(i=0,1,…,m)的距离平方和为最小的曲线 (图6-1)。函数称为拟合 函数或最小二乘解,求拟合函数的方法称为曲线拟合的最小二乘法。
在曲线拟合中,函数类可有不同的选取方法.
61
1.“\”命令
2.polyfit函数
3.fminsearch函数
4.曲线拟合工具箱
1.非线性拟合nlinfit函数
5.例子
1.1. 直线型例子
2.2. 多项式型
3.非线性(多元情况)
最小二乘法在曲线拟合中比较普遍。拟合的模型主要有
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.多重回归(乘积回归)
pt100设要拟合: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)
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)).^2,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).^(1/p(2))).^p(2)).^2.*(x(:,1).^(-1/p(2))-1).^(-p(2)).*x(:,1).^(-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)
例子1. 直线型例子
2. 多项式型
1900-2000年的总人口情况的曲线拟合
clear all;close all;
%cftool提供了可视化的曲线拟合!
t=[1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000]';
y=[75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633 281.4220]';
%t太大,以t的幂作为基函数会导致设计矩阵尺度太差,列变量几乎线性相依。变换为[-1 1]上

本文发布于:2024-09-21 19:48:19,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/403344.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:拟合   函数   曲线拟合   数据   变量
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议