
No.1ベストアンサー
- 回答日時:
式の形は、合ってますが、参照しているセルが間違っています。
オイラー法の理解の段階から間違っているのか
(自分で考えた漸化式を書いていただけると、ハッキリしていたのですが)
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(行,列)、
すぐに慣れられるので、有利かと思います。
非常にわかりやすい回答ありがとうございます!
質問に書いた『=A1+(1-2*B3^2)*0.1』という式ですが、これは書き間違いでした。
本当は『=A1+(1-2*B1^2)*0.1』と書きたかったのですが、これはこれで間違いだったようで…;
こんなに親切で迅速な回答を頂けるとは思っていなかったので嬉しいです!ありがとうございました!
No.2
- 回答日時:
エクセルで漸化式を扱う方法について、たいへん詳しく親切な回答の後で
どうにも蛇足っぽいのですが、数学的事項について書いてみます。
オイラー法とは、微分方程式を差分近似する方法のひとつで、
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 列ってあるんですかね。あれば、その列を使えば…
回答ありがとうございます!
オイラー法についてあまり理解していなかったので、詳しく説明して頂けて少し理解できた気がします。
親切な回答本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
文字列から英数字のみを抽出す...
-
自分の左隣のセル
-
EXCELのcountif関数での大文字...
-
セルを結合した時のエクセル集...
-
文字数のカウントと平均数の算出
-
excelで、空白を除いてデータを...
-
エクセル1行おきのセルを隣の...
-
エクセルで特定のセル内にだけ...
-
エクセルで、指定の値よりも大...
-
エクセルに入力後、別シートの...
-
同一セル内の重複文字を削除し...
-
Excelで大量のセルに一気に関数...
-
週の労働時間を計算するエクセル
-
条件付き書式の色付きセルのカ...
-
EXCELでマイナス値の入ったセル...
-
【Excel】4つとばしで合計する方法
-
一時間当たりの製造数を調べた...
-
エクセル、○が連続する回数を数...
-
EXCEL-同じ組み合わせになった回数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
文字列から英数字のみを抽出す...
-
自分の左隣のセル
-
excelで、空白を除いてデータを...
-
セルを結合した時のエクセル集...
-
エクセル1行おきのセルを隣の...
-
EXCELのcountif関数での大文字...
-
同一セル内の重複文字を削除し...
-
エクセルで特定のセル内にだけ...
-
エクセルで、指定の値よりも大...
-
週の労働時間を計算するエクセル
-
EXCELでマイナス値の入ったセル...
-
エクセルで、A2のセルにA3...
-
【Excel】4つとばしで合計する方法
-
エクセルに入力後、別シートの...
-
条件付き書式の色付きセルのカ...
-
エラー「#REF」の箇所を置き換...
-
エクセルで年月日から月日のみへ
-
エクセル 12進数
-
一時間当たりの製造数を調べた...
おすすめ情報