matlab r(m) 2 2.5 3 3.5 4(元)C 65 170 350 660 1000知

发布时间:2021-02-26 09:33:51

matlab r(m) 2 2.5 3 3.5 4(元)C 65 170 350 660 1000知道 c=a*r的b次方 求a b 的值

网友回答

r=[2,2.5,3,3.5,4];
c=[65,170,350,660,1000];
fun_andy002=inline('ab(1)*r.^ab(2)','ab','r');
[A,res]=lsqcurvefit(fun_andy002,[65,1],r,c)
cfit1=fun_andy002(A,r);
plot(r,c,'r*',r,cfit1)
%法二r=[2,2.5,3,3.5,4];
c=[65,170,350,660,1000];
K=[ones(size(r')),log(r')];
y=log(c');
ab=K\y;
a=exp(ab(1))
b=ab(2)
cfit2=a*r.^b;
plot(r,c,'r*',r,cfit2)
%%%%%%%%%
两个结果并不是完全相同的.
但个人觉得法二更好.
法二是有技巧的.两边取对数,变成
log(c)=log(a)+b*log(r)
对于log(c)与log(r)来说,它们是直线关系
你把那几个点都代进去,写成矩阵的形式.就是K*ab=y
求这个矩阵就OK了.
======以下答案可供参考======
供参考答案1:
f(x) = a*x^b
a = 6.609 (1.634, 11.58)
b = 3.631 (3.062, 4.201)
供参考答案2:
matlab 非线性的拟合有两个命令lsqcurvefit和lsqnonlin。这里用lsqcurvefit(lsqnonlin一样做),先介绍下lsqcurvefit(原理是最小二乘法)
已知数据点:xdata=(xdata1,xdata2,…,xdatan)
ydata=(ydata1,ydata2,…,ydatan)
lsqcurvefit用以求含参量x(向量)的向量值函数
F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T
中的参变量x(向量),使得1/2*∑[a+b*exp(-0.02*k*t(i))-c(i)]^2最小
1.先定义个函数fun
function c=fun(x,r)
c=x(1)*r.^x(2);
保存一下2调用解题clcx0=[0.05 0.05];
r=[2 2.5 3 3.5 4];
c=[65 170 350 660 1000];
x=lsqcurvefit('fun',x0,r,c);a=x(1)b=x(2)结果是a =6.6092 b =3.6315拟合的方法不同结果有细小的差别,但相差不会很大题设是非线性的,这种方法还是不错的
以上问题属网友观点,不代表本站立场,仅供参考!