matlab非线性拟合函数lsqcurvefit、nlinfit
2017-05-22 by:CAE仿真在线 来源:互联网
问题:有些时候我们需要拟合一些非线性的表达式。
比如:我们知道一个表达式的式子是y=A*sin(x).*exp(x)-B./log(x),现在我们手里面有x与y对应的一大把数据。我们如何根据x,y的值找出最佳的A、B值。则我们现在借助Matlab的函数lsqcurvefit、nlinfit,当然也可以使用lsqnonlin。
格式: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的值
例子:
问题:对于函数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文件
functionf=test(a,x)
f=a(1)*sin(x).*exp(x)-a(2)./log(x);
end
%则在上面lsqcurvefit函数调用如下,不要忘记那个@
lsqcurvefit(@test,a,x,y)
转自http://blog.sina.com.cn/u/bca90a130102x4lo
相关标签搜索:matlab非线性拟合函数lsqcurvefit、nlinfit MatLab培训 MatLab培训课程 MatLab在线视频教程 MatLab技术学习教程 MatLab软件教程 MatLab资料下载 MatLab代做 MatLab基础知识 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训 Abaqus培训