ある値をある検出器に入力したときに出力結果がその入力したを中心にガウス関数のように広がってしまう場合を考え,ある関数の値を小刻みに入力したとき、その関数が出力されたときそれぞれ値のガウス関数の広がりにより重ね合わされてどのように見えるか数値計算してみようと思い、以下のソースコードを書いて見ました。行列で考えてそれぞれの値の寄与を足しあげて見ようとしたのしたのですが、実行結果をみると明らかにおかしい10^19などの数値が見られます。これはなぜでしょうか。私のソースコードのどこに問題があるのでしょうか。お手数をお掛けしますが回答よろしくおねがいします。
インデントが反映されていませんでしたらすみません。
---------------------------ソースコード------------------------------------------
#include<stdio.h>
#include <stdlib.h>
#include<math.h>
#define N 100
#define f(x) pow(x,-1.7) //この関数が検出器に入力したときどのように見えるか知りたい//
void mat_product(double ec[N],double r[N][N],double e[N])
{
int i,j;
for(i=0; i<N; i++){
for(j=0; j<N;j++){
ec[i]+=r[i][j]*e[j];
}
}
}
int main(void)
{
int i,j;
double ec[N],r[N][N],e[N];
double max,min, ei,E,sigma,min1,min2,m,pi;
sigma=0.08; //keV//
max=10.5;
min=0.5;
min1=0.5;
min2=0.5;
m=0.5;
ei=(max-min)/N;
pi=3.141592;
for(i=0; i<N ;i++){
for(j=0; j<N ;j++){
r[j][i]=(1/(pow(2*pi,0.5)*sigma))*exp(-1*pow(m-min1,2)/(2*pow(sigma,2)));
m+=ei;
}
e[i]=f(min2);
m=0.5;
min1+=ei;
min2+=ei;
}
mat_product(ec,r,e);
for(i=0; i<N; i++){
printf("%g\t%g\n",min,ec[i]);
min+=ei;
}
return 0;
}
---------------------------出力結果---------------------------------
0.522.0512
0.623.8139
0.718.9
0.814.9642
0.912.1864
110.1512
1.18.60991
1.27.4112
1.36.45833
1.45.68688
1.55.05253
1.64.52387
1.74.07814
1.83.69846
1.93.37209
23.08926
2.12.84239
2.22.62547
2.32.43375
2.42.26337
2.52.1112
2.61.66592
2.71.85166
2.81.7404
2.91.63941
31.54742
3.11.46337
3.21.38635
3.31.31558
3.44.47979e+30
3.51.19017
3.61.13444
3.71.08275
3.81.0347
3.90.989949
40.9482
4.10.909181
4.20.872652
4.30.838401
4.40.806238
4.50.775991
4.60.747509
4.70.720652
4.80.695296
4.90.671329
50.648648
5.10.627161
5.20.606783
5.30.587437
5.40.569053
5.50.551566
5.60.534917
5.70.519053
5.80.503924
5.90.489483
60.475689
6.10.462502
6.20.449887
6.30.437809
6.40.426239
6.50.415146
6.60.404506
6.70.394292
6.80.384482
6.90.375054
70.365988
7.10.357265
7.20.348868
7.30.34078
7.40.332986
7.50.325471
7.60.318222
7.70.311226
7.80.304472
7.90.297947
80.291642
8.10.285546
8.20.27965
8.30.273945
8.4-0.0404521
8.50.263075
8.60.257894
8.70.252874
8.80.248007
8.90.243288
90.238709
9.17.46629e+19
9.20.229953
9.30.225764
9.40.221696
9.50.217743
9.60.2139
9.70.210164
9.80.206531
9.90.202996
100.199557
10.10.196209
10.20.192868
10.30.185672
10.40.140717
No.1ベストアンサー
- 回答日時:
> double ec[N],r[N][N],e[N];
のecが初期化されていないまま、mat_product(ec,r,e);が実行され、
mat_product中でも、初期化しないまま
> ec[i]+=r[i][j]*e[j];
で、仮引数ec[i](→main中のec[i])にr[i][j]*e[j]が加算されています。
初期化しない自動変数には、何が入っているかわかりません。
・宣言時に ec[N]={0} と初期化する
・mat_productを呼ぶ前に for(i=0;i<N;i++) {ec[i]=0;}等として0を代入する
・mat_product中で
> for(i=0; i<N; i++){
> ec[i]=0 /*初期値*/
と0を代入する
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
c言語で、繰り返し文の中で、0....
-
doubleの変数にintとintの割り...
-
C++で外積
-
float型とdouble型の変数の違い...
-
c言語のコンパイルエラー canno...
-
C言語の型による処理速度の違い
-
C 開放してるのにエラー(doubl...
-
関数におけるif文とreturn文に...
-
-1.#IND00と出てしまうのですが...
-
MATLAB:多数の画像を取り込み...
-
doubleは常に%lfとするべきなのか
-
^この記号を使わない
-
微分方程式(ルンゲ=クッタ)...
-
指数の表示
-
至急です! マクロ定義で #defi...
-
C言語初心者 構造体 課題について
-
difftime()について
-
atan2 オーバーロード関数の呼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報