maplev12 发表于 2011-4-16 23:22:42

如何进行微分方程组数值解的拟合?

本帖最后由 maplev12 于 2011-4-16 23:25 编辑

已知关于t,x(t),p(t)的微分方程组eq1,eq2,以及一组数据t1,x1,p1,求参数A,B,p0,a,拟合已知的这组数据,使数值解的残差最小。方程组及数据如下:
eq1 := diff(x(t), t) = 2*A*(sinh(p(t)+q*x(t))-x(t)*cosh(p(t)+q*x(t))):
eq2 := diff(p(t), t) = -2*B*(p0*sinh(a*x(t))+p(t)*cosh(a*x(t))):
t1:=:
x1:=:
p1:=:

maplelab 发表于 2011-4-17 08:19:14

还有一个q.

maplev12 发表于 2011-4-17 10:16:14

对……q~那得如何去做啊~~也解不出解析解啊~~

maplelab 发表于 2011-4-17 10:34:55

q也做参数吗?
像A,B,p0,a一样吗?

maplev12 发表于 2011-4-17 14:06:42

对呀……A,B,p0,a,q这么五个参数~~

shamohu 发表于 2011-4-17 20:22:12

用1stOpt到可以很方便求解这类微分方程拟合问题,只是这道题结果不好,不知是模型公式的问题还是数据的问题。

maplev12 发表于 2011-4-17 21:53:52

是数据不太好…话说难道Maple开发者如此懒惰,这样的问题都不写好函数包…DETools也成摆设了吗~
如果 麻婆 实在不好解的话~楼上能帮我把1stOpt的解决代码贴出来吗…我对这个神器没接触过~

shamohu 发表于 2011-4-18 08:39:32

本帖最后由 shamohu 于 2011-4-18 08:41 编辑

1stOpt求解代码(注意1stOpt不区分大小写,因此a变成了a1):
Variable t,x,p;
ODEFunction x' = 2*A*(sinh(p+q*x)-x*cosh(p+q*x));
            p' = -2*B*(p0*sinh(a1*x)+p*cosh(a1*x));
Data;
t=;
x=;
p=;
结果:
均方差(RMSE) 0.0337939616362601
残差平方和(SSE) 0.0662378468982349
相关系数(R) 0.991413214890611
决定系数(DC) 0.982388463456317

a -0.198549475971414
q 0.598621875594106
b 0.0231141231043744
p0 0.124394097698298
a1 -7.53318015151156

p的拟合结果很差。

maplev12 发表于 2011-4-18 12:03:24

太感谢了…我再重新整理数据试试~效果别差劲的太过分就行~
页: [1]
查看完整版本: 如何进行微分方程组数值解的拟合?