ガウス関数を少しずつずらして足し上げるプログラム
ある値をある検出器に入力したときに出力結果がその入力したを中心にガウス関数のように広がってしまう場合を考え,ある関数の値を小刻みに入力したとき、その関数が出力されたときそれぞれ値のガウス関数の広がりにより重ね合わされてどのように見えるか数値計算してみようと思い、以下のソースコードを書いて見ました。行列で考えてそれぞれの値の寄与を足しあげて見ようとしたのしたのですが、実行結果をみると明らかにおかしい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.5 22.0512
0.6 23.8139
0.7 18.9
0.8 14.9642
0.9 12.1864
1 10.1512
1.1 8.60991
1.2 7.4112
1.3 6.45833
1.4 5.68688
1.5 5.05253
1.6 4.52387
1.7 4.07814
1.8 3.69846
1.9 3.37209
2 3.08926
2.1 2.84239
2.2 2.62547
2.3 2.43375
2.4 2.26337
2.5 2.1112
2.6 1.66592
2.7 1.85166
2.8 1.7404
2.9 1.63941
3 1.54742
3.1 1.46337
3.2 1.38635
3.3 1.31558
3.4 4.47979e+30
3.5 1.19017
3.6 1.13444
3.7 1.08275
3.8 1.0347
3.9 0.989949
4 0.9482
4.1 0.909181
4.2 0.872652
4.3 0.838401
4.4 0.806238
4.5 0.775991
4.6 0.747509
4.7 0.720652
4.8 0.695296
4.9 0.671329
5 0.648648
5.1 0.627161
5.2 0.606783
5.3 0.587437
5.4 0.569053
5.5 0.551566
5.6 0.534917
5.7 0.519053
5.8 0.503924
5.9 0.489483
6 0.475689
6.1 0.462502
6.2 0.449887
6.3 0.437809
6.4 0.426239
6.5 0.415146
6.6 0.404506
6.7 0.394292
6.8 0.384482
6.9 0.375054
7 0.365988
7.1 0.357265
7.2 0.348868
7.3 0.34078
7.4 0.332986
7.5 0.325471
7.6 0.318222
7.7 0.311226
7.8 0.304472
7.9 0.297947
8 0.291642
8.1 0.285546
8.2 0.27965
8.3 0.273945
8.4 -0.0404521
8.5 0.263075
8.6 0.257894
8.7 0.252874
8.8 0.248007
8.9 0.243288
9 0.238709
9.1 7.46629e+19
9.2 0.229953
9.3 0.225764
9.4 0.221696
9.5 0.217743
9.6 0.2139
9.7 0.210164
9.8 0.206531
9.9 0.202996
10 0.199557
10.1 0.196209
10.2 0.192868
10.3 0.185672
10.4 0.140717
お礼
回答ありがとうございます. フォークト関数ではフィッティングしていませんが,興味あることなので参考にさせていただきます.
補足
回答ありがとうございます. フォークト関数ではフィッティングしていませんが,興味あることなので参考にさせていただきます.