あるクラスでは、微分方程式を実装して、両端が氷浴に浸された 100 度の棒の温度を求めるプログラムを作成することになっています。それを解くために微分方程式が与えられます。ロッドのセグメントとして x 方向に分割され、時間の反復として y 方向に分割された配列があります。r 値は、ロッドが冷却する速度を決定します。実際のプログラムがどのように実装されるかはそれほど重要ではないことに注意してください。このプログラムはコンピューター クラスター上で実行することを意図しており、割り当てのポイントは、クラスター上でジョブを発行する方法を紹介することです。ただし、プログラムは (当然のことながら) 正しくなければなりません。
私の配列は時間の繰り返しで(一見)ランダムなポイントでガベージデータを取得し始めているように見えるため、プログラムに問題があります。私は Netbeans を持っていて、これをデバッグしようとしましたが、最後に実行したときは、配列変数のさまざまな要素を覗くことができず (デバッグ プロセスが実質的に役に立たなくなりました)、今ではブレーク ポイントで停止することさえできます。私はしばらくの間、この問題に頭を悩ませてきましたが、私よりもずっと賢い誰かが単に問題を「見て」助けてくれることを望んでいます。
ありがとう。
これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int segmentsl;
int segmentst;
float rvalue;
int i,j;
float k;
//Pull in initial data
printf("Enter as integers without spaces: Number of Segments - Length, Number of Segments - time ,value\n");
scanf("%d,%d,%f", &segmentsl,&segmentst,&rvalue);
float tempvstime[segmentsl][segmentst];
//at t0 -> temp = 100sin(pi*x)
for(i = 0; i < segmentsl; i++){
k = (float)(i/(segmentsl-1));
tempvstime[i][0] = 100*sin(M_PI*k);
printf("%f,",tempvstime[i][0]);
}
printf("\n\n\nEND OF INITIALIZATION \n\n\n");
for(j = 0; j < (segmentst-1); j++){
for(i = 0; i < segmentsl; i++){
if(i == 0 || i == (segmentsl - 1)){tempvstime[i][j] = 0;}
else{
tempvstime[i][j+1] = (rvalue*tempvstime[i-1][j]) + ((1-(2*rvalue))*tempvstime[i][j]) + (rvalue*tempvstime[i+1][j]);
}
}
}
for(j = 0; j < segmentst; j++){
for(i = 0; i < segmentsl; i++){
printf("%f,",tempvstime[i][j]);
if(i == segmentsl - 1){printf("\n");}
}
}
}
出力例を次に示します。
Enter as integers without spaces: Number of Segments - Length, Number of Segments - time ,value
6,10,0.5
0.000000,58.778526,95.105652,95.105652,58.778522,0.000000,
END OF INITIALIZATION
0.000000,58.778526,95.105652,95.105652,58.778522,0.000000,
0.000000,47.552826,76.942093,76.942085,47.552826,0.000000,
0.000000,38.471046,62.247456,62.247459,38.471043,0.000000,
0.000000,31.123728,50.359253,50.359249,31.123730,0.000000,
0.000000,25.179626,40.741489,40.741493,25.179625,0.000000,
0.000000,20.370745,32.960560,32.960556,-nan,0.000000,
0.000000,16.480280,26.665649,-nan,-nan,0.000000,
0.000000,13.332825,-nan,-nan,-nan,0.000000,
0.000000,-nan,-nan,-nan,-nan,0.000000,
0.000000,-nan,-nan,-nan,-nan,0.000000,