Java编程,试图创建一个ODE求解器库(面向对象编码的新手!)

时间:2011-10-07 22:12:00

标签: java ode

我正在尝试编写ODE求解器(类似于MATLAB中的ODE45)。我希望这个求解器“独立”,即我可以传递它想要解决的ODE的名称,并运行该特定微分方程的代码。

到目前为止,我有我的主类(程序的大部分内容)和一个名为ODEsolver的类(ODE求解器所在的类)。我希望能够从我的主类调用ODEsolver,并让ODE查看一个由String争论引用的方法(我要解决的ODE的名称)

我设想的方式是:

public class Main {
  double y[];
  double x0,xf,y0;
  x0 = 0;
  xf = 10;
  y0 = 1;

  ODEsolver ode1 = new ODEsolver("name_of_ode_to_be_solved");

  y = ode1.ODE45(x0,xf,y0);


}

其中ODE45是ODEsolver类中的ODE求解器。

但是我不知道如何使用“name_of_ode_to_be_solved”来创建对该方法的调用(该方法不在ODEsolver中,它可以在main或其他类中)

谢谢!

1 个答案:

答案 0 :(得分:2)

您可能要做的是创建一个名为ODE_TYPE的枚举,然后将其传递给Factory,这将创建该类型的解算器。像这样:

ODESolver solver = SolverFactory.Create(ODE_TYPE.FIRST_ORDER_LINEAR);

在这种情况下,ODESolver将被称为Interface。然后,您将创建实现此接口的sevaral具体类。一个用于枚举中的每个元素。

我在C ++ DE解算器fdtl中使用了类似的东西。

也可能是您无法将结构概括到足以使用工厂模式。在这种情况下,您仍然可以使用您只需直接创建具体实现的接口。像这样,

ODESolver solver = new ODE45(x0, xf, y0);
然后你会打电话给

solver.solve();