ここから本文です

熱方程式(波動方程式)の初期境界値問題(周期境界条件)を陽解法で解くC言語プロ...

このエントリーをはてなブックマークに追加

質問者

yuuyoku28さん

2011/7/706:07:05

熱方程式(波動方程式)の初期境界値問題(周期境界条件)を陽解法で解くC言語プログラム

熱方程式(波動方程式)の初期境界値問題(周期境界条件)を陽解法で解くC言語プログラム

同じような質問を繰り返して、恥ずかしいのですが、誰か教えてもらえませんでしょうか?
以下の熱方程式(波動方程式)の初期境界値問題のC言語プログラムを書かねばならないのですが、

δu/δt=δ^2u/δx^2
(t>0,0<x<1)
u(0,x)=2sin(2πx)+3cos(4πx)・・・(1)
(0≦x≦1)(初期条件)
u(t,0)=u(t,1),δu/δx(t,0)=0,δu/δx(t,1)・・・(2)
(t>0)(周期境界条件)

この場合の
Δt=0.004,N=10としてT=0.04,0.2,0.4,0.8での解を陽解法を用いて計算を行い、グラフで示せ。

前回、私の質問に対する、解答者さんのおかげで、ノイマン境界条件は欠けたのですが、
周期境界条件がわかりません。


#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 10 //空間分割点数

int main(){
int i; //定数
int k; //時間点インデックス
int kmax; //
double pi=M_PI; //円周率
double dx=1.0/N; //空間点間隔
double dt=0.004; //時間点間隔
double u1[N+1]; //解の分布
double u2[N+1]; //dt後の分布
double r=dt/(dx*dx); //差分公式の係数
double T=0.04; //

kmax=T/dt;
u1[0]=u1[N]; //境界条件


for(i=1;i<N;i++){
u1[i]=2*sin(2*pi*dx*i)+3*cos(4*pi*dx*i);
}
for(k=1;k<=kmax;k++){
for(i=1;i<=N-1;i++){
u2[i]=r*u1[i-1]+(1-2*r)*u1[i]+r*u1[i+1];
}
for(i=0;i<=N;i++){
u1[i]=u2[i];
}
for(i=0;i<=N;i++){
printf("%f %f %f\n",dt*k,dx*i,u1[i]);
}
printf("\n");
}
return 0;
}

どなたか教えてもらえませんでしょうか?

補足すみません、間違ってディリクレ境界条件のコードを乗せてしまいました。ノイマン条件のコードは上のコードをこう変更します。




kmax=T/dt;
for(i=1;i<N;i++){
u1[i]=2*sin(2*pi*dx*i)+3*cos(4*pi*dx*i);
}
u1[0] = u1[1];
u1[N] = u1[N-1];

for(k=1;k<=kmax;k++){
for(i=1;i<=N-1;i++){
u2[i]=r*u1[i-1]+(1-2*r)*u1[i]+r*u1[i+1];
}
u2[0] = u2[1];
u2[N] = u2[N-1];
for(i=0;i<=N;i++){
u1[i]=u2[i];
}


この質問は、活躍中のチエリアンに回答をリクエストしました。

閲覧数:
963
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

rhinosugarさん

リクエストマッチ

2011/7/1120:07:50

>前回、私の質問に対する、解答者さんのおかげで、
>ノイマン境界条件は欠けた(書けた?)のですが、
>周期境界条件がわかりません。

周期境界条件という言葉は耳にした事がないのですが、私の経験不足からでしょう。計算仕様を読むと

>u(t,0)=u(t,1),δu/δx(t,0)=0,δu/δx(t,1)・・・(2)
>(t>0)(周期境界条件)

となっていて、これは前回お示ししたプログラムの中でノイマン境界条件として、
δu/δx(t,0)=0に対して、u(t,1)=u(t,0)
δu/δx(t,1)=0に対して、u(t,n-1)=u(t,n)
というように、すべてのtについてxの下端、上端における
偏微係数=0という条件を課しています。

あなたは「周期境界条件」の意味が分らず、この質問を出したのでしょうが、(2)のノイマン境界条件にこの名前がつけてあるのですから、これ以上何も必要ないのですよ。

あとは、貴方がやるべき事は、

>Δt=0.004,N=10としてT=0.04,0.2,0.4,0.8での解を
>陽解法を用いて計算を行い、グラフで示せ。

の部分について、このプログラムを調整し、結果を出すだけと思います。まずは条件を調整してコンソール出力を正し、それが出来たら、「グラフ」で示せばいいのです。そこはせめてご自分でどうぞ、分らなければ自力で探すことも大事ですよ。

この質問は投票によってベストアンサーに選ばれました!

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル
  • このエントリーをはてなブックマークに追加

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

ID/ニックネームを選択し、「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する