使用C语言解常微分方程 C ODE.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SYSU-IFCEN 2013-2014 实验报告 Projet professionnel Vincent. Wang [PAGE 22] équipe de Neutrons Dosimétrie 解常微分方程 姓名:Vincent 年级:2010,学号:1033****,组号:5(小组),4(大组) 数值方法: 我们的实验目标是解常微分方程,其中包括几类问题。一阶常微分初值问题,高阶常微分初值问题,常微分方程组初值问题,二阶常微分方程边值问题,二阶线性常微分方程边值问题。 对待上面的几类问题,我们分别使用不同的方法。 初值问题 使用 龙格-库塔 来处理 边值问题 用打靶法来处理 线性边值问题 有限差分法 初值问题 我们分别使用 二阶 龙格-库塔 方法 4阶 龙格-库塔 方法 来处理一阶常微分方程。 理论如下: 对于这样一个方程 当h很小时,我们用泰勒展开, 当我们选择正确的参数 a[i][j],b[i][j]之后,就可以近似认为这就是泰勒展开。 对于二阶,我们有: 其中 经过前人的计算机经验,我们有, 选择 A=1/2,B=1/2,则 P=1,Q=1,于是又如下形式,这也使休恩方法的表达式。 所以我们称其为 龙格(库塔)休恩方法 对于4阶龙格方法,我们有类似的想法, 我们使用前人经验的出的系数,有如下公式 对于高阶微分方程及微分方程组 我们用 4阶龙格-库塔方法来解 对于一个如下的微分方程组 我们可以认为是一个一阶向量微分方程,所以可以用龙格-库塔方法的向量形式解。 对于一个高阶的微分方程,形式如下: 我们可以构建出一个一阶的微分方程组, 令 则有 所以我们实际只要解一个微分方程组 其中初值为 使用4阶龙格-库塔方法, 使用这个向量形式的龙格-库塔方法我们便可就出方程的数值解。 边值问题 对于边值问题,我们分为两类 一般的边值问题 线性边值微分方程 一般的边值问题,我们是使用打靶法来求解, 对于这样一个方程 主要思路是,化成初值问题来求解。 我们已有 这样我们便可求出方程的解。 线性微分方程边值问题 对于这样的问题,我们可以使用一个更加高效的方法,有限差分法。 对于如下方程 我们对其进行差分 这样的话,我们的微分方程可以写成, 于是我们得到了个线性方程组 这样的话我们求解出x 对于上面的矩阵,我们可以分解出两个三角阵,然后回代求解便可。 我们用回代法可以直接求解 至此,我们便求出了目标方程的解 流程图 二阶龙格-库塔 对于i = 0到M-1; y[i+1] = y[i] + h / 2 * (fun(t, y[i]) + fun(t + h, y[i] + h*fun(t, y[i]))); return y; 4阶龙格-库塔 对于i = 0到M-1; y[i + 1] = y[i] + h / 6 * (fun(t, y[i]) + 2 * fun(t + h / 2, y[i] + h / 2 * fun(t, y[i])) + 2 * fun(t + h / 2, y[i] + h / 2 * fun(t + h / 2, y[i] + h / 2 * fun(t, y[i]))) +fun(t + h, y[i]+h*fun(t + h / 2, y[i] + h / 2 * fun(t + h / 2, y[i] + h / 2 *fun(t, y[i]))))); return y; 4阶龙格-库塔解方程组 对于k= 0到M-1; 对于i= 0到N; fun(t, y[k], dy[0]) 对于i= 0到N; tempdy[j] = y[k][j] + h / 2 * dy[0][j]; fun(t + h / 2, tempdy, dy[1]); 对于i= 0到N; tempdy[j] = y[k][j] + h / 2 * dy[1][j]; fun(t + h / 2, tempdy, dy[2]); 对于i= 0到N; tempdy[j] = y[k][j] + h * dy[2][j]; fun(t + h, tempdy, dy[3]); y[k+1][i] = y[k][i] + h / 6 * (dy[0][i] + 2 * dy[1][i] + 2 * dy[2][i] + dy[3][i]); return y; 打靶法 当errepsilon y = RKSystem4th( fun, 2, t0, u, tn, M); f0 = y[M-1][0] - b; u[1] = y[0][1]; y = RKSystem4th( fun, 2, t0, v,

文档评论(0)

tangdequan1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档