matlab 拟合求救

来源:百度知道 编辑:UC知道 时间:2024/05/29 15:36:24
Y=a*exp(-b*X)
X,Y已知为一个90*1的矩阵,要得到a和b
听人说用拟合,可是我不会,特来请教.

一般非线性拟合用nlinfit或lsqcurvefit,下面是例子

%随机生成的X和Y,a和b取为-5和0.5
X=10*(rand(90,1)-.5);
f=@(x)-5*exp(-.5*x)%a=-5;b=.5;
Y=f(X)+rand(90,1)-.5;
plot(X,Y,'ro');hold on;
ezplot(f,[-5,5])
title([-5;.5])

%方法一,使用nlinfit
figure
f=@(p,x)p(1)*exp(-p(2)*x);
p=nlinfit(X,Y,f,[1,1])%p就是拟合后得到的a和b

plot(X,Y,'ro');hold on;
ezplot(@(x)f(p,x),[-5,5])
title(p)

%方法二,使用lsqcurvefit
figure;
f=@(p,x)p(1)*exp(-p(2)*x);
p=lsqcurvefit(f,[1,1],X,Y)%p就是拟合后得到的a和b

plot(X,Y,'ro');hold on;
ezplot(@(x)f(p,x),[-5,5])
title(p)

的确是用拟合
由于不知道你的初始数据,没办法帮你编程了
这是我以前做的一个题
与你的很相似的
http://zhidao.baidu.com/question/103833658.html
参考一下吧,或者把初数据贴出来,帮你编。。。。

两边取对数 Y=a*exp(-b*X) => ln(Y)=ln(a)-b*x
然后 最小二乘法 拟合 A*X=B
X=[ones(n,1);x];
B=ln