Mathematica 8上的二维Runge-Kutta方法
我在Mathematica 8中编程时遇到问题,以下是我的代码:Mathematica 8上的二维Runge-Kutta方法,math,wolfram-mathematica,mathematica-8,Math,Wolfram Mathematica,Mathematica 8,我在Mathematica 8中编程时遇到问题,以下是我的代码: f[t_, y_] := {y, y}; RungeKutta3[a_, b_, Alpha_, n_, f_] := Module[{h, j, k1, k2, k3}, h = (b - a)/n; Y = T = Table[0, {100 + 1}]; Y[[1]] = Alpha; T[[1]] = a; For[j = 1, j <= n, ++j,
f[t_, y_] := {y, y};
RungeKutta3[a_, b_, Alpha_, n_, f_] :=
Module[{h, j, k1, k2, k3},
h = (b - a)/n;
Y = T = Table[0, {100 + 1}];
Y[[1]] = Alpha;
T[[1]] = a;
For[j = 1, j <= n, ++j,
k1 = f[T[[j]], Y[[j]]];
k2 = f[T[[j]] + h/2, Y[[j]] + k1*h/2];
k3 = f[T[[j]] + h, Y[[j]] + (-k1 + 2 k2)h];
Y[[j + 1]] = Y[[j]] + h/6(k1 + 4 k2 + k3);
(* Print[j, "----->", Y[[j]]];*)
T[[j + 1]] = T[[j]] + h;
];];
RungeKutta3[0., 1., {300., 500}, 2, f];
总之,对于二维函数,我如何实现龙格库塔方法
如果你能帮助我,我将不胜感激
提前谢谢
PS:Runge-Kutta方法的阶数为3
-------------------------
问题解决了检查代码,如果有人需要任何帮助,请询问
f[t_, y1_, y2_] := 3 t*y2 + Log[y1] + 4 y1 - 2 t^2 * y1 - Log[t^2 + 1] - t^2;
F[t_, {y1_, y2_}] := {y2, f[t, y1, y2]};
RungeKutta3[a_, b_, [Alpha]_, n_, f_] :=
Module[{h, j, k1, k2, k3, Y, T, R},
h = (b - a)/n;
Y = T = Table[0, {n + 1}];
Y[[1]] = [Alpha]; T[[1]] = a;
For[j = 1, j <= n, ++j,
k1 = f[T[[j]], Y[[j]]];
k2 = f[T[[j]] + h/2, Y[[j]] + k1*h/2];
k3 = f[T[[j]] + h, Y[[j]] + (-k1 + 2 k2)*h];
Y[[j + 1]] = Y[[j]] + h/6*(k1 + 4 k2 + k3);
T[[j + 1]] = T[[j]] + h;
];
R = Table[0, {n + 1}];
For[j = 1, j <= n + 1, j++, R[[j]] = Y[[j]][[1]]];
Print[ListPlot[Transpose[{T, R}]]]
];
RungeKutta3[0., 1, {1., 0.}, 1000, F];
其中t是独立值,y1是函数本身y(t),y2是y'(t)。
通过以下方式调用函数:
RungeKutta3[a, b, [Alpha], n, F];
其中,a为初始“t”值,b为最终“t”值,[Alpha]为函数的初始值和一阶导数(以{y1(a),y2(a0)}的形式给出),n为等间距点的数量F是您必须插入的函数,不管您给F
任何问题都可以问!!
PS:Runge-Kutta问题解决带有初值问题的微分方程,我用这个程序作为基础来解决边值问题,如果你想要的话,请发短信给我 您的代码不只是实现了Mathematica中已经内置的功能吗,也就是说,如果您要使用该选项
Method -> {"ExplicitRungeKutta", "DifferenceOrder" -> 3}
解决
(这并不是说“滚动你自己的”没有任何价值:也许你想把它作为你自己、学生或学生自己的学习练习。)你的代码不只是实现Mathematica中已经内置的东西吗,也就是说,如果你要使用该选项的话
Method -> {"ExplicitRungeKutta", "DifferenceOrder" -> 3}
解决
(这并不是说“自己滚动”没有任何价值:也许你想把它作为自己或学生的学习练习,或者作为学生自己来做。)一个简单的建议,不要用大写字母来命名函数。Mathematica使用带首字母的大写函数。您会遇到什么错误?输出与您期望的有什么不同?我想我已经解决了这个问题!谢谢@NasserM.Abbasi,我知道,我以前查过,但我听说过很多;)@user1123767,您是否介意发布您的解决方案,以便我们其他人可以看到?MathGroup上有一条关于这一点的线索:一条简单的建议,不要用大写字母首字母命名函数。Mathematica使用带首字母的大写函数。您会遇到什么错误?输出与您期望的有什么不同?我想我已经解决了这个问题!谢谢@NasserM.Abbasi,我知道,我以前查过,但我听说过很多;)@user1123767,你介意发布你的解决方案吗,这样我们其他人就可以看到了?MathGroup上有一个关于这一点的帖子:哦,是的,你是对的。我是一名学生,这是我必须做的工作,但我的老师刚刚告诉我们,这样的选择是存在的,哈哈。谢谢你是对的。我是一名学生,这是我必须做的工作,但我的老师刚刚告诉我们,这样的选择是存在的,哈哈。谢谢
Method -> {"ExplicitRungeKutta", "DifferenceOrder" -> 3}