MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   非线性曲线拟合并求系数的问题 (https://www.labfans.com/bbs/showthread.php?t=6231)

chm818 2009-01-12 17:05

非线性曲线拟合并求系数的问题
 
函数为:y=0.1+(a-0.1).*(1-erf(x./(2.*sqrt(b.*7776000))));
erf(x)为误差函数,要求x必须为实数,
x=[0.25,0.75,1.25,1.75,2.25,2.75,3.5,4.5,5.5,7,8,10,12,14,16]
y=[2.409099672,1.565396114,0.940174982,0.605753968,0.658565222,0.622579467,...
0.253082852,0.276049767,0.221442495,0.157116236,0.102593353,0.069936958,...
0.065624737,0.075597258,0.062826299];
现在要用最小二乘法求解a和b的值来,我用cftool做的时候,用上面的函数表达式,提示input必须为实数,拟合无法进行,erf里面应该是实数啊,不知道为什么?后来我在erf()外面加了一个abs(),可以拟合了,但是拟合的结果不合适,b应该是正数,却得到了负数的结果来,搞不定,请前辈指点,在线急等回复。
再就是cftool实现的拟合好像不是最小二乘法吧?!

slgu 2009-01-12 21:35

回复: 非线性曲线拟合并求系数的问题
 
y=0.1+(b(1)-0.1)*(1-erf(b(2)*x));
b=[2.5503709, 0.44392804]

chm818 2009-01-12 21:48

回复: 非线性曲线拟合并求系数的问题
 
多谢回复,您的y表达式跟我的不一样噢!这样得到结果就会不同!

slgu 2009-01-13 09:33

回复: 非线性曲线拟合并求系数的问题
 
solve('1/(2*sqrt(b*7776000))-.44392804')
ans =
0.0000001631393028
不就一样了吗?!

chm818 2009-01-13 16:37

回复: 非线性曲线拟合并求系数的问题
 
多谢,的确是因为b值接近于零缘故,我后来将sqrt(b.*7776000)=c,函数就变成
y=0.1+(a-0.1).*(1-erf(x/(2*c))),果然没有出现上面的问题,拟合出了a和c,利用sqrt(b.*7776000)=c再求出了b,这样应该没有什么问题吧。但是b值数量级应当在e-12左右,计算结果在e-7,不知是试验数据有问题还是计算方法有误!

谢谢各位指教!

提前预祝大家新春快乐,新年有气象!

wrshl 2009-05-30 11:32

回复: 非线性曲线拟合并求系数的问题
 
可以看下这个,LabVIEW编的非线性曲线拟合软件,不需要初始值就可以进行拟合求出函数的系数值。

[url]http://www.pudn.com/downloads168/sourcecode/math/detail775986.html[/url]


所有时间均为北京时间。现在的时间是 11:19

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.