matlab中的指数曲线拟合问题,我有一个函数,他的格式是y=exp(-x/a)

来源:百度知道 编辑:UC知道 时间:2024/09/20 17:00:50
y=exp(-x/a)
我想要算出a的值.x,y是数组
plot(x,y)
y=log(y)/log(exp(1));
p=polyfit(x,y,1),
但是算出来是两个数.因为polyfit是按y=ax+b的形式算得.
不知哪位高人能指导我一下.
对不起,我可能没有描述清楚.其实是我有x,y两个数组,分别化为x,y轴,画出的点大概就是指数分布,应该大概符合y=exp(-x/a)的表达式,我就想求出a而已.大家回答的已经先给了a的值,和我的目的不同吧.希望大家继续帮助我

a=0.3145;
x=-0.3:0.01:3;
y=exp(-x/a);
plot(x,y)

ly=log(y);
p=polyfit(x,ly,1)
%拟合出来的p(1)是斜率,p(2)是截距
%理论上p(2)应当等于0
%这里的斜率与你的a有a=-1/p(1)
apoly=-1/p(1)
========================================================
我们是没有数据的情况下,才生成数据让你看一下,怎么操作啊。
你如果有数据的话,你将前三行,改成你的数据。
比如你的数据
x=[1,2,3,4,5,6,7];
y=[7,6,5,4,3,2,1];
这样子。

楼上的分析很好,不过他先入为主了.就是说先给定了a值,然后来按拟合,确实是截距为0的,但实际数据却不是这么好.就按他给的例子,我分析并写了下面的代码,你运行一下就有更深的体会:
a=0.3145;
x=-0.3:0.01:3;
y=exp(-x/a);
plot(x,y)
ly=log(y);
lx=x+rand(size(x))/100;%注意这一步,是为了让你的x量发生生变化!
aa=-lx/ly;%这个就是你要求的aa,看可以发现它与a很接近!
hold on
plot(lx,exp(-lx/aa),'r');%画出图对比可以发现很接近!
norm(y-exp(-lx/aa));%这个是计算误差,可以发现它很小!
总之,aa=-x/log(y);x和y都是你的实际数据.
=========================================
是你没有理解我们的意思了.
楼上说得好,补充得好!
你只要运行:
aa=-x/log(y);
就得到你要的a了.
我估计你没有看懂我的回答.