公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
3.4k 浏览

我再MMA网站上下载的四阶Runge-Kutta算法程序如下

RKStep[f_, y_, y0_, dt_] :=
	Module[{ k1, k2, k3, k4 },
		k1 = dt N[ f /. Thread[y -> y0] ];
		k2 = dt N[ f /. Thread[y -> y0 + k1/2] ];
		k3 = dt N[ f /. Thread[y -> y0 + k2/2] ];
		k4 = dt N[ f /. Thread[y -> y0 + k3] ];
		y0 + (k1 + 2 k2 + 2 k3 + k4)/6
	]

但是,我在书中看到的介绍是这样的

问题:程序中计算k2,k3,k4时,利用规则替换时没有考虑到dt(或者h),这与书中(上图)介绍不一致,为什么会这样?

分类:程序包 | 用户: keanhy (361 分)

1个回答

0 投票

是一样的……你仔细看系数的位置……

__________

这里有一个更加一般化且高性能的龙格库塔法实现,有兴趣的童鞋不妨看看。不过事先说好,这个实现大量使用了Mathematica高级编程技巧,所以并不适合抄去当作业,但是若能完全搞懂,你的Mathematica编程水准将会大幅提升。

用户: xzczd (2.2k 分)
修改于 用户:xzczd
比如,计算K2的时候,按照书中的介绍K2=f(xn+h/2, yn+K1*h/2)
而程序中利用替换规则应有f(xn+K1*h/2,  yn+K1*h/2),函数中两个变量都会含有K1项,我是这样理解的,不知道哪里有问题
……我知道你误解哪里了。这个程序是针对等步长情况的,也就是说RKStep里其实根本没有x坐标(也没有必要)。
我贴出来的也是等步长的,程序中的y和y0不都看成向量或者列表吗?
我的意思是,当只考虑等步长的情况时,我们根本不需要在程序里给x留位子。你若是还不理解,不妨实际编写一下。
...