matlab指数函数拟合

2024-05-01 20:29

1. matlab指数函数拟合

拟合 x=0.25,0.5,1,1.5,2,3,4,6,8 y=19.21,18.15,15.36,14.10,12.98,9.32,7.45,5.24,3.01
MATLAB拟合工具箱 cftool 用法及实例:1、数据准备:
我们以一组多项式数据为例,进行示例,假如多项式是y=4x^3+3x^2+2产生的数据,x取0到3之间间隔为0.3的数。

2、调用工具箱:
关于如何调用工具箱我在其他经验中有详细的介绍,有兴趣的可以查看。这里我们用命令cftool进行调用拟合工具箱,在MATLAB主窗口中输入 cftool 回车可以看到如下拟合工具箱界面

3、拟合操作步骤:
首先我们将要拟合的数据选入到工具箱中,如下图,在红圈处,点击向下三角,分别将要拟合的x y 选入,然后点击右侧的最上方的下三角,然后选择polynomial( 多项式),下面的degree是阶数,也就是x的最高次数,选择不同的degree,在图的左下角是拟合的结果,包括拟合的系数以及方差相关系数等,右侧是数据点,以拟合曲线。

matlab指数函数拟合

2. 怎样用matlab指数函数拟合

拟合函数表达式:y=a*exp(b+cx)
式中a=0.06154920769,
b=-3.18125203,
c=7.822374803
拟合度0.9725(相关系数)
用V=A(1)*exp(A(2)*I)+A(3)*exp(A(4)*I)模型比较好。
A = nlinfit(X,Y,myfun,[700 -0.01 -700 -1 ])
I=min(X):0.1:max(X);
V=A(1)*exp(A(2)*I)+A(3)*exp(A(4)*I);
plot(X,Y,'o',I,V)
结果:A =668.9571 -0.0688 -656.7991 -1.0321

意义
a>1时,Y随X增大而增大,先快后慢;0<a<1时,Y随X增大而减少,先快后慢。当以Y和lnX绘制的散点图呈直线趋势时,可考虑采用对数函数描述Y与X之间的非线性关系,式中的b和a分别为斜率和截距。
曲线直线化是曲线拟合的重要手段之一。对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按最小二乘法原理求出变换后变量的直线方程,在实际工作中常利用此直线方程绘制资料的标准工作曲线,同时根据需要可将此直线方程还原为曲线方程,实现对资料的曲线拟合。
以上内容参考:百度百科-曲线拟合

3. matlab指数拟合

指数函数:( y = exp(a + b*x))
 
>> x = [2001 2002 2003 2004 2005 2006 2007 2008 2009];
y = [21.5   15.9 11.8 8.7   6.5   4.8   3.5   2.6   2.0];
y=log(y');
d = [1 1 1 1 1 1 1 1 1]; 
a=[d;x];
b = a*y;
a=a*a';
c=ab
 
c =
   601.9448
   -0.2993
 
%所以,拟合函数为 y = exp(601.9448 - 0.2993*x)
 
%根据拟合函数求估测值
>>  x = [2010, 2011, 2012, 2013,  2014]
 exp(601.9448 - 0.2993*x)
ans =
1.4216    1.0539    0.7813    0.5792    0.4294

matlab指数拟合

4. matlab指数函数拟合

拟合函数表达式y=a*exp(b+cx)
式中a=0.06154920769, b=-3.18125203, c=7.822374803
拟合度0.9725(相关系数)

5. matlab指数函数拟合

%lny=lna+b*x^2,也就是两边取对数,化成线性形式,因变量是ln(y),自变量是x^2
x=[-2.8 -2.6 -2.4 -2.2 -2 -1.8 -1.6 -1.4 -1.2 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8];
y=[26 31 36 42 50 59 71 82 99 116 134 149 163 172 175 172 163 149 134 116 99 82 71 59 50 42 36 31 26];
y_ln=log(y)';
x2=(x.^2)';
linear_fun=fit(x2,y_ln,'poly1');
figure
plot(linear_fun,x2,y_ln);
b=exp(linear_fun.p1)
a=linear_fun.p2
ypre=a*exp(b*x.^2);
figure
plot(x,y,'*',x,y,'-o');
最后结果是
b =
    0.7804
a =
    5.0215

matlab指数函数拟合

6. matlab指数函数拟合

我觉得你选择的模型都有点问题,你可以画个散点图看看就能发现,对数函数拟合可能更好。

clc;
clear all;
x=[0.05842 0.058614 0.058807 0.059001 0.059194 0.059388 0.060356 0.061324 0.062292 0.06326 0.064228 0.065196 0.066164 0.067132 0.0681 0.069];

y=[102.001 152.578 172.593 186.007 196.29 204.706 233.329 251.828 265.735 276.96 286.405 294.577 301.787 308.244 314.092 319.077];

myfun=@(A,x)A(1)*log(A(2)*x+A(3))+A(4);

[Af,R,J]=nlinfit(x,y,myfun,[0.5,0.5,0.5,0.5]);

yf=myfun(Af,x);

plot(x,y,'*r',x,yf,'-ob');
legend('实际值','预测值');
xlabel('x');
ylabel('y');

一些数值结果我就不放出来了,你运行程序就能得到结果。

7. matlab拟合指数函数

clear all;
close all;
x=[10 12.5 15 17.5 20 22.5 25 27.5 30 32.5 35 37.5 40 42.5 45 47.5 50];
y=[62.1 77.3 92.5 104 112.9 121.9 125 129.4 134 138.2 142.3 143.2 144.6 147.2 147.8 149.1 150.9];
myfunc=inline('beta(1)+beta(2)*exp(beta(4)*x)+beta(3)*exp(-beta(4)*x)','beta','x'); 
beta=nlinfit(x,y,myfunc,[0.5 0.5 0.5 0.5]); 
a=beta(1),k1=beta(2),k2=beta(3),m=beta(4) 
xx=min(x):max(x); 
yy=a+k1*exp(m*xx)+k2*exp(-m*xx); 
plot(x,y,'o',xx,yy,'r')

matlab拟合指数函数

8. matlab 指数函数曲线拟合

你可以用 fit()函数拟合,得到系数a、b的值。
数学模型应选用y=a*exp(-bx)
其中:       a =      0.4467 ; b =       2.151;