如果你:
1. 看到某某人/某某书/某某文章用了龙格库塔法,所以决定也要用龙格库塔法;
2. 试图用NDSolve解某问题却失败了,所以决定还是用龙格库塔法;
3. 压根不知道NDSolve是什么,以为求解微分方程 = 编个龙格库塔法;
4. 觉得龙格库塔就是好,就是好,就是好!
那么,请记住,经典龙格库塔法(classical Runge-Kutta,RK4,文献里提到了“龙格库塔法”“四阶龙格库塔法”却没具体说明算法细节时一般也都是指它)很大程度上只是一个教学方法,它的性能(不论是速度还是精度)都是无法与NDSolve的默认方法相比的。如果只是需要解微分方程/微分方程组的初值问题,请直接使用NDSolve。NDSolve解不了的问题,你也别指望经典龙格库塔会起效。(过往十年我没见过哪怕一个疑难问题是靠切换成经典龙格库塔解决的。)
当然,在某些特殊情况下经典龙格库塔还是有“市场”的,比如有时我们需要精确重现某些文献的结果(指连数值误差之类的都准确重现),又比如有时我们可能会需要保证自己的结果也能被别人简单地重现。这种时候我们依旧可以使用NDSolve,因为NDSolve是可以通过设置具体选项来调用经典龙格库塔法的,具体可以参看自带帮助中的教程《NDSolve 的 "ExplicitRungeKutta" 方法》(tutorial/NDSolveExplicitRungeKutta),另可参考stackexchange帖子《Solving a system of ODEs with the Runge-Kutta method》:
mathematica.stackexchange.com/a/23583/1871
啥?“我要写龙格库塔法没啥高大上的理由纯粹是为了交作业哦对了我们老师还要求我们用For循环”?…………
1. 看到某某人/某某书/某某文章用了龙格库塔法,所以决定也要用龙格库塔法;
2. 试图用NDSolve解某问题却失败了,所以决定还是用龙格库塔法;
3. 压根不知道NDSolve是什么,以为求解微分方程 = 编个龙格库塔法;
4. 觉得龙格库塔就是好,就是好,就是好!
那么,请记住,经典龙格库塔法(classical Runge-Kutta,RK4,文献里提到了“龙格库塔法”“四阶龙格库塔法”却没具体说明算法细节时一般也都是指它)很大程度上只是一个教学方法,它的性能(不论是速度还是精度)都是无法与NDSolve的默认方法相比的。如果只是需要解微分方程/微分方程组的初值问题,请直接使用NDSolve。NDSolve解不了的问题,你也别指望经典龙格库塔会起效。(过往十年我没见过哪怕一个疑难问题是靠切换成经典龙格库塔解决的。)
当然,在某些特殊情况下经典龙格库塔还是有“市场”的,比如有时我们需要精确重现某些文献的结果(指连数值误差之类的都准确重现),又比如有时我们可能会需要保证自己的结果也能被别人简单地重现。这种时候我们依旧可以使用NDSolve,因为NDSolve是可以通过设置具体选项来调用经典龙格库塔法的,具体可以参看自带帮助中的教程《NDSolve 的 "ExplicitRungeKutta" 方法》(tutorial/NDSolveExplicitRungeKutta),另可参考stackexchange帖子《Solving a system of ODEs with the Runge-Kutta method》:
mathematica.stackexchange.com/a/23583/1871
啥?“我要写龙格库塔法没啥高大上的理由纯粹是为了交作业哦对了我们老师还要求我们用For循环”?…………