matlab r(m) 2 2.5 3 3.5 4(元)C 65 170 350 660 1000知道 c=a*r的b次方 求a b 的值
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 00:35:01
matlab r(m) 2 2.5 3 3.5 4(元)C 65 170 350 660 1000知道 c=a*r的b次方 求a b 的值
matlab
r(m) 2 2.5 3 3.5 4
(元)
C 65 170 350 660 1000
知道 c=a*r的b次方 求a b 的值
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了.
f(x) = a*x^b
a = 6.609 (1.634, 11.58)
b = 3.631 (3.062, 4.201)
matlab 非线性的拟合有两个命令lsqcurvefit和lsqnonlin。这里用lsqcurvefit(lsqnonlin一样做),先介绍下lsqcurvefit(原理是最小二乘法)
已知数据点:xdata=(xdata1,xdata2,…,xdatan)
ydata=(ydata1,ydata2,…,ydatan)
lsqcu...
全部展开
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调用解题
clc
x0=[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
拟合的方法不同结果有细小的差别,但相差不会很大
题设是非线性的,这种方法还是不错的
收起