/* 1. 2銘柄の過去のデータを入力する 2. 2銘柄の期待収益額を予測する( y=a+bx) 3. 2銘柄の分散を推定する 4. 銘柄間の相関係数を計算する 5. 銘柄ごとの投資比率を決定する 6. 期待収益率を算出する */ #include <stdio.h> #include <math.h> main() { float kabuka[2][5]={3.23,3.33,3.28,3.47,3.50,0.590,0.567,0.580,0.525,0.510}; float a[2],b[2],bar[2]={0,0}; float sumx[2]={0,0},sumy[2]={0,0},sumxx[2]={0,0},sumyy[2]={0,0},sumxy[2]={0,0},sumy1y2=0; float sokan,hiritu,exkabuka[2],rieki[2]; int i,j,yosokuki,n=5; printf("*****入力データの表示*******\n"); for(i=0;i<2;i++){ printf("会社=%d\n",i); for(j=0;j<n;j++){ printf("株価%d期=%7.4f\n",j,kabuka[i][j]); sumx[i]=sumx[i]+(j+1); sumy[i]=sumy[i]+kabuka[i][j]; sumxx[i]=sumxx[i]+(j+1)*(j+1); sumyy[i]=sumyy[i]+kabuka[i][j]*kabuka[i][j]; sumxy[i]=sumxy[i]+(j+1)*kabuka[i][j]; } } printf("*******分散********\n"); for(i=0;i<2;i++){ bar[i]=(sumyy[i]-n*(sumy[i]/n)*(sumy[i]/n))/(n-1); printf("var=%f\n",bar[i]); } for(j=0;j<n;j++){ sumy1y2=sumy1y2+kabuka[0][j]*kabuka[1][j]; } /*回帰係数の算出*/ for(i=0;i<2;i++){ printf("会社 NO=%d,",i); b[i]=(n*sumxy[i]-sumx[i]*sumy[i])/(n*sumxx[i]-sumx[i]*sumx[i]); a[i]=(sumy[i]-b[i]*sumx[i])/n; printf("回帰式 Y=%7.4f+%7.4f*X\n", a[i],b[i]); } /*株価の予測*/ printf("予測期を入力="); scanf("%d", &yosokuki); for(i=0;i<2;i++){ printf("会社 NO=%d\n",i); exkabuka[i]=a[i]+b[i]*yosokuki; printf("予測株価=%7.4f,",exkabuka[i]); rieki[i]=exkabuka[i]-kabuka[i][4]; printf("収益=%7.4f\n", rieki[i]); } /*相関係数の算出*/ sokan=(5*sumy1y2-sumy[0]*sumy[1])/sqrt((5*sumyy[0]-sumy[0]*sumy[0])*(5*sumyy[1]-sumy[1]*sumy[1])); printf("相関係数=%5.4f\n", sokan); hiritu=(bar[1]-sokan*sqrt(bar[0]*bar[1]))/(bar[0]+bar[1]-2*sokan*sqrt(bar[0]*bar[1])); printf("A社の分配比率=%5.4f, B社の分配比率=%5.4f\n",hiritu, 1-hiritu); }
[出力結果]
*****入力データの表示******* 会社=0 株価0期= 3.2300 株価1期= 3.3300 株価2期= 3.2800 株価3期= 3.4700 株価4期= 3.5000 会社=1 株価0期= 0.5900 株価1期= 0.5670 株価2期= 0.5800 株価3期= 0.5250 株価4期= 0.5100 *******分散******** var=0.013967 var=0.001229 会社 NO=0,回帰式 Y= 3.1580+ 0.0680*X 会社 NO=1,回帰式 Y= 0.6150+-0.0202*X 予測期を入力=7 会社 NO=0 予測株価= 3.6340,収益= 0.1340 会社 NO=1 予測株価= 0.4736,収益=-0.0364 相関係数=-0.9958 A社の分配比率=0.2284, B社の分配比率=0.7716
Back to C Language