2012-03-08 29 views
2

Pythonで独自のRunge-Kutta 4インテグレータを実装したいと思います。だから、基本的に、私は、例えば、運動の3つの方程式のセットを定義することができ、および関数にこれらを渡すことができるし、操作するためにそれらにアクセスしたいPythonの別の関数への引数として関数のセットを渡す

---- EXAMPLE set of equations ---- 
f1 = lambda x: x**2 
f2 = lambda y: y**2 
. 
. 
. 
fn = lambda n: n**2 
f = [f1, f2, f3, ... , fn] 

result = integrate(f, other arguments [e.g. stepsize etc.]) 

---- result should be of format ---- 
result = [result1 result2 result3 ... resultn] 

:フォーマットは次のようなものでなければなりませんこれらの方程式はその関数の内部にあります。そんなことがあるものか?

は、理想的には、私は、例えば次のように呼び出すことができる機能をode45はMatlabsに似たものを、achiveたい:

% ---- file 1 ---- % 
function xp=F(t,x) 
xp=zeros(2,1); 
xp(1)=x(2); 
xp(2)=-t*x(1)+exp(t)*x(2)+3*sin(2*t); 

% ---- file 2 ---- % 
[t,x]=ode45(’file 1’,[t0,tf],[x10,x20]); 

% where t0 tf initial and final values of t 
% x10 x20 initial values of x 

注1:
私はすでにscipyのダウンロードでdopri5のソースを見てきましたが、それは私の目的のためにC言語で実装され、あまりにも進んでいます。

注2:
私が上記に書いたことは全く明らかではない場合、私に教えてください、どの

+0

あなたはこれがおそらく遅くなるだろうと知っていますか? – katrielalex

答えて

2

は免責事項:Pythonのは、低レベルの数値のもののこの種の書き込みに設計されていません。 それを管理するのは確かです。numpyは、大きな数値データセットを処理し、このような計算を行うためのモジュールですが、実際の数値処理は低レベルのCまたはFortranで実行されます。独自のインテグレータを書くことは興味深い学習課題ですが、Pythonがどのように正常に使用されているかについてはあまり教えてくれません。それは言った:


頼んだものを正確に行うことができます。

>>> def integrate(fs): 
...  print fs[0](1) 
... 
>>> f1 = lambda x: x**2 
>>> f2 = lambda x: x**3 
>>> 
>>> fs = (f1, f2) 
>>> 
>>> integrate(fs) 
1 

functions are first-class objects in Pythonがこれに当てはまります。

+0

素晴らしいですが、これは確かに機能します。ありがとう!私は、Pythonがそのようなタスクのために作られていないという事実を知っていましたが、練習としてそれができます。試作した後、私はまだルーチンをアウトソーシングするかもしれません。再度、感謝します! – Ingo

関連する問題