- ベストアンサー
オイラー法 エクセルで計算
dx(t)/dt=1-2{x(t)}^2 (x(0)=0、0≦t≦5、h=0.1) 上記の微分方程式をオイラー法を使いエクセルで解きたいのですが、自分のやり方で正しい答えが出ているのかわかりません。 添削をお願いします。 A1セルに0.0から5.0まで0.1刻みの数値を入れる。 B1セルに0を入れ、B2セルに 『=A1+(1-2*B3^2)*0.1』 を入れ下にドラッグ。 これで正しい数値が求められるでしょうか? 数学もエクセルも苦手なので困っています。 解答よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
式の形は、合ってますが、参照しているセルが間違っています。 オイラー法の理解の段階から間違っているのか (自分で考えた漸化式を書いていただけると、ハッキリしていたのですが) Excelにする段階で間違えたのか、解らないので、最初から説明すると、 t[n] = h*n = 0.1*n、これを、A列に、 A[n+1] = 0.1*n (A1=0, A2=0.1, …)を入力、というのが、 >A1セルに0.0から5.0まで0.1刻みの数値を入れる。 にあたる、ここは問題ありません。 t = t[n] のときの、Xの値を、X[n] とする。 t = 0 = t[0] のときの値は、x(0)=0 なので、X[0] = 0、 これを、B列の先頭に入れる、B[1] = 0 というのが、 >B1セルに0を入れ、 にあたる、ここも問題ありません、 漸化式は、X[n] = X[n-1] + (1 - X[n-1]^2)*h、 >B2セルに 『=A1+(1-2*B3^2)*0.1』 を入れ 式の大枠はおなじなので、オイラー法の考え方は 間違っていないのではないか、という気もしますが、 X[1]を求める、最初の漸化式は、 X[1] = X[0] - (1 - X[0]^2)*0.1、 X[~]は、B列に入れる、という設定なので、 2か所のX[0]の値は、B1に入っている0でないといけない、 質問者さんの式では、A1,B3と違うセルを参照しているので、 この時点でおかしい、ただ、B2だけなら、A1も0だし、 B3も式も値もない空白が、計算時には0と解釈されるので、 問題ないように見える、ところが、次からは、違う場所を 参照しているので、値がおかしくなる、 当然、どちらも、B1を参照していないとけません。 「B2セルに 『=B1+(1-2*B1^2)*0.1』 を入れ下にドラッグ」ならば、OKです。 A1はタイプミスか、ちょっとしたケアレスミスかもしれませんが、 B3みたいに、まだ入力してないセルを参照するのは、 漸化式で、最初から、B1⇒B2⇒B3という順に値を計算していくの だから、おかしい、と感じるようにしないといけません。 ひょっとしたら、修正しようとして、参照セルをクリックして、 訳解らなくなった結果とか?例えば、最初A1だけタイプミス(後はB1)、 B3以降が変なので、B1⇒B2にしたら、循環参照エラーのメッセージが 出た、あわてて、次のセル、B3をクリックしてしまった、のような。 上の説明で書いたように、式と変数、参照セルの対照表などを 書きながら進めると、この手のミス・勘違いはだいぶ防げます。 この手のことに、Excelを使う上で、 もう一つアドバイスすると、当然のことですが、B2に入力した式を、 オートフィルやコピペしても、B3,B4の式は同じにはなりません。 元のセルから見て1つ前とか1つ上、とかの話をしているので、 当然ですが、もしも、こういう影響で、B3とやってしまっていた 場合に… メニュを、ツール⇒オプション⇒全般とたどると、一番左上かな? R1C1参照形式を使用する、という項目があり、これの頭にチェックを 入れると、頭の行の列のインデックスが、A,B,C,…から、1,2,3,…に 変わります。 この形式では、Rは、Row=行、Cは、Column=列、行列の第何行第何列 という感じの扱い方ができるようになります。 この形式では、R1C1と書くと、どのセルで書いても、ワークシートの 一番左上のセル、R2C2ならそのすぐ右下のセルを示す、 それに対して、あるセルから、1つ左1つ上、すぐ左上にあるセルを 示すときは、R[-1]C[-1]のように、[]を付けて示します。当然、すぐ 右下のエルは、1つ右1つ下なので、R[1]C[1]、 単に1つ右なら、RC[1](理屈からは、R[0]C[1]ですが、[0]は省略できる、 というより省略しなければならないことになっています) 組み合わせも可能で、あるセルに対して、一番左の列、1つ下の行にある セルなら、R[1]C1のように表現できます。 コピペやオートフィルしたとき、セルによって、式の見た目が変わったり しませんし、数学をやっているなら、行列、座標感覚で扱える分、扱い やすく、ミスもしにくかと思います(勿論、最初は少し慣れが必要ですが、 A1形式自体に、まだ余り慣れていないのなら、逆にチャンスかも)。 特に、将来的に、授業の一環とかで、VBA(Visual BASIC for Application) を使わないといけなくなるようなら、VBAでのセルの参照も、Cells(行,列)、 すぐに慣れられるので、有利かと思います。
その他の回答 (1)
- alice_44
- ベストアンサー率44% (2109/4759)
エクセルで漸化式を扱う方法について、たいへん詳しく親切な回答の後で どうにも蛇足っぽいのですが、数学的事項について書いてみます。 オイラー法とは、微分方程式を差分近似する方法のひとつで、 t と x の微分方程式に対し、t の初期値 s と刻み幅 h を設定して 時刻 T_k = s + hk (k は自然数)での x の値を X_k = x(T_k) と置き、 微分方程式の t, x, dx/dt を、それぞれ T_k, X_k, { X_(k+1) - X_k }/h で 置き換えて作った漸化式を、微分方程式の代わりに解く方法のことです。 初期値は、X_0 = x(s+0)。得られるものは、解の近似値です。 質問の問題では、s = 0, h = 0.1 のようなので、 漸化式は { X_(k+1) - X_k }/0.1 = 1 - 2 (X_k)^2, X_0 = 0 となります。 変形すると X_(k+1) = X_k + (0.1){ 1 - 2 (X_k)^2 } ですね。 X_k をエクセルのセル Bk に割り当てるなら、A No.2 にあるように、 B2 = B1 + 0.1*(1 - 2*B1^2) を B 列の各セルにコピペすることになります。 質問氏は、A 列に T_k を入れているようですが、今回のように 微分方程式に陽に t が現れない場合には、T_k は特に必要ありません。 ところで、エクセルの表に X 列ってあるんですかね。あれば、その列を使えば…
お礼
回答ありがとうございます! オイラー法についてあまり理解していなかったので、詳しく説明して頂けて少し理解できた気がします。 親切な回答本当にありがとうございました!
お礼
非常にわかりやすい回答ありがとうございます! 質問に書いた『=A1+(1-2*B3^2)*0.1』という式ですが、これは書き間違いでした。 本当は『=A1+(1-2*B1^2)*0.1』と書きたかったのですが、これはこれで間違いだったようで…; こんなに親切で迅速な回答を頂けるとは思っていなかったので嬉しいです!ありがとうございました!