• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:1次熱伝導方程式を差分法で解くという問題をC言語で書こうと言う問題を友)

1次熱伝導方程式を差分法で解く方法は?

このQ&Aのポイント
  • 友達から頼まれて1次熱伝導方程式を差分法で解く方法をC言語で書こうとしていますが、解き方がわかりません。
  • 差分法の解析に関する本を見ても理解できる記号が多くて困っています。
  • 特に境界条件の設定について迷っているので、どのように設定すればいいのか教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • spring135
  • ベストアンサー率44% (1487/3332)
回答No.1

1)領域を確認します。 0≦x≦L 0≦t≦T(Tは時間ステップ×刻み数ですが100ステップぐらいを意識しておきます。) 2)図を描きます。 x方向を横軸に、t方向を縦軸にとります。 tを10に刻んで下から上に(時間軸)i=1,2,...11 xを10に刻んで左から右にj=1,2,.....11に番号を振ります。 t-x平面を格子で覆います。格子点(節点)はu(i,j)(i=1,11:j=1,11)で表します。 刻み幅をΔt、Δxで表します。 3)境界条件、初期条件を与えられている、x-t平面の境界を赤で塗り、境界値、初期値を記入します。 直ちに気付くことは(1,1)で境界条件と初期条件が整合していないことです。この不整合はすぐに累積して解は発散します。よってこのままでは解けません。 ここではこの不整合は解消されたと仮定して話を進めます。 4)1次熱伝導方程式 (∂u/∂t = κ(∂^2u/∂x^2))   (1) を差分表示します。一回微分の時間軸は2点差分、2回微分のx軸は3点差分で表します。その結果 (u(i+1,j)-u(i,j))/Δt=κ(u(i,j-1)-2u(i,j)+u(i,j+1))/(Δx)^2  (2) 5)格子の真ん中付近で(2)で表される4点を太く書いて、じっくりと眺めます。 今やろうとしているのはコンピューターによる計算です。計算は式の右辺の各項が既知でそれらを加減乗除して計算結果を今まで未知だった左辺の値として入れてやります。つまり4点 u(i+1,j)、u(i,j)、u(i,j-1)、u(i,j+1)のどれが既知でどれが未知かということです。この4点のセットを動かしながら考えると結局 u(i+1,j)が未知、u(i,j)、u(i,j-1)、u(i,j+1)が既知になることが解ります。従って u(i+1,j)=u(i,j)+(κΔt/(Δx)^2)(u(i,j-1)-2u(i,j)+u(i,j+1)) (3) が計算式です。 t=0、x=0から右方向にX=L(j=11)まで動かし、次にt=Δt(i=2)の線上を左から右に動かしてu(i+1,j)の値を次々に求めていきます。 プログラムは2重のループの計算になるでしょう。 何回も試行錯誤するkとになると思います。 うまく行ったらメッシュを細かくして精度を上げてください。