请问在matlab中,曲线的指数形式拟合怎么实现?
在很多的matlab书籍中都只提到了曲线的线性拟合和多项式拟合,但对指数拟合很少有提到,可现在我需要用指数拟合来做一个问题,请各位大虾指教下指数形式的拟合该怎么实现,谢谢先~~~ 取对数,然后用多项式拟合回复 #1 skyboyliu 的帖子
谢谢哈但是具体是怎么做的呢?
能不能给详细指点下啊? 参考帖子http://forum.vibunion.com/forum/viewthread.php?tid=8607
回复 #3 skyboyliu 的帖子
我去看了那帖子,上面也是这样说的,但是最后也没有具体解决怎么做的问题校长能不能给个具体的例子啊?
比如我要拟合的式子的形式是
y=a*exp(d1*x)+b*exp(d1*x)+c*exp(d3*x)
数据为
x=;
y=;
该怎么做呢?
[ 本帖最后由 skyboyliu 于 2006-8-29 09:57 编辑 ] 连x和y都不同维你就敢拿上来作例子问问题...
function ExpFitSolve
clc
x=;
y=;
str=['a(1)*exp(a(2)*x)+a(3)*exp(a(4)*x)+a(5)*exp(a(6)*x)'];
ff=inline(str,'a','x');
a0 =[-300,-5,200,-1,-40,0]; % Starting guess
= lsqcurvefit(ff,a0,x,y)
str1=[num2str(a(1)),'*exp(',num2str(a(2)),'*x)+',num2str(a(3)),'*exp(',num2str(a(4)),'*x)+',...
num2str(a(5)),'*exp(',num2str(a(6)),'*x)'];
ff1=inline(str1,'x');
xx=linspace(0.1,1);
plot(xx,ff1(xx),x,y,'r*')
运行结果:
Optimization terminated: relative function value
changing by less than OPTIONS.TolFun.
a =
-215.6447 -0.9299217.4042 -0.1350-21.9148 -0.9272
resnorm =
33.1770
假如不知道各个拟合参数的具体意义的话,这种问题用1stopt最方便,用MATLAB猜测初值都累死了!
Title "Type your title here";
Parameters p(1:6);
//Variable ;
Function y=p1*exp(p2*x)+p3*exp(p4*x)+p5*exp(p6*x);
data;
//x y
0 0
.110
.230
.345
.453
.564
.674
.782
.890
.996
1.0 103
运行结果:
p1 -204.397990804389
p2 -0.940369929518947
p3 225.924142434237
p4 -0.105081317615115
p5 -23.3984698872791
p6 -0.105081295787684
[ 本帖最后由 bainhome 于 2006-8-29 01:29 编辑 ]
回复 #5 skyboyliu 的帖子
谢谢大牛啊~~`当时在输入y时少输了一个~~`
由于是对lstopt不了解就用了matlab做了,
而且有很多东西用matlab做很方便,就没有去学lstopt了~~
非常感谢分享,我去试试
回复 #5 skyboyliu 的帖子
再请教下在 = lsqcurvefit(ff,a0,x,y)的左边,resnorm有什么作用?
我在程序中好象没看到在哪有利用它啊~~
在我删了它后运行,也能得到结果,这是怎么回事呢?
谢谢!! 原帖由 skyboyliu 于 2006-8-29 12:31 发表
再请教下
在 = lsqcurvefit(ff,a0,x,y)的左边,resnorm有什么作用?
我在程序中好象没看到在哪有利用它啊~~
在我删了它后运行,也能得到结果,这是怎么回事呢?
谢谢!!
帮助里有说明:the value of the squared 2-norm of the residual at x: sum{(fun(x,xdata)-ydata).^2}
可以返回也可以不返回,所以去掉也可以正常运行
页:
[1]