質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

2回答

792閲覧

総和が求められません。

tackle.8

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/11/01 00:53

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

おそらく二乗の計算まではできたのですが、そこから先ができません。どなたか教えていただけませんか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/11/01 01:22

そもそも何がしたいの? 少なくとも単に「総和」だけじゃ伝わりません。 今の状態は『足し算をしたい』と言いながら『微積分をやろうとしている』感じです。 まず、そもそもなにがしたいのか、『どうなれば正解か』ぐらいは書きましょう。 回答者は質問者ではないので、提示されないとわかりませんよ。
tackle.8

2021/11/01 01:40

一次元ブラウン運動の拡散現象について数値的に求めていました。 0<時間t<1の間に0からの距離xに存在する粒子(N個)を表したのがxbです。 要するに各時間におけるxbの二乗の和を総数Nで割って分散を出したいのですが、二乗和がうまくできないといった状況です。 説明不足ですみませんでした。
BeatStar

2021/11/01 01:44 編集

説明不足なのはまだいいですが、質問は編集できるので編集してください。 回答者は質問本文を見て判断します。
tackle.8

2021/11/01 01:46

わかりました。 それでは、この問題についてどうお考えですか
BeatStar

2021/11/01 01:48

あと、『うまくいかない』というのはやめましょう。そういうのは『主観』でしかありません。 もしかすると、質問者さんの(暗算時の)計算ミスかもしれないし、環境によるものかもしれないし、コンパイルエラーのことかもしれないし、…と色んな可能性がありますので。
Zuishin

2021/11/01 02:31

あなたが話しているのは同じ授業を受けている友だちではなく、全く接点のない相手です。違う言葉を使っていたのでは話にならないので、文脈や用語のすり合わせがまず必要になります。 質問はこうです。「二乗はできたのですが総和の求め方がわかりません。どうすればいいですか?」 「総和」というのは、出た数を全て足すことですが、そこまでは同じ意味で使っていますか? もしそうならば、なぜそれができないのか説明してください。 第三者が見る上で、小学校一年生で習うはずの足し算ができないという質問の意味はわかりません。
guest

回答2

0

C

1#include<stdio.h> 2#include<stdlib.h> 3#include<math.h> 4#include<time.h> 5#define T 1000 6#define N 10 7 8int main(int argc, char **argv) 9{ 10 int i, j, m; 11 double xb[N] = {0}; 12 double dt = 1. / T, D = 1; 13 double w1, w2, u1, u2; 14 double wa = 0.0; 15 double var; 16 srand(time(NULL)); 17 for(m = 0; m <= N; m++){ 18 printf("%lf", 0); 19 } 20 for(j = 1; j <= T; j++){ 21 /* wa = 0; */ 22 printf("%f ", (double)j*dt); 23 for(i = 0; i < N; i++){ 24 u1 = (double) rand () / (RAND_MAX +1.0); 25 u2 = (double) rand () / (RAND_MAX +1.0); 26 w1 = sqrt(-2.0*log(u1))*cos(2.0*M_PI*u2); 27 w2 = sqrt(-2.0*log(u1))*sin(2.0*M_PI*u2); 28 xb[i] += sqrt(2.0*D)*w1*pow(dt, 0.5); 29 wa += xb[i]*xb[i]; 30 } 31 for(m = 0; m < N; m++){ 32 var = wa/N; 33 printf("%lf", var); 34 /* printf("%lf", xb[m]); */ 35 } 36 printf("\n"); 37 } 38 return 0; 39}

チキンマルナゲットな貴公にはヒントをやろう、貴公の書いたコードを我が書くとこうなる。何が足りていないのか考え給え。コメントもよく読むのだぞ。

投稿2021/11/01 03:49

majiponi

総合スコア1722

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tackle.8

2021/11/01 04:32

分散varはfor文にいれなくてよかったです 他は分かりません。
majiponi

2021/11/01 10:47

各ループごとにwaを0にしないで前の値を引き継ぐと何が起こるか、考えて見ましょう。
guest

0

for(l=0;l<N;l++){

wa = wa + nijo[l]; } for(m=0;m<N;m++){ var = wa/N ; printf("%lf", var); }

最初の for で確かに総和出してますが、
その次の for ではなにをしてるんでしょうか。

投稿2021/11/01 01:43

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tackle.8

2021/11/01 01:46

総和を総数Nでわっています。
y_waiwai

2021/11/01 01:48

forループで繰り返しNで割ってるようですが、そこらへんはどんなもんでしょうか。 そもそも実行結果はどうなってるのか提示しようよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問