找回密码
 注册
Simdroid-非首页
查看: 445|回复: 8

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

[复制链接]
发表于 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,拟合已知的这组数据,使数值解的残差最小。方程组及数据如下:
  1. eq1 := diff(x(t), t) = 2*A*(sinh(p(t)+q*x(t))-x(t)*cosh(p(t)+q*x(t))):
  2. eq2 := diff(p(t), t) = -2*B*(p0*sinh(a*x(t))+p(t)*cosh(a*x(t))):
  3. t1:=[1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009]:
  4. x1:=[0.196462844,0.23113261,0.239836251,0.254280917,0.282074055,0.303702732,0.314438263,0.316017811,0.259551387,0.241967162,0.256846413,0.300113175,0.369964846,0.353602032,0.329298272,0.321924659,0.315817924,0.33655726,0.332913476,0.331782975,0.339368402,0.361496949,0.409111121,0.440819131,0.480019876,0.508510525,0.516623829,0.550329299,0.659601287]:
  5. p1:=[0.052431095,0.090568707,0.108529793,0.151760212,0.134661926,0.088463767,0.115832638,0.112805837,0.040632032,0.038390249,0.091789367,0.142407064,0.139643147,0.130806818,0.109249803,0.100085234,0.092970338,0.078333469,0.076198357,0.084312795,0.083003176,0.09082068,0.100253788,0.100850399,0.113100352,0.126765342,0.14162395,0.096346682,0.091130745]:
复制代码
发表于 2011-4-17 08:19:14 | 显示全部楼层 来自 湖北武汉
Simdroid开发平台
还有一个q.
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-17 10:16:14 | 显示全部楼层 来自 山东潍坊
对……q~那得如何去做啊~~也解不出解析解啊~~
回复 不支持

使用道具 举报

发表于 2011-4-17 10:34:55 | 显示全部楼层 来自 湖北武汉
q也做参数吗?
像A,B,p0,a一样吗?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-17 14:06:42 | 显示全部楼层 来自 山东潍坊
对呀……A,B,p0,a,q这么五个参数~~
回复 不支持

使用道具 举报

发表于 2011-4-17 20:22:12 | 显示全部楼层 来自 北京
用1stOpt到可以很方便求解这类微分方程拟合问题,只是这道题结果不好,不知是模型公式的问题还是数据的问题。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-17 21:53:52 | 显示全部楼层 来自 陕西咸阳
是数据不太好…话说难道Maple开发者如此懒惰,这样的问题都不写好函数包…DETools也成摆设了吗~
如果 麻婆 实在不好解的话~楼上能帮我把1stOpt的解决代码贴出来吗…我对这个神器没接触过~
回复 不支持

使用道具 举报

发表于 2011-4-18 08:39:32 | 显示全部楼层 来自 北京海淀
本帖最后由 shamohu 于 2011-4-18 08:41 编辑

1stOpt求解代码(注意1stOpt不区分大小写,因此a变成了a1):

  1. Variable t,x,p;
  2. ODEFunction x' = 2*A*(sinh(p+q*x)-x*cosh(p+q*x));
  3.             p' = -2*B*(p0*sinh(a1*x)+p*cosh(a1*x));
  4. Data;
  5. t=[1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009];
  6. x=[0.196462844,0.23113261,0.239836251,0.254280917,0.282074055,0.303702732,0.314438263,0.316017811,0.259551387,0.241967162,0.256846413,0.300113175,0.369964846,0.353602032,0.329298272,0.321924659,0.315817924,0.33655726,0.332913476,0.331782975,0.339368402,0.361496949,0.409111121,0.440819131,0.480019876,0.508510525,0.516623829,0.550329299,0.659601287];
  7. p=[0.052431095,0.090568707,0.108529793,0.151760212,0.134661926,0.088463767,0.115832638,0.112805837,0.040632032,0.038390249,0.091789367,0.142407064,0.139643147,0.130806818,0.109249803,0.100085234,0.092970338,0.078333469,0.076198357,0.084312795,0.083003176,0.09082068,0.100253788,0.100850399,0.113100352,0.126765342,0.14162395,0.096346682,0.091130745];
复制代码
结果:
均方差(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的拟合结果很差。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-18 12:03:24 | 显示全部楼层 来自 陕西咸阳
太感谢了…我再重新整理数据试试~效果别差劲的太过分就行~
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2026-1-8 00:35 , Processed in 0.035723 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表