作业帮 > 综合 > 作业

是人才来做一下,速度越快越好 用MATLAB,也可以用其它软件来解微分方程 dx /dt = ax (1 - bx )

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/13 19:11:30
是人才来做一下,速度越快越好 用MATLAB,也可以用其它软件来解微分方程 dx /dt = ax (1 - bx )
解微分方程 dx /dt = ax (1 - bx ) x(0) 不等于 x0, x0 不等于0,也不等于1 / b,且 x0>0 (注意0是x的下标,这里写不好)
其中参数a,b 需要通过拟合得到
具体数据如下:
T 是 0~9 的整数,
x0=1, x1=2.31969, x2=4.50853, x3=6.9056, x4=6.00512
x5=6.00512, x6=5.32807, x7=7.56101, x8=8.9392, x9=9.5817
拟合求出a,b的值后,再预测当T=10时,x是多少
greatdju 你太好了,好有耐心哦,这分数真是非你莫属啊,回答的太好了
真的很谢谢你greatdju.
我想问一下,你是不是每天来回答问题啊,我想,如果我有什么不知道的可以让你帮我一下,可以吗? 或者可以加你的QQ
sum((f(t,p)-x).^2)
最小二乘法啊,
比如说已经知道了一系列采样点(xi,yi),而需要拟合的函数是y=f(x)
那么∑(f(xi)-yi)^2就是函数f(x)在这些点上的总的误差啊,函数参数的选择就是要让这些点上的误差最小,那就是拟合度最高的函数了嘛.
如果你连最小二乘法都不知道,那我就没办法说了.
还有就是f=@(t,p)(1./(p(2)+exp(-p(1)*t).*p(3))); 这句话运行没有任何问题,我发给你的每句话都是经过我亲自测试的,保证不会有问题.可能是你复制的时候漏了一个括号(,要不就是你的matlab版本太低.我只能保证Matlab7以上版本运行不会有问题.
--------------------------------------------------------------------
f=@(t,p)(1./(p(2)+exp(-p(1)*t).*p(3)))是建立了一个函数
f(t,p)=1/(p(2)+e^(-p(1)*t)*p(3))
因为前面已经解出了x(t)=1/(b+exp(-a*t)*C1)是该微分方程的解
但是a、b和C1还是未知的,这里令p=[a b C1],【p(1)就是a,以此类推】
于是1/(b+exp(-a*t)*C1)就相当于一个关于t和p的函数f(t,p)=1/(p(2)+e^(-p(1)*t)*p(3))
下面的目的就是要把a b C1也就是p拟合出来
fminsearch是matlab自带的求函数最小值的命令
用法是x=fminsearch(f,x0)
x就是最小值点(不是最小值),f是函数,x0是迭代的初值.
如x=fminsearch(@(x)(x(1).^2+x(2).^2),[1 1])
就是求函数x(1)^2+x(2)^2的最小值点
在本题中,我们用最小二乘法求p,所以目标函数是@(p)(sum((f(t,p)-x).^2)
初值可以随便取,我这里取的是[1 1 1]
---------------------------------------------------------------------
先求解微分方程
x=dsolve('Dx=a*x*(1-b*x)')
得到
x =
1/(b+exp(-a*t)*C1)
-----------------------------------------------------------------
下面对a、b和C1进行拟合
f=@(t,p)(1./(p(2)+exp(-p(1)*t).*p(3)));
t=0:9;x=[1 2.31969 4.50853 6.9056 6.00512 6.00512 5.32807 7.56101 8.9392 9.5817];
parameter=fminsearch(@(p)(sum((f(t,p)-x).^2)),[1 1 1]) %最小二乘法
得到
parameter =
0.3703 0.1008 0.3369
说明x=1/(0.1008+exp(-0.3703*t)*0.3369)
--------------------------------------------------------------
最后求x(10)
x=@(t)(f(t,parameter));
x(10)
得到
ans =
9.1656
即x(10)=9.1656