/*
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

