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

来源:百度知道 编辑:UC知道 时间:2024/06/06 02:44:13
解微分方程 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))
关于匿名函数@的用法请参看http://zhidao.baidu.com/question/63018805.html
因为前面已经解出了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=fminse