0

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 になく、メインまたは他のクラスにあります)

ありがとう!

4

1 に答える 1

2

おそらくやりたいことは、という列挙型を作成ODE_TYPEし、これをに渡してFactory、そのタイプのソルバーを作成することです。このようなもの:

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

この場合、ODESolverは。と呼ばれるものになりますInterface。次に、このインターフェイスを実装するいくつかの具象クラスを作成します。列挙型の要素ごとに1つ。

C++DEソルバーfdtlに似たようなものを使用しました。

ファクトリパターンを使用するのに十分な構造を一般化できない場合もあります。この場合でも、具体的な実装を直接作成するだけのインターフェイスを使用することでメリットが得られます。そのようです、

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

その後、電話します

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