lsqcurvefit和nlinfit函数_精品文档.doc

上传人:b****2 文档编号:953918 上传时间:2022-10-14 格式:DOC 页数:2 大小:25KB
下载 相关 举报
lsqcurvefit和nlinfit函数_精品文档.doc_第1页
第1页 / 共2页
lsqcurvefit和nlinfit函数_精品文档.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

lsqcurvefit和nlinfit函数_精品文档.doc

《lsqcurvefit和nlinfit函数_精品文档.doc》由会员分享,可在线阅读,更多相关《lsqcurvefit和nlinfit函数_精品文档.doc(2页珍藏版)》请在冰豆网上搜索。

lsqcurvefit和nlinfit函数_精品文档.doc

问题:

有些时候我们需要拟合一些非线性的表达式。

比如:

我们知道一个表达式的式子是y=A*sin(x).*exp(x)-B./log(x),现在我们手里面有x与y对应的一大把数据。

我们如何根据x,y的值找出最佳的A、B值。

则我们现在借助Matlab的函数lsqcurvefit、nlinfit,当然你也可以使用lsqnonlin.其具体用法请自己用Matlab的帮助命令进行查看。

这里仅简单介绍一下常用的方式。

格式:

lsqcurvefit(f,a,x,y)、nlinfit(x,y,f,a)

f:

符号函数句柄,如果是以m文件的形式调用的时候,别忘记加@.这里需要注意,f函数的返回值是和y匹对的,即拟合参数的标准是(f-y)^2取最小值,具体看下面的例子

a:

最开始预估的值(预拟合的未知参数的估计值)。

如上面的问题如果我们预估A为1,B为2,则a=[1 2]

x:

我们已经获知的x的值

y:

我们已经获知的x对应的y的值

例子1:

问题:

对于函数y=a*sin(x)*exp(x)-b/log(x)我们现在已经有多组(x,y)的数据,我们要求最佳的a,b值

%针对上面的问题,我们可以来演示下如何使用这个函数以及看下其效果

>> x=2:

10;

>> y=8*sin(x).*exp(x)-12./log(x);

%上面假如是我们事先获得的值

>> a=[1 2];

>> f=@(a,x)a

(1)*sin(x).*exp(x)-a

(2)./log(x);

%第一种方法使用lsqcurvefit

>> lsqcurvefit(f,a,x,y)

ans =

   7.999999999999987  11.999999999988997%和我们预期的值8和12结合得非常好

>>

%第二种方法使用nlinfit

>> nlinfit(x,y,f,a)

ans =

   8.000000000000000  11.999999999999998

>>

%**********************************

%另一种方法,假如我们写了一个如下的m文件

function f=test(a,x)

f=a

(1)*sin(x).*exp(x)-a

(2)./log(x);

end

%则在上面lsqcurvefit函数调用如下,不要忘记那个@

lsqcurvefit(@test,a,x,y)

例子2:

(多元的情况,注意看格式)

问题:

我们已知z=a*(exp(y)+1)-sin(x)*b且有多组(x,y,z)的值,现在求最佳系数a,b

>> x=2:

10;

>> y=10*sin(x)./log(x);

>> z=4.5*(exp(y)+1)-sin(x)*13.8;

>> f=@(a,x)a

(1)*(exp(x(2,:

))+1)-sin(x(1,:

))*a

(2);

%第一种方法使用lsqcurvefit

>> lsqcurvefit(f,[1 2],[x;y],z)%注意这里面的[x;y],这里的[1 2]表示我们设置f函数里的初始值a

(1)=1,,a

(2)=2

ans =

   4.499999999999999  13.800000000000024

%第二种方法使用nlinfit

>> nlinfit([x;y],z,f,[1 2])

ans =

   4.500000000000000  13.799999999999956

>>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1