Mathematica 8上的二维Runge-Kutta方法

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,

我在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, 
      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}