用matlab求解一些简单问题!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用matlab求解一些简单问题!相关的知识,希望对你有一定的参考价值。
用matlab求解下面问题,请帮忙写出用matlab求解过程的代码
问题:
身高体重数值对应下表:
身高x(cm)60 70 80 90 100 110
体重y(kg) 6.13 7.90 9.99 12.15 15.02 17.50
身高x(cm)120 130 140 150 160 170
体重y(kg) 20.92 26.86 31.11 38.85 47.25 55.05
当y=b*e^(a*x)时,用matlab编写代码求出a,b的值,要的就是那段代码。
clc;clear
x=60:10:170;
y=[6.13 7.90 9.99 12.15 15.02 17.50 20.92 26.86 31.11 38.85 47.25 55.05];
fun=@(A,x) A(2)*exp(A(1)*x)
A0=[0.005 1];
A=nlinfit(x,y,fun,A0);
a=A(1),b=A(2)
xx=60:180;
yy=fun(A,xx);
plot(x,y,'o',xx,yy)
xlabel('height'),ylabel('weight')
结果:
a =
0.0192
b =
2.1611 参考技术A
您好:
可以把你的公式y=b*e^(a*x)指数函数进行转换变成线性函数 ln(y)=ax+ln(b)。这是一个一元一次函数,可用matlab将其拟合成直线。
程序段如下:
x=60:10:170;%身高
y=[6.13 7.90 9.99 12.15 15.02 17.50 20.92 26.86 31.11 38.85 47.25 55.05];%体重
y=log(y);%转换成线性的,matlab中ln用log()命令表示
aa=polyfit(x,y,1);%1次多项式拟合
a1=aa(1);%1次项前面的系数
a2=aa(2);%常数项
y1=polyval(aa,x);%用拟合得到的系数a1,a2计算y=a1x+a2
a=a1;%得到a
b=exp(a2);%得到b,b=e^a2
plot(x,y,'k+',x,y1,'r'),grid
xlabel('身高(cm)'),ylabel('体重(kg)')
得到a=0.0197 ,b= 2.0040 及图1
参考技术B 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 f=fun(x,tdata)
f=x(1)*exp(-0.02*x(2)*tdata)
保存一下
2.调用
clc
tdata=60:10:170;
cdata=[6.13 7.9 9.99 12.15 15.02 17.05 20.92 26.86 31.11 38.85 47.25 55.05];
x0=[60,6.13];%迭代初始值
x=lsqcurvefit('fun',x0,tdata,cdata)
f=fun(x,tdata)
x
a=(-0.02*x(2))
b=x(1)
好了 运行结果是 a=0.0192 b=2.1396
对于不同的拟合方法一般拟合出的结果都不同的,但相差不太多。 参考技术C 你不问过类似的问题吗,两边去对数就可以了。转换成以前的问题。
注明一下,我上次的那种解法虽然有人说不对,但是对的。
那种就是求类似a1*X1+a2*X2+……+an*Xn=Y的方法,已知X1~Xn和Y求ai
以上是关于用matlab求解一些简单问题!的主要内容,如果未能解决你的问题,请参考以下文章