2011-10-07 20 views
0

我試圖編寫一個ODE求解器(類似於MATLAB中的ODE45)。我希望這個求解器是「獨立的」,即我可以將它傳遞給我想要求解的ODE的名稱,並且它運行該特定微分方程的代碼。Java編程,試圖製作一個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,它無論是在主或其他一些類)

謝謝!

回答

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();