btcq.net
当前位置:首页 >> mAtlAB拟合指数曲线 >>

mAtlAB拟合指数曲线

用matlab指数函数拟合,可以按下列例子的步骤进行:t=0:1.25:25; x=[10.85,11.31,12.30,13.44,13.63,14.19,15.18,15.61,15.90,16.98,17.38,17.78,18.66,19.19,17.78,19.21,19.14,19.74,19.96,20.06,19.91]; myfun=@(k,t)(k(1).*(1-k(2).*exp(-k(3)*t)).^(1/(1-k(4)))); beta0 =[0.92181 0.73821 0.17627 0.40571] [k,r]=nlinfit(t,x,myfun,beta0)

需要转换一下:第一步,设一个中间变量,定义为对指数函数取对数.log(e^x),原来的指数就变成多项式了.第二步,用plotfit进行多项式拟合.

在命令行输入 cftool 用指数型的直接进行拟合即可

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

需要转换一下:第一步,设一个中间变量,定义为对指数函数取对数.log(e^x),原来的指数就变成多项式了.第二步,用plotfit进行多项式拟合.

function [B,A]=testfunxx(x,y) x=x(:); y=log(y(:)); A_=[-x,ones(size(x))]; x_=(A_'*A_)^-1*(A_'*y); B=x_(1); A=exp(x_(2)); end 你给的数据有问题 得不到结果

对于自己定义的函数形式拟合,其中的参数是要设定范围的,如果按matlab中默认的-inf到+inf弄出来的结果肯定不对,根据你的具体数据,大概估计一下三个参数的范围,然后再拟合就OK了 根据你的具体数据设置方法如下:把参数a的上界设为

取对数,展开:log(y)=-x^2/c^2+2*x*b/c^2+log(a)-(b/c)^2用matlab解超定方程组的功能求解:[-x^2,2*x,1]*[1/c^2;b/c^2;log(a)-(b/c)^2]=log(y)%代码:x=[30 300 500 800 ]'y=[1750 1600 950 500 ]'A=[-x.^2,2*x,1&x]B=log(y)z=A\Bc=sqrt(1/z(1))b=z(2)/z(1)a=exp(b*z(2)+z(3))

没有现成的办法,请预处理数据后再拟合 比方说 y=a*exp(b*x) 那么预处理数据为 ln y =ln a +b*x 这样就变成线性拟合问题了啊! LZ 这个注意转化问题啊!

用cftool工具直接拟合拟合的效果很好

网站首页 | 网站地图
All rights reserved Powered by www.btcq.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com