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

このQ&Aのポイント
  • 1次元熱伝導方程式を差分法で解くプログラムを作りたい
  • 差分法の式を用いたプログラムで計算しているが、温度が定常状態にならず上昇し続ける
  • 独学で学んでいるため、近くに質問できる相手がいないため質問をしている
回答を見る
  • ベストアンサー

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

モデルは長さL、断面積Aの直方体で 初期温度0度、一端は0度固定でもう一端に熱量Qを与えます。 この熱伝導方程式を差分法(陽解法)で解くプログラム(c言語またはwolfram)を作りたいのですが、上手くいかなくて困っています。 初期条件はT(i,0)=0 境界条件はT(n,j)=0 ←0度固定 T(1,j)=Q*dt/(m*c*dx*A) 差分法の式 T[i][j+1]=T[i][j]+0.5*(T[i+1][j]+T[i-1][j]-2*T[i][j]); としてfor文で計算させたのですが、いずれ温度が定常状態になるはずが無限に上がり続けてしまいます。 どのようなプログラムを書けば正しく計算できるのでしょうか? 独学で教科書をみながらやっているため気軽に質問できる方が近くにいないためこちらで質問させて頂きました。 なにかアドバイス頂けたら幸いです。 よろしくお願いいたします。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8012/17124)
回答No.1

どんなプログラムを書いているの?普通に書けばちゃんと計算できますよ。 #include <stdio.h> int main(void) { int i,j,n=6,maxt=100; double T[7][101];//T[n+1][maxt+1] double Q=1,m=1,c=1,A=1,dt=1,dx=1; for(i=1;i<=n;i++) T[i][0]=0; printf("tj=%3d",0); for(i=1;i<=n;i++) printf(" %f",T[i][0]);printf("\n"); for(j=0;j<maxt;j++){ T[n][j+1]=0; T[1][j+1]=Q*dt/(m*c*dx*A); for(i=2;i<n;i++) T[i][j+1]=T[i][j]+0.5*(T[i+1][j]+T[i-1][j]-2*T[i][j]); printf("tj=%3d",j+1); for(i=1;i<=n;i++) printf(" %f",T[i][j+1]);printf("\n"); } return 0; }

aaa776
質問者

補足

回答ありがとうございます。 温度が上がり続けてしまうのは簡単なミスでした。お手数おかけしました。 実行したところ回答者様と同じような結果になりました。 しかしこの結果だと、直方体の一端を熱量qの温度で固定しただけで問題の主旨と合っていないということがわかりました。 また質問内容をあらため質問させていただくと思います。

関連するQ&A

  • 1次元熱伝導方程式を差分法で解く

    長さL、断面積Aの棒で、 初期温度0度、一端は0度固定でもう一端に熱量Qを与えます。 この時の熱伝導方程式を差分法で解くプログラムを作りたいです。(c言語またはmathematica) 初期条件 t=0のとき温度T=0 と差分法の式(陽解法)はわかったのですが、 熱量Qが与えられたときの境界条件が分からずに困っています。 画像はシミュレーションソフトの結果で、熱量Qを与えた面の温度変化です。 ある時刻で定常状態になることがわかりました。 プログラムの計算結果も同じようになるはずなのですが、どうしたらそうなるのか分からない状態です。 どのようなプログラムを組めばよいでしょうか? プログラムと熱伝導については初心者ですので勉強不足な点も多々あると思いますが、しっかり理解したいと思っております。 教えていただけたら幸いです。よろしくお願いいたします。

  • 熱伝導方程式を差分法で解くプログラム

    前回熱伝導方程式の差分法の解き方について質問させて頂いたものです。 https://sp.okwave.jp/qa/q9363032.html 回答ありがとうございました。おかげさまで差分法で解くプログラムを書くことができました。 書けたのは良いのですが、間違っている可能性が大きいです。 私の考えでは、安定性条件を満たしていれば dt,dxを小さくすればするほど、収束温度は変わらず計算精度が高くなっていくと思ったのですが、 私の書いたプログラムではdxdtの値を変えると収束温度まで変わってしまいます。 プログラムに関しても初心者なので説明が難しいのですが、やはり収束温度が値によって変わるということはプログラムがどこか間違っているということでしょうか。 度々すみませんが、回答いただけるとありがたいです。よろしくお願いいたします。

  • C言語による差分法に関して

    C言語で非線形偏微分方程式を陽解法による差分法を用いて数値計算しております。 対象となる物体が非常に小さいため、時間刻みを非常に小さくして行っております。 n=40;  //分割数 d=30e-6; //物体の長さ dt=1.0e-15; //時間刻み幅 loop=1.0e+5; //ループ回数(最終的にはもっと増やしますが、今はこの程度) プログラムの詳細な式や値は省略して double T[?][?] //?のところがわかりません。 for(i=0;i<=40;i++) { T[i][0]=・・・ //初期条件 } for(j=0;j<=loop;j++) { T[0][j]=・・・ //境界条件 T[40][j]=・・・ } //差分計算 for(j=0;j<=loop;j++) { for(i=1;i<40;i++) { T[i][j+1]=・・・・・・・・・・・・・・・・・ } } というような流れなのですが、はじめの配列宣言のT[?][?]の?に入れるべき値はなんでしょうか? 分割の数とでループ回数に1をたしたもの(0があるので)かと思いT[41][100001]としたのですが「Segmentation Fault」となってしまいます。一方、T[50][20000]のようなよくわからない数をいれると一応エラーは出ずに動きますが値が変な気がします。(固定したはずの境界条件が変わってしまいます。) この境界条件が変わってしまうのは配列の宣言に問題があるからのように感じました。 また、もしこの境界条件が変わってしまうのが他の要因にあるとすればどこであると考えられるでしょうか?

  • 1次熱伝導方程式を差分法で解くという問題をC言語で書こうと言う問題を友

    1次熱伝導方程式を差分法で解くという問題をC言語で書こうと言う問題を友達からまる投げされたのですが、解き方が全く分かりませんん;; というのも差分法などの本を見てもよくわからない記号ばかりで。。。。 1次熱伝導方程式においで(∂u/∂t = κ(∂^2u/∂x^2)) 初期条件として u(x,0)=30 K=0.08 ?tは指定されていませんでした(解くに何でも可っぽいです) 境界条件として ux(L,t)=60℃ Lは1 u(0,t)=700℃ でも文章をよんでると有限の場合 棒の両端の温度が0に保たれているとき u(0,t)=u(L,t)=0 棒の両端が断熱されているとき ux(0,t)=ux(L,t)=0 今回の境界条件の場合はどうといていったらいいのか迷子になっているのですがどうかご教授してもらえたらありがたいです。

  • 一次元熱伝導方程式

    こんにちは.学部4年の光太郎といいます. 大学院の過去問を解いていたら,分からない問題が出できたのでみなさんのお力をかりたく相談に来ました. 以下問題です. 【問題文】 長さ1(m)の棒の一次元熱伝導を考える.時間をt(s),棒の一次元座標をx(m)とする.初期状態において棒の温度Tは一様に0(℃)である.t=0(s)で,棒の左端の温度が瞬間的に50(℃)に引き上げられ,その後は,その温度で維持される.棒右端の温度は0(℃)一定である.次の一次元の熱伝導方程式を用いて以下の問いに答えよ. ∂T/∂x=a^(2)∂^(2)T/∂x^(2) 【問題】 T(x,t)=A(x)B(t)と置き,二つの常微分方程式に変換しなさい.また,与えれられた境界条件と初期条件の下で解きなさい. 【分らない点】 まず、最初に境界条件を考えると、以下の二つの条件が出てきます。 T(0,t)=A(0)B(t)=50・・・(1) T(1,t)=A(1)B(t)=0・・・(2) (1)について、A(0)≠0より、 B(t)=50/A(0)となり、B(t)は定数となります。 この物理的意味は、温度Tは時間に関係なく距離のみに 依存するとなります。 しかし、以下の点でこれは矛盾しています。 x=1/2についてt=0とt=t1のそれぞれの時について考える。 ・t=0の時、x=1/2では温度0 ・t=t1の時は、x=1/2では温度は0かもしれないし、そうでないかもしれない。 よって、Tは時間にも依存するします。 なので、上記のように矛盾が起きるのですが、 これはどこがいけないのでしょうか? 長くなりましたが,よろしくお願いします.

  • 熱伝導方程式 陽解法差分近似について

    温度伝導率a=1、刻み幅Δx=0.5、Δt=0.05とした時の温度変化を求めよ。 ここで境界条件T(0、t)=0、T(1、t)=1、初期条件T(x、0)=0とする。 差分式を整理して Ti,n+1 =Ti,n + 1/5(Ti+1,n ー 2Ti,n + Ti-1,n) となりました。このあとどうすればいいかわかりません、、、T1,0やT2,0はどうすれば求まるのでしょうか。教えて欲しいです。

  • 3次元の差分法について

    よろしくお願いします。 現在、3次元の差分法について勉強しています。プログラムにて電位や電界の計算を行っているのですが、本やサイトでは簡単にするために2次元で扱っているものが多いです。 何かお勧めの参考書やサイトがあれば教えていただけますでしょうか。 よろしくお願いします。

  • 2次元ラプラス方程式を差分法で解くというプログラムなのですが、

    2次元ラプラス方程式を差分法で解くというプログラムなのですが、 ・プログラムの流れ ・具体的にどのような計算をしているのか を教えていただけないでしょうか? 面倒だとは思いますがお願いします。 以下プログラムURL http://www.geocities.jp/laprog321/

  • 熱伝導方程式の解き方について教えてください。

    x軸にそって、xが-L/2からL/2の範囲に熱電材料が置かれていたとする。 この時この、材料に、断熱条件で、電流を流したとする。 この時、tが∞で、高温端の温度がT0+ΔT/2、低温端が、T0-ΔT/2になったとする。 この時の定常状態での解u(x,∞)を求めたいのですが、どのようにして解いていけばいいのでしょうか? 詳細に具体的に計算しての解答でなくても構いません。 初期条件や境界条件をどのように設定して、どのような流れで解法していけばいいのかだけで 構わないので、回答宜しくお願いします。

  • 拡散方程式の数値計算(有限差分法)による解き方

    下記の拡散方程式を数値計算(有限差分法)で解き方について教えてください。 拡散方程式 D∂^2C(x,y,t)/∂x^2+u∂C(x,y,t)/∂x=∂C(x,y,t)/∂t 境界条件 D∂C(x,y,t)/∂x=(K/β-u)×C(x,y,t)-KC'(y,t) at x=0 初期条件 C(x,y,0)=Co at t=0 質量保存則 ∂C'(y,t)/∂y=4/vd(K/β×C(0,y,t)-KC'(y,t) ) ---------------------------------------------------------- また、可能であれば、有限差分法以外にも数値解法(有限要素法、有限体積法など)があると思いますが、拡散方程式を解く場合、どの解法が一般的に適しているのか教えてください! よろしくお願い申し上げます。