2011-12-15 7 views
1

私はオイラー関数をプログラムが、指示を読み違え、今、私は新しいものを作るために持っているが、私はそれを把握することはできません。Mathematicaにオイラー関数を書くにはどうすればよいですか?

私は以下の自動オイラー機能を作成しました。

f[x_, y_] := -x y^2; 
x0 = 0; 
y0 = 2; 
xend = 2; 
steps = 20; 
h = (xend - x0)/steps // N; 
x = x0; 
y = y0; 
eulerlist = {{x, y}}; 
For[i = 1, i <= steps, y = f[x, y]*h + y; 
    x = x + h; 
    eulerlist = Append[eulerlist, {x, y}]; 
    i++ 
] 
Print[eulerlist] 

しかし、指定したリストが生成されます。

私はこのフォームを生成することができるオイラー機能を持っているしたいと思います:

Euler[y, 2, -x y^2, {x, 0, 2}, 20] 

私はそれ以上を取得していないようです。

+1

ええと...なぜこれが4つのダウンボントを取得しましたか?私は何か見落としてますか? – abcd

+0

あなたはあなたの答えを得た後に質問のコードを削除しないでください。 – abcd

+0

タイトルを意味のないものに編集して '(解決済み) 'を追加しないでください。あなたは答えがあり、あなたがそれを受け入れたので、解決されていることが分かります。 – abcd

答えて

3

何をしたい場合、あなたが求めているものをクリアしていないが、入力

Euler[y, 2, -x y^2, {x, 0, 2}, 20] 

にできるようにし、その後、あなたはこのような関数の定義を記述する必要が

{{0,2},{0.1,2.},{0.2,1.96},{0.3,1.88317},{0.4,1.77678},{0.5,1.6505},{0.6,1.51429},{0.7,1.37671},{0.8,1.24404},{0.9,1.12023},{1.,1.00728},{1.1,0.905822},{1.2,0.815565},{1.3,0.735748},{1.4,0.665376},{1.5,0.603394},{1.6,0.548781},{1.7,0.500596},{1.8,0.457994},{1.9,0.420238},{2.,0.386684}} 

取得することです:

Euler[y0_, f_, {x0_, xend_}, steps_Integer?Positive] := (* body *) 

アンダースコアはパターンを示すために、:=とde遅延評価とパターン指定Integer?Positive

機能の本体については、わかりやすくMathematicaスタイルのアプローチを選択できましたか?おそらくそうではありません。手続きループとAppendは、Mathematicaで何かをする最良の方法です。

ここが優れた解決策です。

Euler[y_, y0_, f_, {x_, x0_, xend_}, steps_Integer?Positive] := 
With[{h = N[(xend - x0)/steps], ff = Function[{x, y}, f]}, 
    NestList[{#[[1]] + h, ff[#[[1]], #[[2]]]*h + #[[2]]} &, {x0, y0}, 
    steps]] 

Euler[y, 2, -x y^2, {x, 0, 2}, 20] 

{{0, 2}, {0.1, 2.}, {0.2, 1.96}, {0.3, 1.88317}, {0.4, 
    1.77678}, {0.5, 1.6505}, {0.6, 1.51429}, {0.7, 1.37671}, {0.8, 
    1.24404}, {0.9, 1.12023}, {1., 1.00728}, {1.1, 0.905822}, {1.2, 
    0.815565}, {1.3, 0.735748}, {1.4, 0.665376}, {1.5, 0.603394}, {1.6, 
    0.548781}, {1.7, 0.500596}, {1.8, 0.457994}, {1.9, 0.420238}, {2., 
    0.386684}} 

あなたは出力Euler[y, 2, -x y^2, {x, 0, 2}, 20]何かをしたい場合は、ノートブックにそれを入力すると最速の方法です。

+0

こんにちは、お返事ありがとうございます。私はオイラー[INPUT]はいつでも異なるする必要があるため、正確に "オイラー[Y 2、-X、Y^2、{xは、0、2}、20]"、およびno#を入力します。 – user1098185

+0

ありがとう! Peacel – user1098185

+1

'ff =関数[{x、y}、f]'で何が起こっているのですか? Mr.Wizard @ –

関連する問題