matlab非线性参数拟合估计

上传人:ta****u 文档编号:187723715 上传时间:2023-02-16 格式:DOCX 页数:5 大小:51.28KB
收藏 版权申诉 举报 下载
matlab非线性参数拟合估计_第1页
第1页 / 共5页
matlab非线性参数拟合估计_第2页
第2页 / 共5页
matlab非线性参数拟合估计_第3页
第3页 / 共5页
资源描述:

《matlab非线性参数拟合估计》由会员分享,可在线阅读,更多相关《matlab非线性参数拟合估计(5页珍藏版)》请在装配图网上搜索。

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

2、 x2;执行:para=Xypara 中包含了三个参数: para(1)=a;para(2)=b;para(3)=c; 这种方法对于系数是线性的模型也适应。2假设要拟合:y=a+b*exp(x)+cx*exp(x2) 设计矩阵 X 为X=ones(size(x) exp(x) x.* exp(x.2);para=Xy3. 多重回归(乘积回归)设要拟合:y=a+b*x+c*t,其中x和t是预测变量,y是响应变量。设计矩阵为 X=ones(size(x) x t %注意 x,t 大小相等!para=Xypolyfit 函数polyfit函数不需要输入设计矩阵,在参数估计中,polyfit会根据输入

3、的数据 生成设计矩阵。1假设要拟合的多项式是:y二a+b*x+c*x2 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

4、)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(l)=a;p(2)=b;p(3)=c;%可以根据需要选择是否优化参数%opt=options() p0=ones(3,l);% 初值 para=fminsearch(p)

5、 (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(l) *(ll/p(2) *(l(lx(:,l)(l/p(2).p(2

6、)2. *(x(:,l).八 (T/p(2)T). (-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)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

7、131.669 150.697 179.323 203.212 226.505 249.633 281.4220;%t 太大,以 t 的幂作为基函数会导致设计矩阵尺度太差,列变量几乎线性相依。 变换为-1 1上s=(t-1950)/50;%plot(s,y,ro);%回归线:y二a+bxmx=mean(s);my=mean(y); sx=std(s);sy=std(y);r=corr(s,y);b=r*sy/sx;a=my-b*mx;rline=a+b.*s;figure; subplot(3,2,1 2)plot(s,y,ro,s,rline,k);%title(多项式拟合); set(gc

8、a,XTick,s,XTickLabel,sprintf(%d|,t);%hold on;n=4;PreYear=2010 2015 2020;%预测年份 tPreYear=(PreYear-1950)/50;Y=zeros(length(t),n); res=zeros(size(Y);delta=zeros(size(Y);PrePo=zeros(length(PreYear),n);Predelta=zeros(size(PrePo);for i=1:np S(i)=polyfit(s,y,i);Y(:, i) delta(:, i)二polyval(p,s,S(i);%拟合的 YPre

9、Po(:,i) Predelta(:, i)=polyval (p, tPreYear, S(i) ;%预测 res(:,i)=y-Y(:,i);% 残差end% plot(s,Y);%2009a自动添加不同颜色%legend(data,regressionline,1stpoly,2ndpoly,3rdpoly,4th poly,2)% plot(tPreYear,PrePo,);% hold off% plo t(Y,res,o);% 残差图r二corr(s,Y)2 %R“2%拟合误差估计 CIYearAdd=t;PreYear; tYearAdd=s;tPreYear;CFtit = 一

10、阶拟合,二阶拟合,三阶拟合,四阶拟合;for col=1:n subplot(3,2,col+2); plot(s,y,ro,s,Y(:,col),g-);% 原始数据和拟合数据 legend(Original,Fitted,2);hold on; plot(s,Y(:,col)+2*delta(:,col),r:);%95% CI plot(s,Y(:,col)-2*delta(:,col),r:); plot(tPreYear,PrePo(:,col),);% 预测值 plot(tPreYear,PrePo(:,col)+2*Predelta(:,col);% 预测 95% CI plot

11、(tPreYear,PrePo(:,col)-2*Predelta(:,col);axis(-1.2 1.8 0 400); set(gca,XTick,tYearAdd,XTickLabel,sprintf(%d|,YearAdd); title(CFtitcol);hold off;endfigure;%残差图for col=1:n subplot(2,2,col); plot(Y(:,i),res(:,i),o);end一个非线性的应用例子(多元情况)要拟合 y=a*xnl+b*x2n2+c*x3n3 %注:只是作为应用,模型不一定正确!%x2=x3!y=1080.94 1083.03

12、1162.80 1155.61 1092.82 1099.26 1161.06 1258.051299.03 1298.30 1440.22 1641.30 1672.21 1612.73 1658.64 1752.42 1837.99 2099.29 2675.47 2786.33 2881.07;x1=1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 1.8 1.85 1.9 1.95 2;x2=1 1.025 1.05 1.075 1.1 1.125 1.15 1.175 1.2 1.225 1.2

13、50 1.275 1.3 1.325 1.350 1.375 1.4 1.425 1.45 1.475 1.5;x3=1 1.025 1.05 1.075 1.1 1.125 1.15 1.175 1.2 1.225 1.250 1.275 1.3 1.3251.350 1.375 1.4 1.425 1.45 1.475 1.5; x=x1 x2 x3;f=(p,x) p(l) *x(:,l).p(2)+p(3) *x(:,2).p(4)+p(5) *x(:,3).p(6); p0=ones(6,1);p二fminsearch(p)sum(y-f(p,x).2,p0) res=y-f(p,x

14、);res2二res.2 %失败的模型Matlab 自定义函数 自定义函数的途径:M 文件函数(M file function) 在线函数(Inline Function) 匿名函数(Anonymous Func tion)1.M 文件函数 范例function c=myadd(a,b)%这里可以写函数的使用说明,前面以%开头%在工作区中,help myadd将显示此处的说明 c=a+b;%end %非必须的第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是 函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为 myadd.m。要使用my

15、add函数,该函数必须在Matlab的搜索路径中。调用方式:在 Matlab 命令符后输入 a=1;b=2;c=myadd(a,b)2.在线函数(Inline Func tion)通常作为参数传递给另外一个函数。比如 fminsearch, lsqcurvefit 等函数需要 以函数作为参数。在线函数从字符串表达式创建函数,例如:f二inline(x2,x);创建了函数f(x)二x2。要计算f(3),在工作区输入f(3)即可。f(2 3 4)计算 在 x=2 3 4 时的值f=inline(x+y,x,y)创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于f(f,2,

16、3)。3.匿名函数(Anonymous Func tion) 匿名函数使用函数句柄来表示匿名函数,定义形式为函数句柄=(变量名) 函数表达式例如:f=(x) x.2定义了函数f(x)=x2, f(2)计算在x=2处的值。匿名函数可以调用 Matlab 函数,也可以使用工作区中存在的变量,例如 a=2;f=(x) x.2+af(2) %计算时引用了变量 aa=0;f(2) %仍然引用的是 a=2匿名函数也可以由 Matlab 的内置函数或 M 文件函数创建,例如f=sin %f(x)=sin(x)f(pi/2) %sin(pi/2) functions(f) %查看函数信息利用单元数组可以创建多个函数的句柄,例如f=sin cosf1(pi/2) %计算 sin(pi/2) f2(pi) %计算 cos(pi)函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。Matlab 7 以后,建议以匿名函数取代在线函数!在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的 时候, Matlab 不再进行搜索,而是立即执行该函数,极大提高了效率。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!