指数拟合的算法

2024-05-18 02:24

1. 指数拟合的算法

y=ax^b          (1)
给定:x1,x2,.....,xn
          y1,y2,.....,yn
误差函数:Q(a,b)=Σ(i:1->n) (yi-axi^b)^2
根据:∂Q/∂a=0
          ∂Q/∂b=0
解出a、b就是(1)的拟合算法。

指数拟合的算法

2. 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')

3. 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指数函数拟合

4. 怎样用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分别为斜率和截距。
曲线直线化是曲线拟合的重要手段之一。对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按最小二乘法原理求出变换后变量的直线方程,在实际工作中常利用此直线方程绘制资料的标准工作曲线,同时根据需要可将此直线方程还原为曲线方程,实现对资料的曲线拟合。
以上内容参考:百度百科-曲线拟合

5. matlab指数函数拟合

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

matlab指数函数拟合

6. 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

7. 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');

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

matlab指数函数拟合

8. matlab中指数模型函数拟合

clc
clear
close all
x=[0,100,200,300,400,500];
y=[1,0.62,0.40,0.21,0.18,0.12];
xx=x(2:end);
yy=y(2:end);
z=log(yy)./xx;
c=polyfit(xx,z,1);
a=c(1)
b=c(2)
ny=exp(a*x.^2+b*x);
plot(x,y,'r*')
hold on
ezplot(['exp(',num2str(a),'*x.^2+',num2str(b),'*x)'],[0 500 min(y) max(y)])
xlabel('x')
ylabel('y')
legend('原始数据散点图','拟合后函数曲线图')


运行结果

a =

    1.374119463200583e-006


b =

  -0.005030534633423

最新文章
热门文章
推荐阅读