#金融工学と最適化 p.41
library(dplyr)
R_bar=c(14,8,20);sigma=c(6,3,15)
p=matrix(c(1,0.5,0.2,0.5,1,0.4,0.2,0.4,1),ncol=3)
R_f=5
cov=t(t(sigma))%*%t(sigma)*p
Z=solve(cov)%*%c(R_bar-R_f)
X=Z/sum(Z)
R_p=t(X)%*%t(t(R_bar))
sigma_p=(t(X)%*%cov)%*%X
C=solve(cov)
C0=C%*%R_bar
C1=-C%*%rep(R_f,length(R_bar))
#p.68
R_bar=c(14,8,20);sigma=c(6,3,15)
p=matrix(c(1,0.5,0.2,0.5,1,0.4,0.2,0.4,1),ncol=3)
cov=t(t(sigma))%*%t(sigma)*p;C=solve(cov)
D1=C%*%rep(1,nrow(C));D2=C%*%R_bar;r_E=10
a11=sum(D1);a12=sum(D2);a22=sum(D2*R_bar)
mat=matrix(c(a11,a12,a12,a22),ncol=2)
lambda=solve(mat/2,c(1,r_E))
X=(lambda[1]/2)*C%*%rep(1,nrow(C))+(lambda[2]/2)*C%*%R_bar
#p.79
R_it=c(10,3,15,9,3);R_mt=c(4,2,8,6,0)
beta=sum((R_it-mean(R_it))*(R_mt-mean(R_mt)))/sum((R_mt-mean(R_mt))^2)
alpha=mean(R_it)-beta*mean(R_mt)
sigma_ei=sum((R_it-alpha-beta*R_mt)^2)/length(R_it)
R2=cor(R_it,R_mt)^2
#数理計画入門 p.26
B=t(matrix(c(3,2,1,2),ncol=2));N=t(matrix(c(2,1,2,0),ncol=2))
b=c(12,8);c=c(-1,-1)
x_b=solve(B)%*%b
B%*%x_b
#p.51 内点法
C=-sample(1:60,18,replace=T)
A=matrix(sample(1:60,prod(length(C)^2),replace=T),ncol=length(C))
B=sample(1:60,length(C),replace=T)
s=rep(100,length(C));w=rep(100,length(C));x=rep(100,length(C))
ite=10000;
alpha=0.0001
for(j in 1:ite){
mu=sum(x*s)/(length(C)^2)
if(mu>10^(-5)){
x_pre=x;w_pre=w;s_pre=s;
s_mat=diag(s);x_mat=diag(x);e=rep(1,length(C))
p=rep(mu,length(C))-(x_mat%*%s_mat%*%e)
q=B-c(A%*%x);
r=C-c(t(A)%*%w)-s
delta_w=solve(A%*%solve(s_mat)%*%x_mat%*%t(A),q-A%*%solve(s_mat)%*%(p-x_mat%*%r))
delta_s=r-t(A)%*%delta_w
delta_x=solve(s_mat)%*%(p-x_mat%*%delta_s)
if(sum(x+alpha*c(delta_x)>0)==length(x) & sum(s+alpha*c(delta_s)>0)==length(s)){
x=x+alpha*c(delta_x);w=w+alpha*c(delta_w);s=s+alpha*c(delta_s)
print(sum(abs(x-x_pre)+abs(w-w_pre)+abs(s-s_pre)))
}else{
print("stop")
}
}else{
print("stop")
}
}