用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求解一些简单问题!的主要内容,如果未能解决你的问题,请参考以下文章

Adaline神经网络简单介绍和MATLAB简单实现

lingo能解决的问题,matlab能解决 吗?那个更好。

MATLAB求解器

MATLAB求解器

整数规划该如何用MATLAB求解?

为啥 MATLAB 在使用 ode 求解器时会更改矩阵维度?