超球の体積の求め方がよくわかりません!
Posted: 2019年1月01日(火) 18:08
crude法という方法でモンテカルロ積分を用いて、半径1の正領域で囲まれる超球の体積を求めるためのプログラムを作りたいです。(1万回中千回ごとに表示し、2次元、3次元、4次元、5次元の超球体積を求める)
課題として出されたのですがどうしてもわかりません。
授業内では下のようなcrude法プログラムを提示されたのですが、あまり説明をされなかったためよくわかりませんでした。
よろしくお願いします!
課題として出されたのですがどうしてもわかりません。
授業内では下のようなcrude法プログラムを提示されたのですが、あまり説明をされなかったためよくわかりませんでした。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10000
#define D 5
void crude(double *, int);
void print(double *,int, int);
int main(void)
{
double r[D],v[D]; int n,j;
for(j=0;j<D;j++) r[j]=0;
printf(" 回数 円面積 球体積 四次元 五次元\n\n");
for( n=1; n<=N; n++ ){
crude(r,D);
v[0]=1.0;
for(j=1;j<D;j++)
v[j] = v[j-1]*r[j]/(double)n;
if( (n%1000)==0 ) print(v,D,n);
}
return 0;
}
void crude (double *r, int dim)
{
int j;
double xx, rr;
xx = rand()/((double)RAND_MAX+1.0);
rr = 1.0;
for( j=0;j<dim;j++){
rr *= sqrt ( 1 - xx*xx );
r[j] += rr;
}
}
void print(double *v, int dim, int n)
{
int j;
printf("%6d", n);
for( j=1; j<dim;j++ )
printf(" %.6f", v[j] );
printf("\n");
}