0

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

到目前为止,我有我的主类(大部分程序所在的位置)和一个名为 ODEsolver 的类(ODE 求解器所在的位置)。我希望能够从我的主类调用 ODEsolver,并让 ODE 查看一个由字符串争论引用的方法(我要解决的 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 中,它在主类或其他类中)

谢谢!

4

1 回答 1

2

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

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

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

我为我的 C++ DE 求解器fdtl使用了类似的东西。

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

ODESolver solver = new ODE45(x0, xf, y0);

然后你会打电话

solver.solve();
于 2011-10-07T22:44:41.210 回答