C
1コード 2#include<stdio.h> 3#include<stdlib.h> 4#include<math.h> 5#include<time.h> 6 7#define T 1000 8#define N 10 9 10int main(int argc, char **argv){ 11 int i, j, k, l, m; 12 double x[N], xb[N]; 13 double dt; 14 double D; 15 int init_seed; 16 double w1, w2; 17 double u1, u2; 18double nijo[N]; 19double wa = 0.0; 20double var; 21 22 init_seed = time(NULL); 23 24 srand(init_seed); 25 26 D = 1.0; 27 dt = 1.0/(double)T; 28 29 30 printf("%f ", 0.0); 31 for(i=0;i<N;i++){ 32 xb[i] = 0.0; 33 34 printf("%f ", xb[i]); 35 } 36 37 printf("\n"); 38 39 40 41 for(j=1;j<=T;j++){ 42 printf("%f ", (double)j*dt); 43 44 for(i=0;i<N;i++){ 45 u1 = ( double ) rand ()/( RAND_MAX +1.0); 46 u2 = ( double ) rand ()/( RAND_MAX +1.0); 47 w1 = sqrt(-2.0*log(u1))*cos(2.0*M_PI*u2); 48 w2 = sqrt(-2.0*log(u1))*sin(2.0*M_PI*u2); 49 50 x[i] = xb[i] + sqrt(2.0*D)*w1*pow(dt, 0.5); 51 52 53 54 } 55 56 for(i=0;i<N;i++){ 57 xb[i] = x[i]; 58 } 59 60 for(k=0;k<N;k++){ 61 nijo[k] = xb[k]*xb[k]; 62 } 63 for(l=0;l<N;l++){ 64 wa = wa + nijo[l]; 65 } 66 for(m=0;m<N;m++){ 67 var = wa/N ; 68 printf("%lf", var); 69 } 70 71 72 printf("\n"); 73 } 74 75 return 0; 76} 77
おそらく二乗の計算まではできたのですが、そこから先ができません。どなたか教えていただけませんか
そもそも何がしたいの?
少なくとも単に「総和」だけじゃ伝わりません。
今の状態は『足し算をしたい』と言いながら『微積分をやろうとしている』感じです。
まず、そもそもなにがしたいのか、『どうなれば正解か』ぐらいは書きましょう。
回答者は質問者ではないので、提示されないとわかりませんよ。
一次元ブラウン運動の拡散現象について数値的に求めていました。
0<時間t<1の間に0からの距離xに存在する粒子(N個)を表したのがxbです。
要するに各時間におけるxbの二乗の和を総数Nで割って分散を出したいのですが、二乗和がうまくできないといった状況です。
説明不足ですみませんでした。
説明不足なのはまだいいですが、質問は編集できるので編集してください。
回答者は質問本文を見て判断します。
わかりました。
それでは、この問題についてどうお考えですか
あと、『うまくいかない』というのはやめましょう。そういうのは『主観』でしかありません。
もしかすると、質問者さんの(暗算時の)計算ミスかもしれないし、環境によるものかもしれないし、コンパイルエラーのことかもしれないし、…と色んな可能性がありますので。
あなたが話しているのは同じ授業を受けている友だちではなく、全く接点のない相手です。違う言葉を使っていたのでは話にならないので、文脈や用語のすり合わせがまず必要になります。
質問はこうです。「二乗はできたのですが総和の求め方がわかりません。どうすればいいですか?」
「総和」というのは、出た数を全て足すことですが、そこまでは同じ意味で使っていますか?
もしそうならば、なぜそれができないのか説明してください。
第三者が見る上で、小学校一年生で習うはずの足し算ができないという質問の意味はわかりません。