作者erica0707 (快快樂樂)
看板C_and_CPP
標題[問題] 模擬太多次就會出錯
時間Wed Mar 18 16:49:41 2009
小的最近剛學寫程式
剛剛遇到一個問題 一直無法解決 想請板上各位高手幫忙偵錯一下
大約模擬超過2萬次 視窗就會自己關閉 實在是很奇怪...也不知道錯在哪
以下是完整程式碼 不好意思有點長
先謝謝大家了
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
double normal()
{
int i ;
double N;
for(i=0;i<1;i++)
{
N=double(rand())/RAND_MAX;
}
return N;
}
int main(void)
{
int i,k,j;
int n;
printf("請輸入要模擬的次數:");
scanf("%d",&n);
double S[5][5];
S[0][0]=0.0006058718;
S[0][1]=0.000339878;
S[0][2]=0.0003308925;
S[0][3]=0.00004346825;
S[0][4]=0.0003617589;
S[1][0]=0.000339878;
S[1][1]=0.001853979;
S[1][2]=0.0007299478;
S[1][3]=0.001010278;
S[1][4]=0.0006364092;
S[2][0]=0.0003308925;
S[2][1]=0.0007299478;
S[2][2]=0.001150133;
S[2][3]=0.0005555975;
S[2][4]=0.0008855597;
S[3][0]=0.00004346825;
S[3][1]=0.001010278;
S[3][2]=0.0005555975;
S[3][3]=0.001122313;
S[3][4]=0.0003779205;
S[4][0]=0.0003617589;
S[4][1]=0.0006364092;
S[4][2]=0.0008855597;
S[4][3]=0.0003779205;
S[4][4]=0.0009437375;
/*
for(i=0;i<5;i++)
{
for(j=i;j<5;j++)
{
printf("請輸入第%d和第%d個資產共變異度",i+1,j+1);
scanf("%lf",&S[i][j]);
S[j][i]=S[i][j];
}
}
*/
double W[n][5],sum,N[5];
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
for(sum=0,k=0;k<5;k++)
{
N[k]=normal();
sum+=N[k];
}
for(j=0;j<5;j++)
{
N[j]=N[j]/sum ;
W[i][j]=N[j];
}
}
double Y[n][5];
for(i=0;i<n;i++)
{
for(j=0;j<5;j++)
{
for(Y[i][j]=0,k=0;k<5;k++)
{
Y[i][j]+=W[i][k]*S[k][j];
}
}
}
double var[n];
for(i=0;i<n;i++)
{
for(var[i]=0,j=0;j<5;j++)
{
var[i]+=Y[i][j]*W[i][j];
}
}
int h;
double min;
for(min=100000,i=0;i<n;i++)
{
if(var[i]<min)
{
min=var[i];
h=i;
}
}
printf("portfolio-var=%lf\n",min);
for(j=0;j<5;j++)
{
printf("第%d個資產配置為%lf\n",j+1,W[h][j]);
}
getchar();
getchar();
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.225.29
1F:→ MOONRAKER:到command line底下執行 至少要看到結束執行時的訊息 03/18 16:53
2F:→ TConvertible:double W[n][5],double var[n],double Y[n][5] 03/18 18:01
3F:→ TConvertible:這幾行,請改用 動態記憶體配置. 不然 n 值太大時, 03/18 18:02
4F:→ TConvertible:Stack 就爆了,程式就當了. 有問題可以來信/水球發問 03/18 18:03
5F:→ erica0707:T大真的很熱心 我問題已經解決了 板上真的很多熱心高手! 03/18 19:57