Please note that following program has some repetitions where some of the things are calculated again in different parts but a later version will make everything more compact. Please note that this is still a very intermediate preliminary version and many new versions will follow in coming weeks.
.
.
function []= ConditionalDensityHermitesNvariateNewton()
%SV SDE is
%dV(t)=mu1 V(t)^beta1 dt+ mu2 V(t)^beta2 dt + sigma0 V(t)^gamma dZ(t)
%In mean reverting SDEs we ususally have
%mu1= kappaV * thetaV
%beta1=0
%mu2=-kappa
%beta2=0
%The present program works only when drift is zero (for pure noises)
%meaning mu1=0 and mu2=0;
Order=7;
%NDim=4;%Three assets and one SV.
%NMomentsY=Order+1;
%NMomentsX=Order+1;
%%%%%%%%%%%%%%%%%%%5
dt=.03125/2/8;
Tt=64*2*8;
T=Tt*dt;
seed0=12130649;
%seed0=94210876;
%seed0=14210876;
%seed0=53612297
seed0=97459782
rng(seed0, 'twister')
paths=50000;
TT1=100*8/2; %Transition distribution start
TT2=256*8/2; %Transition distribution end
%%%%%%%%%%%%%%%%%%%5
NDims=3;
%
V0(1)=1.000;%.32;
V00(1)=V0(1);
%SDE1
thetaV(1)=1.0;%.045;%1;%.04;
kappaV(1)=0.000;%1.5;%1.5;
gamma(1)=.75;%.75
sigma0(1)=.5;%.35
%SDE2%
%thetaV(1)=.90;%.045;%1;%.04;
%kappaV(1)=1.000;%1.5;%1.5;
%gamma(1)=.75;%.75
%sigma0(1)=.85;%.35
%SDE3%
%thetaV(1)=1.350;%.045;%1;%.04;
%kappaV(1)=2.000;%1.5;%1.5;
%gamma(1)=.75;%.75
%sigma0(1)=.95;%.35
mu1(1)=kappaV(1)*thetaV(1);
mu2(1)=-kappaV(1);
beta1(1)=0;
beta2(1)=1;
V0(2)=1.000;%.32;
V00(2)=V0(2);
%SDE1
thetaV(2)=1.0;%.045;%1;%.04;
kappaV(2)=0.000;%1.5;%1.5;
gamma(2)=.65;%.75
sigma0(2)=.5;%.35
%SDE2
% thetaV(2)=1.0;%.045;%1;%.04;
% kappaV(2)=2.000;%1.5;%1.5;
% gamma(2)=.65;%.75
% sigma0(2)=.95;%.35
%SDE3
%thetaV(2)=.850;%.045;%1;%.04;
%kappaV(2)=.35000;%1.5;%1.5;
%gamma(2)=.65;%.75
%sigma0(2)=.55;%.35
mu1(2)=kappaV(2)*thetaV(2);
mu2(2)=-kappaV(2);
beta1(2)=0;
beta2(2)=1;
V0(3)=1.000;%.33;
V00(3)=V0(3);
%SDE1
thetaV(3)=1.0;%.045;%1;%.04;
kappaV(3)=0.000;%1.5;%1.5;
gamma(3)=.95;%.75
sigma0(3)=.45;%.35
%SDE2
% thetaV(3)=.750;%.045;%1;%.04;
% kappaV(3)=0.5000;%1.5;%1.5;
% gamma(3)=.95;%.75
% sigma0(3)=.45;%.35
%SDE3
%thetaV(3)=1.150;%.045;%1;%.04;
%kappaV(3)=1.5000;%1.5;%1.5;
%gamma(3)=.95;%.75
%sigma0(3)=.75;%.35
mu1(3)=kappaV(3)*thetaV(3);
mu2(3)=-kappaV(3);
beta1(3)=0;
beta2(3)=1;
% Corr1(1,1)=1;
% Corr1(1,2)=.7;
% Corr1(1,3)=.8;
% Corr1(2,2)=1;
% Corr1(2,1)=.7;
% Corr1(2,3)=.5;
% Corr1(3,1)=.8;
% Corr1(3,2)=.5;
% Corr1(3,3)=1;
Corr1(1,1)=1;
Corr1(1,2)=.7/3;
Corr1(1,3)=.8/3;
Corr1(2,2)=1;
Corr1(2,1)=.7/3;
Corr1(2,3)=.5/3;
Corr1(3,1)=.8/3;
Corr1(3,2)=.5/3;
Corr1(3,3)=1;
Corr1(1,1)=1;
Corr1(1,2)=-.7/3;
Corr1(1,3)=.8/3;
Corr1(2,2)=1;
Corr1(2,1)=-.7/3;
Corr1(2,3)=-.5/3;
Corr1(3,1)=.8/3;
Corr1(3,2)=-.5/3;
Corr1(3,3)=1;
% Corr1(1,1)=1;
% Corr1(1,2)=-.27;
% Corr1(1,3)=-.28;
% Corr1(2,2)=1;
% Corr1(2,1)=-.27;
% Corr1(2,3)=-.15;
% Corr1(3,1)=-.28;
% Corr1(3,2)=-.15;
% Corr1(3,3)=1;
%87%Corr1(1:3,1:3)=0.0;
R=chol(Corr1);
%
% R(1:3,1:3)=0;
% R(1,1)=1;
% R(2,2)=1;
% R(3,3)=1;
V0(4)=1.000;%.44;
V00(4)=V0(4);
thetaV(4)=1.0;%.045;%1;%.04;
kappaV(4)=1.000;%1.5;%1.5;
mu1(4)=kappaV(4)*thetaV(4);
mu2(4)=-kappaV(4);
beta1(4)=0;
beta2(4)=1;
gamma(4)=.95;%.75
sigma0(4)=.55;%.45
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
for nn=1:NDims
V(1:paths,nn)=V0(nn);
end
%V(1:paths,1:NDims)=V0(1,1:NDims);
Random1(1:paths/2,1:NDims)=0;
for tt=1:Tt
Random2(1:paths/2,1:NDims)=randn(size(Random1));
Random2(paths/2+1:paths,1:NDims)=-Random2(1:paths/2,1:NDims);
%Random2=R'*Random2;
random1=Random2*R(:,1);
random2=Random2*R(:,2);
random3=Random2*R(:,3);
Random2(:,1)=random1;
Random2(:,2)=random2;
Random2(:,3)=random3;
for nn=1:NDims
V(1:paths,nn)=V(1:paths,nn)+ ...
(mu1(nn).*V(1:paths,nn).^beta1(nn) + mu2(nn).*V(1:paths,nn).^beta2(nn))*dt + ...
sigma0(nn).*V(1:paths,nn).^gamma(nn) .*Random2(1:paths,nn)*sqrt(dt) + ...
(mu1(nn).*beta1(nn)*V(1:paths,nn).^(beta1(nn)-1) + mu2(nn).*beta2(nn).*V(1:paths,nn).^(beta2(nn)-1)).* ...
((mu1(nn).*V(1:paths,nn).^beta1(nn) + mu2(nn).*V(1:paths,nn).^beta2(nn))*dt^2/2 + ...
sigma0(nn).*V(1:paths,nn).^gamma(nn) .*Random2(1:paths,nn)*(1-1/sqrt(3))*dt^1.5) + ...
.5*(mu1(nn).*beta1(nn).*(beta1(nn)-1).*V(1:paths,nn).^(beta1(nn)-2) + mu2(nn).*beta2(nn).*(beta2(nn)-1).*V(1:paths,nn).^(beta2(nn)-2)).* ...
sigma0(nn)^2.*V(1:paths,nn).^(2*gamma(nn)).*dt^2/2 + ...
sigma0(nn).*gamma(nn).*V(1:paths,nn).^(gamma(nn)-1) .* ...
((mu1(nn).*V(1:paths,nn).^beta1(nn) + mu2(nn).*V(1:paths,nn).^beta2(nn)).*Random2(1:paths,nn).*1/sqrt(3)*dt^1.5 + ...
sigma0(nn).*V(1:paths,nn).^gamma(nn) .*(Random2(1:paths,nn).^2-1)*dt/2) + ...
.5*sigma0(nn).*gamma(nn).*(gamma(nn)-1).*V(1:paths,nn).^(gamma(nn)-2) .* ...
sigma0(nn).^2.*V(1:paths,nn).^(2*gamma(nn)) .*Random2(1:paths,nn).*1/sqrt(3)*dt^1.5;
V(V(:,nn)<=0)=.0001;
if(tt==TT1)
Xin(1:paths,nn)=real(V(1:paths,nn));
end
if(tt==TT2)
Xin2(1:paths,nn)=real(V(1:paths,nn));
end
end
end
Yin(1:paths)=0.0;
for pp=1:paths
for mm=1:NDims
Yin(pp)=Yin(pp)+Xin2(pp,mm);%-Xin(pp,mm);
%-Xin(pp,mm);
end
end
str=input("I have reached stone 1");
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%
%save("C:\Users\Lenovo\Documents\MATLAB\MATLAB1\YXfile.mat","Yin","Xin")
%str=input("Data has been saved");
% load("C:\Users\Lenovo\Documents\MATLAB\MATLAB1\YXfile.mat","Yin","Xin")
%
% str=input("Data has been loaded");
%
%
%
%
Order=7;
clf;
[BetaCorrH,YCoeffH,XCoeffH,HCorrXX,Zy,Zx] = CalculateHermiteCorrelations0NA04(Xin,Yin,paths,NDims);
YCoeffZ(1:Order+1)= ConvertHermiteSeriesToZSeries01(YCoeffH(1:Order+1),Order);
%HCorrXX(:,:)=0.0;
BetaCorrH
HCorrXX
%CorrXX1st
str=input("I have reached Stone2");
%[cn,dn,bnv,bbnv,ch] = Calculate2DZSeriesNDimCorrected(YCoeffH,BetaCorrH,HCorrXX,NDims,Order);
%cn=bnv;
[cn,ch]=CalculateGaussianCorrelationFromHermiteCorrelationsNDimNew(YCoeffH,XCoeffH,BetaCorrH,HCorrXX,NDims,Order);
%
%
%
% save("C:\Users\Lenovo\Documents\MATLAB\MATLAB1\Zyxfile.mat","Zy","Zx","cn","HCorrXX")
%
%
% str=input("Data has been saved");
%load("C:\Users\Lenovo\Documents\MATLAB\MATLAB1\Zyxfile.mat","Zy","Zx","cn","HCorrXX")
%str=input("Data has been loaded");
%size(Zy)
%size(Zx)
%size(cn)
HCorrXX0=HCorrXX;
[HCorrXY,HCorrXX,YCoeffHNorm,XCoeffHNorm]=CalculateHermiteCorrelationCoefficientsForGaussianCorrs(Xin,Yin,paths,NDims);
HCorrXX
HCorrXX0
str=input("Look at HCorrXX and HCorrXX0");
%[rhoxy,rhoxx] = CalculateGaussianCorrelationFromHermiteCorrelations001(YCoeffH,XCoeffH,HCorrXY,HCorrXX,NDims,Order)
%[rhoxy,rhoxx] = CalculateGaussianCorrelationFromHermiteCorrelations001(YCoeffH,XCoeffH,BetaCorrH,HCorrXX,NDims,Order)
[rhoxy,rhoxx] = CalculateGaussianCorrelationFromHermiteCorrelations001(YCoeffHNorm,XCoeffH,HCorrXY,HCorrXX0,NDims,Order);
%rhoxy
%rhoxx
%str=input("Look at these correlations")
%OptimizeCorrFromHermitesIterative(Zy,Zx,cn,HCorrXX,NDims,paths,Order);
%OptimizeCorrFromHermitesIterative02(Zy,Zx,cn,HCorrXX,NDims,paths,Order);
%OptimizeCorrFromHermitesNewton02(Zy,Zx,cn,HCorrXX,NDims,paths,Order);
% HCorrXX0=HCorrXX;
% for nn1=1:NDims
% for nn2=1:NDims
% VariableHIn(2:Order+1)=HCorrXX(nn1,nn2,1:Order);
% VariableZOut(1:Order+1)= ConvertHermiteSeriesToZSeries01(VariableHIn(1:Order+1),Order);
% HCorrXXZ(nn1,nn2,1:Order)=VariableZOut(2:Order+1);
% end
% end
%[cnOptim] = OptimizeCorrFromHermitesNewton(Zy,Zx,cn,HCorrXX,NDims,paths,Order);
[cnOptim] = OptimizeCorrFromHermitesNewton(Zy,Zx,rhoxy,rhoxx(:,:,2:8),NDims,paths,Order);
cn=cnOptim;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5555
[CoeffR,XCoeffH,ZI] = RegressYOnX(Yin,Xin,paths,NDims,Order);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Set1
V10(1)=1.2;%.65;%
V10(2)=.65;
V10(3)=1.2;
%V10(4)=1.85;
%
% % % % %Set2
V10(1)=.75;
V10(2)=1.2;%1.2;
V10(3)=.7;
% % % %V10(4)=.65
% % % %
% % % % %Set3
V10(1)=1.25;
V10(2)=1.35;%1.2;
V10(3)=1.25;
% % % V10(4)=1.4
% % % %
% % % %
V10(1)=.85;
V10(2)=.81;%1.2;
V10(3)=.77;
% % % V10(4)=.7
%V10(1)=.65;
%V10(2)=.51;%1.2;
%V10(3)=.73;
%V10(1)=1.65;
%V10(2)=1.51;%1.2;
%V10(3111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)=1.63;
for nn=1:NDims
V(1:paths,nn)=V10(nn);
end
%V(1:paths,1:NDims)=V0(1,1:NDims);
Random1(1:paths/2,1:NDims)=0;
for tt=1:TT2-TT1
Random2(1:paths/2,1:NDims)=randn(size(Random1));
Random2(paths/2+1:paths,1:NDims)=-Random2(1:paths/2,1:NDims);
random1=Random2*R(:,1);
random2=Random2*R(:,2);
random3=Random2*R(:,3);
Random2(:,1)=random1;
Random2(:,2)=random2;
Random2(:,3)=random3;
for nn=1:NDims
V(1:paths,nn)=V(1:paths,nn)+ ...
(mu1(nn).*V(1:paths,nn).^beta1(nn) + mu2(nn).*V(1:paths,nn).^beta2(nn))*dt + ...
sigma0(nn).*V(1:paths,nn).^gamma(nn) .*Random2(1:paths,nn)*sqrt(dt) + ...
(mu1(nn).*beta1(nn)*V(1:paths,nn).^(beta1(nn)-1) + mu2(nn).*beta2(nn).*V(1:paths,nn).^(beta2(nn)-1)).* ...
((mu1(nn).*V(1:paths,nn).^beta1(nn) + mu2(nn).*V(1:paths,nn).^beta2(nn))*dt^2/2 + ...
sigma0(nn).*V(1:paths,nn).^gamma(nn) .*Random2(1:paths,nn)*(1-1/sqrt(3))*dt^1.5) + ...
.5*(mu1(nn).*beta1(nn).*(beta1(nn)-1).*V(1:paths,nn).^(beta1(nn)-2) + mu2(nn).*beta2(nn).*(beta2(nn)-1).*V(1:paths,nn).^(beta2(nn)-2)).* ...
sigma0(nn)^2.*V(1:paths,nn).^(2*gamma(nn)).*dt^2/2 + ...
sigma0(nn).*gamma(nn).*V(1:paths,nn).^(gamma(nn)-1) .* ...
((mu1(nn).*V(1:paths,nn).^beta1(nn) + mu2(nn).*V(1:paths,nn).^beta2(nn)).*Random2(1:paths,nn).*1/sqrt(3)*dt^1.5 + ...
sigma0(nn).*V(1:paths,nn).^gamma(nn) .*(Random2(1:paths,nn).^2-1)*dt/2) + ...
.5*sigma0(nn).*gamma(nn).*(gamma(nn)-1).*V(1:paths,nn).^(gamma(nn)-2) .* ...
sigma0(nn).^2.*V(1:paths,nn).^(2*gamma(nn)) .*Random2(1:paths,nn).*1/sqrt(3)*dt^1.5;
V(V(:,nn)<0)=.0001;
%if(tt==TT1)
% XXin(1:paths,nn)=V(1:paths,nn);
%end
if(tt==TT2-TT1)
XXin2(1:paths,nn)=V(1:paths,nn);
end
end
end
Yin2(1:paths)=0.0;
for pp=1:paths
for mm=1:NDims
Yin2(pp)=Yin2(pp)+XXin2(pp,mm);%-V10(mm);
end
end
randn()
str=input("I have reached stone 4");
NoOfBins=200;
MaxCutOff=20;
[XDensity,IndexOut,IndexMax] = MakeDensityFromSimulation_Infiniti_NEW(Yin2,paths,NoOfBins,MaxCutOff );
for qq=1:8
DataMoments(qq)=sum(Yin2(:).^qq)/paths;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
for nn=1:NDims
[Zx0(nn)] = CalculateZgivenXAndHSeriesCoeffs(V10(nn),XCoeffH(1:Order+1,nn),Order);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
WW(1,1:Order+1)=EvalHermiteArrayH0(Zx0(1),Order);
for mm=2:NDims
WW(1,(mm-1)*Order+2:mm*Order+1)=EvalHermiteArrayH1(Zx0(mm),Order);
end
YProjected=0.0;
for mm=1:NDims*Order+1
YProjected=YProjected+WW(1,mm).*CoeffR(mm,1);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
Zx(1:Order)=0;
for hh=1:Order
for nn=1:NDims
%Zx(hh) = Zx(hh) + bnv(nn+1,hh+1).^1.*Zx0(nn);
Zx(hh) = Zx(hh) + cn(nn,hh).^1.*Zx0(nn);
end
end
bh0=YCoeffH(1);
[W] = EvalHermiteArrayH0(Zx0,Order);
for hh=1:Order
for nn=1:NDims
bh0 = bh0 + ch(nn+1,hh+1).^1.*W(nn,hh+1);
end
end
bh00=bh0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a0=YCoeffZ(1);
a1=YCoeffZ(2);
a2=YCoeffZ(3);
a3=YCoeffZ(4);
a4=YCoeffZ(5);
a5=YCoeffZ(6);
a6=YCoeffZ(7);
a7=YCoeffZ(8);
d1=cn(4,1);
d2=cn(4,2);
d3=cn(4,3);
d4=cn(4,4);
d5=cn(4,5);
d6=cn(4,6);
d7=cn(4,7);
%b0=(a0+a1.* Zx(1) +a2.* Zx(2).^2+a3.* Zx(3).^3+a4* Zx(4).^4+a5 *Zx(5).^5+a6* Zx(6).^6+a7* Zx(7).^7);
b1=(a1* d1+2* a2* Zx(2)* d2 +3* a3* Zx(3).^2* d3+4* a4* Zx(4).^3* d4+5* a5* Zx(5).^4* d5+6* a6* Zx(6).^5* d6+7* a7* Zx(7).^6* d7);
b2=(a2* d2.^2+3* a3* Zx(3)* d3^2 +6* a4* Zx(4).^2* d4^2+10* a5* Zx(5).^3* d5^2+15* a6* Zx(6).^4* d6^2+21* a7* Zx(7).^5* d7^2);
b3=(a3* d3^3+4* a4 *Zx(4)* d4^3 +10* a5* Zx(5).^2* d5^3+20* a6* Zx(6).^3* d6^3+35* a7* Zx(7).^4* d7^3);
b4=(a4* d4^4+5* a5* Zx(5)* d5^4 +15* a6 *Zx(6).^2* d6^4+35* a7* Zx(7).^3 *d7^4);
b5=(a5* d5^5+6* a6* Zx(6)* d6^5 +21* a7 *Zx(7).^2* d7^5);
b6=(a6* d6^6+7* a7* Zx(7)* d7^6 );
b7=(a7* d7^7);
%bh0=b0+b2+3*b4+15*b6;
bh1=b1+3*b3+15*b5+105*b7;
bh2=b2+6*b4+45*b6;
bh3=b3+10*b5+105*b7;
bh4=b4+15*b6;
bh5=b5+21*b7;
bh6=b6;
bh7=b7;
bh(1)=YProjected;
bh(2)=bh1;
bh(3)=bh2;
bh(4)=bh3;
bh(5)=bh4;
bh(6)=bh5;
bh(7)=bh6;
bh(8)=bh7;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
YCoeffz(1:Order+1)= ConvertHermiteSeriesToZSeries01(bh(1:Order+1),Order);
[YMomentsModel]=CalculateMomentsOfZSeries(YCoeffz(1),YCoeffz(2:Order+1),Order,Order+1);
YMomentsModel
DataMoments
str=input("Look at comparison of moments");
[cMu1,YCentralMoments]=ConvertRawMomentsToCentralMoments(YMomentsModel,Order+1);
[cMu2,DataCentralMoments]=ConvertRawMomentsToCentralMoments(DataMoments,Order+1);
YCentralMoments
DataCentralMoments
bh00
YProjected
YCoeffz(2:Order+1)=YCoeffz(2:Order+1).*YProjected/bh00;
str=input("Look at central moments");
% Order0=7;
% Order1=13;
% NData=paths;
% [CondMomentYgivX,BetaCorrHxy] = CalculateConditionalMomentYgivXNDims(Xin,Yin,NData,Zx0,NDims,Order0,Order1)
%
% [VarConditional]=FindSecondConditionalMoment(YCoeffH,BetaCorrH,Zx0)
%
%
% BetaCorrHxy
% BetaCorrH
%
% str=input("Look at conditionalVariance");
clf;
PlotZSeriesDensity(YCoeffz(1),YCoeffz(2:Order+1),'b')
hold on
plot(IndexOut(1:IndexMax),XDensity(1:IndexMax),'r');
%PlotHermiteSeriesDensityAndRvGraph(YCoeffh(1),YCoeffh1(2:yOrder+1),'g')
title("Graph of Density of sum of Three Correlated SDE Variables conditional on starting values of the three SDE random variables.")
%title(sprintf('V00 = %.3f; kappa=%.3f, theta=%.3f,gamma=%.3f,sigma=%.3f;V10=%.3f at TT1=%.3f;TT2=%.3f;Paths=%d ',V00, kappaV, thetaV,gamma,sigma0, V10,(TT1*dt),(TT2*dt),paths));%,sprintf('theta= %f', theta), sprintf('kappa = %f', kappa),sprintf('sigma = %f', sigma0),sprintf('T = %f', T));
legend({'Analytical Density','Numerical Density1'}, ...
'Location','northeast')
str=input("This is the first version without altering the moments of conditional density")
hold off
end
.
.
.
.
function [BetaCorrH,YCoeffH,XCoeffH,HCorrXX,Zy,Zx] = CalculateHermiteCorrelations0NA04(Xin,Yin,NData,NDims)
%This program finds required correlations between NDims explanatory
%variables given in Xin that has NDims dimensionality. Yin is variable
%being explained and is one-diemsnional.
Order=7;
NMoments=8;
[ZI] = MomentMatchedStandardNormalDiscretizedDensity(NData);
for nn=1:NDims
[XCoeffH(1:Order+1,nn),Zx(1:NData,nn)] = CalculateHermiteSeriesFromData02(Xin(1:NData,nn),Order,ZI);
[Zx(1:NData,nn)] = CalculateZgivenXAndHSeriesCoeffs(Xin(1:NData,nn),XCoeffH(1:Order+1,nn),Order);
end
[YCoeffH,Zy] = CalculateHermiteSeriesFromData02(Yin,Order,ZI);
[Zy] = CalculateZgivenXAndHSeriesCoeffs(Yin,YCoeffH,Order);
for nn1=1:NDims
for nn2=1:NDims
if(nn1==nn2)
HCorrXX(nn1,nn2,1:Order)=1.0;
else
HCorrXX(nn1,nn2,1:Order) = CalculateCorrelationBivariateHermiteCH0(Zx(1:NData,nn1),Zx(1:NData,nn2),NData,Order);
end
end
end
for nn1=1:NDims
HCorrXX(nn1,nn1,1:Order)=1.0;
end
for hh=1:Order
for nn1=1:NDims
HCorrXX
ss2=0;
for nn2=1:NDims
if(nn2~=nn1)
ss2=ss2+1;
ss3=0;
for nn3=1:NDims
if(nn3~=nn1)
ss3=ss3+1;
HCorrXXmn(ss2,ss3)=HCorrXX(nn2,nn3,hh);
end
HCorrXmXn(ss2,1)=HCorrXX(nn1,nn2,hh);
end
end
end
BetaCorrXX(1:NDims-1,nn1,hh)=HCorrXXmn(:,:)\HCorrXmXn(1:NDims-1,1);
end
BetaCorrXX
nn1
str=input("Look at important variables");
end
BetaCorrXX
str=input("look at the BetacorrXX");
for nn1=1:NDims
for nn2=1:NDims-1
if(nn2<nn1)
BetaCorrXX0(nn2,nn1,1:Order)=BetaCorrXX(nn2,nn1,1:Order);
elseif(nn2==nn1)
% BetaCorrXX0(nn2,nn1,1:Order)=1;
BetaCorrXX0(nn2+1:NDims,nn1,1:Order)=BetaCorrXX(nn2:NDims-1,nn1,1:Order);
end
end
BetaCorrXX0(nn1,nn1,1:Order)=1;
end
BetaCorrXX
BetaCorrXX0
%
% % % % str=input("Look at BetaCorrXX pairs");
% % % % for hh=1:Order
% % % % for nn1=1:NDims
% % % % for nn2=1:NDims-1
% % % % BetaCorrXXn(nn1,nn2,hh)=sign(BetaCorrXXn(nn1,nn2,hh)).*(abs(BetaCorrXXn(nn1,nn2,hh))).^(1/hh);
% % % % end
% % % % end
% % % % end
for nn1=1:NDims
HCorrXY(nn1,1:Order) = CalculateCorrelationBivariateHermiteCH0(Zx(1:NData,nn1),Zy(1:NData),NData,Order);
end
for hh=1:Order
[BCorrXY(:,hh),Is(:,hh)]=sort(HCorrXY(:,hh),'descend');
end
for hh=1:Order
CorrXX(1:NDims,1:NDims)=HCorrXX(Is(1:NDims,hh),Is(1:NDims,hh),hh);
CorrXY(1:NDims,1)=HCorrXY(Is(1:NDims,hh),hh);
BetaCorr0(1:NDims)=CorrXX\CorrXY;
BetaCorrH(Is(1:NDims,hh),hh)=BetaCorr0(1:NDims);
end
HCorrXX=BetaCorrXX0;
HCorrXX
str=input("Look at HCOrrXX");
% for hh=1:Order
% CorrXX(1:NDims,1:NDims)=HCorrXX(1:NDims,1:NDims,hh);
% CorrXY(1:NDims,1)=HCorrXY(1:NDims,hh);
% BetaCorrH(1:NDims,hh)=CorrXX\CorrXY;
% end
%CorrXX1st(1:NDims,1:NDims)=HCorrXX(1:NDims,1:NDims,1)
BetaCorrH(:,1)'*CorrXX
CorrXY
HCorrXX
HCorrXY
BetaCorrH
str=input("Look at BetaCorrH");
end
.
.
.
.
function [cn,ch] = CalculateGaussianCorrelationFromHermiteCorrelationsNDimNew(YCoeffH,XCoeffH,BetaCorrHxy,CorrHxx,NDims,Order)
for hh=1:Order
for nn=1:NDims
ch(nn+1,hh+1)=BetaCorrHxy(nn,hh).*YCoeffH(hh+1);%make sure indices on all hermite-correlations match.check.
%%%% nn+1 since 1st index would go to y-tilde.
end
end
ch
YCoeffH
str=input("Look at above---00-1-1-1-1-");
[YCoeffZ(1:Order+1)] = ConvertHermiteSeriesToZSeries01(YCoeffH(1:Order+1),Order);
for nn=1:NDims
[XCoeffZ(1:Order+1,nn)] = ConvertHermiteSeriesToZSeries01(XCoeffH(1:Order+1,nn),Order);
end
YCoeffH
YCoeffZ
str=input("Look at the Hermite and Z-series coeffs");
% YCoeffZA=YCoeffZ;
% YCoeffZ=YCoeffZA;
% if(abs(YCoeffZ(4))>abs(YCoeffZ(2)))
% YCoeffZ(4)=sign(YCoeffZ(4)).*abs(YCoeffZ(2));
% end
% if(abs(YCoeffZ(6))>abs(YCoeffZ(4)))
% YCoeffZ(6)=sign(YCoeffZ(6)).*abs(YCoeffZ(4));
% end
% if(abs(YCoeffZ(8))>abs(YCoeffZ(6)))
% YCoeffZ(6)=sign(YCoeffZ(6)).*abs(YCoeffZ(8));
% end
%
%
% if(abs(YCoeffZ(5))>abs(YCoeffZ(3)))
% YCoeffZ(5)=sign(YCoeffZ(5)).*abs(YCoeffZ(3));
% end
% if(abs(YCoeffZ(7))>abs(YCoeffZ(5)))
% YCoeffZ(5)=sign(YCoeffZ(5)).*abs(YCoeffZ(7));
% end
%
for nn=1:NDims
[c(nn+1,1:Order+1)] = ConvertHermiteSeriesToZSeries01(ch(nn+1,1:Order+1),Order);
end
for nn=1:NDims
rhoxy(nn+1,8)=sign(BetaCorrHxy(nn,7)).^1.*(abs(BetaCorrHxy(nn,7))).^(1/7);
rhoxy(nn+1,7)=sign(BetaCorrHxy(nn,6)).^1.*(abs(BetaCorrHxy(nn,6))).^(1/6);
rhoxy(nn+1,6)=sign(BetaCorrHxy(nn,5)).^1.*(abs( (YCoeffH(6).*BetaCorrHxy(nn,5)-21*YCoeffZ(8).*rhoxy(nn+1,8).^(5))./(YCoeffH(6)-21*YCoeffZ(8)))).^(1/5);
rhoxy(nn+1,5)=sign(BetaCorrHxy(nn,4)).^1.*(abs( (YCoeffH(5).*BetaCorrHxy(nn,4)-15*YCoeffZ(7).*rhoxy(nn+1,7).^(4))./(YCoeffH(5)-15*YCoeffZ(7)))).^(1/4);
rhoxy(nn+1,4)=sign(BetaCorrHxy(nn,3)).^1.*(abs( (YCoeffH(4).*BetaCorrHxy(nn,3)-10*YCoeffZ(6).*rhoxy(nn+1,6).^(3)-105*YCoeffZ(8).*rhoxy(nn+1,8).^(3))...
./(YCoeffH(4)-10*YCoeffZ(6)-105*YCoeffZ(8)))).^(1/3);
rhoxy(nn+1,3)=sign(BetaCorrHxy(nn,2)).^1.*(abs( (YCoeffH(3).*BetaCorrHxy(nn,2)-6*YCoeffZ(5).*rhoxy(nn+1,5).^(2)-45*YCoeffZ(7).*rhoxy(nn+1,7).^(2)) ...
./(YCoeffH(3)-6*YCoeffZ(5)-45*YCoeffZ(7)))).^(1/2);
rhoxy(nn+1,2)=sign(BetaCorrHxy(nn,1)).^1.*(abs( (YCoeffH(2).*BetaCorrHxy(nn,1)-3*YCoeffZ(4).*rhoxy(nn+1,4).^(1)-15*YCoeffZ(6).*rhoxy(nn+1,6).^(1) ...
-105*YCoeffZ(8).*rhoxy(nn+1,8).^(1))...
./(YCoeffH(2)-3*YCoeffZ(4)-15*YCoeffZ(6)-105*YCoeffZ(8)))).^(1/1);
% rhoxy(nn,2+1)=sign(4/9*BetaCorrHxy(nn,2)+1/36).*abs((4/9*BetaCorrHxy(nn,2)+1/36))^(.5);
% rhoxy(nn,3+1)=sign((36/225*BetaCorrHxy(nn,3)-3/225*BetaCorrHxy(nn,1))).*(abs((36/225*BetaCorrHxy(nn,3)-3/225*BetaCorrHxy(nn,1))))^(1/3);
% rhoxy(nn,4+1)=sign((144*4/(105)^2*BetaCorrHxy(nn,4)-6/105^2*(4*BetaCorrHxy(nn,2)+.25)-18/105^2)).*(abs(((144*4/(105)^2*BetaCorrHxy(nn,4)-6/105^2*(4*BetaCorrHxy(nn,2)+.25)-18/105^2))))^(1/4);
% rhoxy(nn,1+1)=BetaCorrHxy(nn,1);
end
%
for nn=1:NDims
for mm=1:NDims
if(nn==mm)
rhoxx(nn,mm,2)=1;
rhoxx(nn,mm,3)=1;
rhoxx(nn,mm,4)=1;
rhoxx(nn,mm,5)=1;
rhoxx(nn,mm,6)=1;
rhoxx(nn,mm,7)=1;
rhoxx(nn,mm,8)=1;
elseif(nn<mm)
rhoxx(nn,mm,8)=sign(CorrHxx(nn,mm,7)).*(abs(CorrHxx(nn,mm,7))).^(1/7);
rhoxx(nn,mm,7)=sign(CorrHxx(nn,mm,6)).*(abs(CorrHxx(nn,mm,6))).^(1/6);
rhoxx(nn,mm,6)=sign(CorrHxx(nn,mm,5)).*(abs( (XCoeffH(6,nn).*CorrHxx(nn,mm,5)-21*XCoeffZ(8,nn).*rhoxx(nn,mm,8).^(5))./(XCoeffH(6,nn)-21*XCoeffZ(8,nn)))).^(1/5);
rhoxx(nn,mm,5)=sign(CorrHxx(nn,mm,4)).*(abs( (XCoeffH(5,nn).*CorrHxx(nn,mm,4)-15*XCoeffZ(7,nn).*rhoxx(nn,mm,7).^(4))./(XCoeffH(5,nn)-15*XCoeffZ(7,nn)))).^(1/4);
rhoxx(nn,mm,4)=sign(CorrHxx(nn,mm,3)).*(abs( (XCoeffH(4,nn).*CorrHxx(nn,mm,3)-10*XCoeffZ(6,nn).*rhoxx(nn,mm,6).^(3)-105*XCoeffZ(8,nn).*rhoxx(nn,mm,8).^(3))...
./(XCoeffH(4,nn)-10*XCoeffZ(6,nn)-105*XCoeffZ(8,nn)))).^(1/3);
rhoxx(nn,mm,3)=sign(CorrHxx(nn,mm,2)).*(abs( (XCoeffH(3,nn).*CorrHxx(nn,mm,2)-6*XCoeffZ(5,nn).*rhoxx(nn,mm,5).^(2)-45*XCoeffZ(7,nn).*rhoxx(nn,mm,7).^(2)) ...
./(XCoeffH(3,nn)-6*XCoeffZ(5,nn)-45*XCoeffZ(7,nn)))).^(1/2);
rhoxx(nn,mm,2)=sign(CorrHxx(nn,mm,1)).*(abs( (XCoeffH(2,nn).*CorrHxx(nn,mm,1)-3*XCoeffZ(4,nn).*rhoxx(nn,mm,4).^(1)-15*XCoeffZ(6,nn).*rhoxx(nn,mm,6).^(1) ...
-105*XCoeffZ(8,nn).*rhoxx(nn,mm,8).^(1))...
./(XCoeffH(2,nn)-3*XCoeffZ(4,nn)-15*XCoeffZ(6,nn)-105*XCoeffZ(8,nn)))).^(1/1);
% rhoxx1(nn,mm,6)=sign(CorrHxx(nn,mm,5)).*(abs( (CorrHxx(nn,mm,5)-21.*rhoxx(nn,mm,8).^(5)))).^(1/5);
% rhoxx1(nn,mm,5)=(abs( CorrHxx(nn,mm,4)-15.*rhoxx(nn,mm,7).^(4))).^(1/4);
%rhoxx1(mm,nn,6)=rhoxx1(nn,mm,6);
% rhoxx1(mm,nn,5)=rhoxx1(nn,mm,5);
% rhoxx(mm,nn,8)=rhoxx(nn,mm,8);
% rhoxx(mm,nn,7)=rhoxx(nn,mm,7);
rhoxx(mm,nn,6)=rhoxx(nn,mm,6);
rhoxx(mm,nn,5)=rhoxx(nn,mm,5);
rhoxx(mm,nn,4)=rhoxx(nn,mm,4);
rhoxx(mm,nn,3)=rhoxx(nn,mm,3);
rhoxx(mm,nn,2)=rhoxx(nn,mm,2);
end
end
end
% %
%
% rhoxx(:,:,6)
% rhoxx1(:,:,6)
% rhoxx(:,:,5)
% rhoxx1(:,:,5)
%
% str=input("Look at rhoxx and rhoxx1");
%
% %
% %
% %
% % %rhoxx(1:NDims,1:NDims,2:8)=CorrHxx(1:NDims,1:NDims,1:7);
% for hh=1:7
% % %rhoxx(1:NDims,1:NDims,hh+1)=rhoxx(1:NDims,1:NDims,2);
% rhoxx(1:NDims,1:NDims,hh+1)=(sign(CorrHxx(1:NDims,1:NDims,hh))).^(1).*(abs(CorrHxx(1:NDims,1:NDims,hh))).^(1/hh);
% for nn=1:NDims
% for mm=1:NDims
% if(nn~=mm)
% rhoxx1(nn,mm,2+1)=-sign(4/9*CorrHxx(nn,mm,2)+1/36).^0.*abs((4/9*CorrHxx(nn,mm,2)+1/36))^(.5);
% rhoxx1(nn,mm,3+1)=-sign((36/225*CorrHxx(nn,mm,3)-3/225*CorrHxx(nn,mm,1))).^0.*(abs((36/225*CorrHxx(nn,mm,3)-3/225*CorrHxx(nn,mm,1))))^(1/3);
% rhoxx1(nn,mm,4+1)=-sign((144*4/(105)^2*CorrHxx(nn,mm,4)-6/105^2*(4*CorrHxx(nn,mm,2)+.25)-18/105^2)).^0.*(abs(((144*4/(105)^2*CorrHxx(nn,mm,4)-6/105^2*(4*CorrHxx(nn,mm,2)+.25)-18/105^2))))^(1/4);
% %rhoxx1(nn,mm,2+1)=sign(4/9*CorrHxx(nn,mm,2)+1/36).^(2).*abs((4/9*CorrHxx(nn,mm,2)+1/36))^(.5);
% %rhoxx1(nn,mm,3+1)=sign((36/225*CorrHxx(nn,mm,3)-3/225*CorrHxx(nn,mm,1))).^(3).*(abs((36/225*CorrHxx(nn,mm,3)-3/225*CorrHxx(nn,mm,1))))^(1/3);
% %rhoxx1(nn,mm,4+1)=sign((144*4/(105)^2*CorrHxx(nn,mm,4)-6/105^2*(4*CorrHxx(nn,mm,2)+.25)-18/105^2)).^(4).*(abs(((144*4/(105)^2*CorrHxx(nn,mm,4)-6/105^2*(4*CorrHxx(nn,mm,2)+.25)-18/105^2))))^(1/4);
%
% else
% rhoxx1(nn,mm,2+1)=1.0;
% rhoxx1(nn,mm,3+1)=1.0;
% rhoxx1(nn,mm,4+1)=1.0;
% end
% end
% end
% end
%
% rhoxx(1:NDims,1:NDims,3)=rhoxx1(1:NDims,1:NDims,3);
% rhoxx(1:NDims,1:NDims,4:5)=rhoxx1(1:NDims,1:NDims,4:5);
%
for hh=1:7
%rhoxx(1:NDims,1:NDims,hh+1)=sign(CorrHxx(1:NDims,1:NDims,hh)).*abs(sign(CorrHxx(1:NDims,1:NDims,hh))).^(1/hh);
end
%rhoxx
%rhoxx1
%
%
str=input("Look at rhoxx");
%
% CorrHxx0(1:NDims,1:NDims,2:Order+1)=CorrHxx(1:NDims,1:NDims,1:Order);
%
% for nn=1:NDims
% for mm=1:NDims
%
% if(nn==mm)
% rhoxx(nn,mm,2)=1;
% rhoxx(nn,mm,3)=1;
% rhoxx(nn,mm,4)=1;
% rhoxx(nn,mm,5)=1;
% rhoxx(nn,mm,6)=1;
% rhoxx(nn,mm,7)=1;
% rhoxx(nn,mm,8)=1;
%
% else
% [rrhoxx(nn+1,mm+1,1:Order+1)] = ConvertHermiteSeriesToZSeries01(CorrHxx0(nn,mm,1:Order+1),Order);
% end
% end
% end
%
% for hh=1:7
% %rhoxx(1:NDims,1:NDims,hh+1)=rhoxx(1:NDims,1:NDims,2);
% rhoxx(1:NDims,1:NDims,hh+1)=sign(rrhoxx(1:NDims,1:NDims,hh+1)).*(abs(rrhoxx(1:NDims,1:NDims,hh+1))).^(1/hh);
% end
%rhoxx(:,:)=0.0;
%(YCoeffH(6).*BetaCorrHxy(nn,5)-21*YCoeffZ(8).*rhoxy(nn+1,8).^(5/7))
%(abs((abs(YCoeffH(6)).*BetaCorrHxy(nn,5)-21*abs(YCoeffZ(8)).*rhoxy(nn+1,8).^(5/7))./abs(YCoeffH(6)-21*(YCoeffZ(8))))).^1/5
%(YCoeffH(6)-21*YCoeffZ(8))
%(YCoeffZ(6)-21*YCoeffZ(8))
%(abs(abs(YCoeffH(6)).*BetaCorrHxy(nn,5)-21*abs(YCoeffZ(8)).*rhoxy(nn+1,8).^(5/7))).^(1/5)
%YCoeffH
%YCoeffZ
%rhoxy
%str=input("Look at rhoxy");
cn=rhoxy;
%for nn=1:NDims
% rho_z(nn+1,7)=c(nn+1,8)./YCoeffZ(8);
% cn(nn+1,8)=(abs(rho_z(nn+1,7))).^(1/7);
% cn(nn+1,8)=cn(nn+1,8).*sign(rho_z(nn+1,7));
%end
cnSqrSum=0;
for nn=1:NDims
%ccn0(nn+1,8)=cn(nn+1,8).^2;
cnSqrSum=cnSqrSum+cn(nn+1,8).*cn(nn+1,8);
for mm=1:NDims
if(nn~=mm)
%ccn0(nn+1,8)=ccn0(nn+1,8)+2*cn(nn+1,8).*cn(mm+1,8).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,8).*cn(mm+1,8).*rhoxx(nn,mm,8);
end
end
%ccn(nn+1,8)=sqrt(1-ccn0(nn+1,8));
end
if(cnSqrSum>.995)
cn(2:NDims+1,8)=cn(2:NDims+1,8)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,8)=sqrt(1-cnSqrSum);
%ccn(1,8)=sqrt(1-cn(1,8).^2);
%Cn(1,8)=cn(1,8).*YCoeffZ(8);
cn
%ccn
str=input("Compare the Eighth Element From NDim---2");
% ccn00(2,8)=cn(2,8).^2+2*cn(2,8).*cn(3,8).*CorrXX1st(1,2)+2*cn(2,8).*cn(4,8).*CorrXX1st(1,3)+ ...
% cn(3,8).^2+2*cn(3,8).*cn(4,8).*CorrXX1st(2,3)+cn(4,8).^2
%
% ccn00(2,8)=sqrt(1-(cn(2,8).^2+2*cn(2,8).*cn(3,8).*CorrXX1st(1,2)+2*cn(2,8).*cn(4,8).*CorrXX1st(1,3)))
%
% cnSqrSum
%
% ccn0(2,8)
%
% ccn(1,8)
%
% ccn(2,8)
%
% str=input("Look at the variables Inside");
%
cnSqrSum=0;
%for nn=1:NDims
% rho_z(nn+1,6)=c(nn+1,7)./YCoeffZ(7);
% cn(nn+1,7)=(abs(rho_z(nn+1,6))).^(1/6);
% cn(nn+1,7)=cn(nn+1,7).*sign(rho_z(nn+1,6));
% %ccn(nn+1,7)=sqrt(1-cn(nn+1,7).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
%end
cnSqrSum=0;
for nn=1:NDims
%ccn0(nn+1,7)=cn(nn+1,7).^2;
cnSqrSum=cnSqrSum+cn(nn+1,7).*cn(nn+1,7);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,7)=ccn0(nn+1,7)+2*cn(nn+1,7).*cn(mm+1,7).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,7).*cn(mm+1,7).*rhoxx(nn,mm,7);
end
end
%ccn(nn+1,7)=sqrt(1-ccn0(nn+1,7));
end
if(cnSqrSum>.995)
cn(2:NDims+1,7)=cn(2:NDims+1,7)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,7)=sqrt(1-cnSqrSum);
%ccn(1,7)=sqrt(1-cn(1,7).^2);
%Cn(1,7)=cn(1,7).*YCoeffZ(7);
cn
%ccn
str=input("Compare the Seventh Element From NDim---2");
%cnSqrSum=0;
%for nn=1:NDims
% CC(3,6)=YCoeffZ(8).*(21*cn(nn+1,8).^5.*ccn(nn+1,8).^2);
% rho_z(nn+1,5)=(c(nn+1,6)-CC(3,6))./YCoeffZ(6);
% if(abs(rho_z(nn+1,5))>.995)
% rho_z(nn+1,5)=sign(rho_z(nn+1,5)).*.995;
% end
% cn(nn+1,6)=(abs(rho_z(nn+1,5))).^(1/5);
% cn(nn+1,6)=cn(nn+1,6).*sign(rho_z(nn+1,5));
%%% nn
%%% c(nn+1,6)
%%% CC(3,6)
%%% YCoeffZ(8)
%%% YCoeffZ(6)
%%% rho_z(nn+1,5)
%%% cn(nn+1,6)
%%%
%%% str=input("Look inside the correlations module loop");
% ccn(nn+1,6)=sqrt(1-cn(nn+1,6).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
%end
cnSqrSum=0;
for nn=1:NDims
% ccn0(nn+1,6)=cn(nn+1,6).^2;
cnSqrSum=cnSqrSum+cn(nn+1,6).*cn(nn+1,6);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,6)=ccn0(nn+1,6)+2*cn(nn+1,6).*cn(mm+1,6).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,6).*cn(mm+1,6).*rhoxx(nn,mm,6);
end
end
%ccn(nn+1,6)=sqrt(1-ccn0(nn+1,6));
end
if(cnSqrSum>.995)
cn(2:NDims+1,6)=cn(2:NDims+1,6)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,6)=sqrt(1-cnSqrSum);
%ccn(1,6)=sqrt(1-cn(1,6).^2);
%Cn(1,6)=cn(1,6).*YCoeffZ(6);
cn
%ccn
str=input("Compare the Sixth Element From NDim---2");
% cnSqrSum=0;
% for nn=1:NDims
% CC(3,5)=YCoeffZ(7).*(15*cn(nn+1,7).^4.*ccn(nn+1,7).^2);
% rho_z(nn+1,4)=(c(nn+1,5)-CC(3,5))./YCoeffZ(5);
% cn(nn+1,5)=(abs(rho_z(nn+1,4))).^(1/4);
% cn(nn+1,5)=cn(nn+1,5).*sign(rho_z(nn+1,4));
% %ccn(nn+1,5)=sqrt(1-cn(nn+1,5).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
% end
cnSqrSum=0;
for nn=1:NDims
%ccn0(nn+1,5)=cn(nn+1,5).^2;
cnSqrSum=cnSqrSum+cn(nn+1,5).*cn(nn+1,5);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,5)=ccn0(nn+1,5)+2*cn(nn+1,5).*cn(mm+1,5).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,5).*cn(mm+1,5).*rhoxx(nn,mm,5);
end
end
%ccn(nn+1,5)=sqrt(1-ccn0(nn+1,5));
end
if(cnSqrSum>.995)
cn(2:NDims+1,5)=cn(2:NDims+1,5)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,5)=sqrt(1-cnSqrSum);
%ccn(1,5)=sqrt(1-cn(1,5).^2);
%Cn(1,5)=cn(1,5).*YCoeffZ(5);
cn
%ccn
str=input("Compare the Fifth Element From NDim---2");
%CC(3,4)=YCoeffZ(6).*(10*cn(6).^3.*dn(6).^2*zeta^2);
%CC(5,4)=YCoeffZ(8).*(35*cn(8).^3.*dn(8).^4.*zeta^4);
% cnSqrSum=0;
% for nn=1:NDims
% CC(5,4)=YCoeffZ(8).*(35*cn(nn+1,8).^3.*ccn(nn+1,8).^4);
% CC(3,4)=YCoeffZ(6).*(10*cn(nn+1,6).^3.*ccn(nn+1,6).^2);
% rho_z(nn+1,3)=(c(nn+1,4)-3*CC(5,4)-CC(3,4))./YCoeffZ(4);
% cn(nn+1,4)=(abs(rho_z(nn+1,3))).^(1/3);
% cn(nn+1,4)=cn(nn+1,4).*sign(rho_z(nn+1,3));
% %ccn(nn+1,4)=sqrt(1-cn(nn+1,4).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
% end
cnSqrSum=0;
for nn=1:NDims
% ccn0(nn+1,4)=cn(nn+1,4).^2;
cnSqrSum=cnSqrSum+cn(nn+1,4).*cn(nn+1,4);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,4)=ccn0(nn+1,4)+2*cn(nn+1,4).*cn(mm+1,4).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,4).*cn(mm+1,4).*rhoxx(nn,mm,4);
end
end
%ccn(nn+1,4)=sqrt(1-ccn0(nn+1,4));
end
if(cnSqrSum>.995)
cn(2:NDims+1,4)=cn(2:NDims+1,4)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,4)=sqrt(1-cnSqrSum);
%ccn(1,4)=sqrt(1-cn(1,4).^2);
%Cn(1,4)=cn(1,4).*YCoeffZ(4);
cn
%ccn
str=input("Compare the Fourth Element From NDim---2");
%CC(3,3)=YCoeffZ(5).*(6* cn(5).^2.* dn(5).^2);
%CC(5,3)=YCoeffZ(7).*(15*cn(7).^2.*dn(7).^4);
% cnSqrSum=0;
% for nn=1:NDims
% CC(3,3)=YCoeffZ(5).*(6*cn(nn+1,5).^2.*ccn(nn+1,5).^2);
% CC(5,3)=YCoeffZ(7).*(15*cn(nn+1,7).^2.*ccn(nn+1,7).^4);
% rho_z(nn+1,2)=(c(nn+1,3)-3*CC(5,3)-CC(3,3))./YCoeffZ(3);
% cn(nn+1,3)=(abs(rho_z(nn+1,2))).^(1/2);
% cn(nn+1,3)=cn(nn+1,3).*sign(rho_z(nn+1,2));
% %ccn(nn+1,3)=sqrt(1-cn(nn+1,3).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
% end
cnSqrSum=0;
for nn=1:NDims
%ccn0(nn+1,3)=cn(nn+1,3).^2;
cnSqrSum=cnSqrSum+cn(nn+1,3).*cn(nn+1,3);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,3)=ccn0(nn+1,3)+2*cn(nn+1,3).*cn(mm+1,3).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,3).*cn(mm+1,3).*rhoxx(nn,mm,3);
end
end
%ccn(nn+1,3)=sqrt(1-ccn0(nn+1,3));
end
if(cnSqrSum>.995)
cn(2:NDims+1,3)=cn(2:NDims+1,3)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,3)=sqrt(1-cnSqrSum);
%ccn(1,3)=sqrt(1-cn(1,3).^2);
%Cn(1,3)=cn(1,3).*YCoeffZ(3);
cn
%ccn
str=input("Compare the Third Element From NDim---2");
%CC(7,2)=YCoeffZ(8).*(7*cn(8).*dn(8).^6*zeta^6);
%CC(5,2)=YCoeffZ(6).*(5*cn(6).*dn(6).^4.*zeta^4);
%CC(3,2)=YCoeffZ(4).* (3.* cn(4).* dn(4).^2.* zeta^2);
% cnSqrSum=0;
% for nn=1:NDims
% CC(4,2)=YCoeffZ(4).*(3*cn(nn+1,4).*ccn(nn+1,4).^2);
% CC(6,2)=YCoeffZ(6).*(5*cn(nn+1,5).*ccn(nn+1,6).^4);
% CC(8,2)=YCoeffZ(8).*(7*cn(nn+1,8).*ccn(nn+1,8).^6);
% rho_z(nn+1,1)=(c(nn+1,2)-15*CC(8,2)-3*CC(6,2)-CC(4,2))./YCoeffZ(2);
% cn(nn+1,2)=(abs(rho_z(nn+1,1)));
% %ccn(nn+1,2)=sqrt(1-cn(nn+1,2).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
% end
cnSqrSum=0;
for nn=1:NDims
% ccn0(nn+1,2)=cn(nn+1,2).^2;
cnSqrSum=cnSqrSum+cn(nn+1,2).*cn(nn+1,2);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,2)=ccn0(nn+1,2)+2*cn(nn+1,2).*cn(mm+1,2).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,2).*cn(mm+1,2).*rhoxx(nn,mm,2);
end
end
% ccn(nn+1,2)=sqrt(1-ccn0(nn+1,2));
end
if(cnSqrSum>.995)
cn(2:NDims+1,2)=cn(2:NDims+1,2)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,2)=sqrt(1-cnSqrSum);
%ccn(1,2)=sqrt(1-cn(1,2).^2);
%Cn(1,2)=cn(1,2).*YCoeffZ(2);
cn
%ccn
str=input("Compare the Second Element From NDim---2");
%
% %CC(3,1)=YCoeffZ(2).*(ccn(nn+1,2).^2);
% %CC(5,1)=YCoeffZ(4).*(ccn(nn+1,4).^4);
% %CC(7,1)=YCoeffZ(6).*(ccn(nn+1,6).^6);
% CC(3,1)=YCoeffZ(2).*(cn(1,2).^2);
% CC(5,1)=YCoeffZ(4).*(cn(1,4).^4);
% CC(7,1)=YCoeffZ(6).*(cn(1,6).^6);
%
%
%
%
%
% cn(1,1)=(YCoeffZ(1)-CC(3,1)-3*CC(5,1)-15*CC(7,1))./YCoeffZ(1);
%
%
% cn
% ccn
% str=input("Look at coefficients cn----PleASE lOOK");
%
%
dn(1:Order+1)=cn(1,1:Order+1);
% bn(1:Order+1)=ccn(1,1:Order+1);
%
%
%
%
end
.
.
.
function [HCorrXY,HCorrXX,YCoeffHNorm,XCoeffHNorm] = CalculateHermiteCorrelationCoefficientsForGaussianCorrs(Xin,Yin,NData,NDims)
Order=7;
NMoments=8;
[ZI] = MomentMatchedStandardNormalDiscretizedDensity(NData);
for nn=1:NDims
[XCoeffH(1:Order+1,nn),Zx(1:NData,nn)] = CalculateHermiteSeriesFromData02(Xin(1:NData,nn),Order,ZI);
[Zx(1:NData,nn)] = CalculateZgivenXAndHSeriesCoeffs(Xin(1:NData,nn),XCoeffH(1:Order+1,nn),Order);
end
[YCoeffH,Zy] = CalculateHermiteSeriesFromData02(Yin,Order,ZI);
[Zy] = CalculateZgivenXAndHSeriesCoeffs(Yin,YCoeffH,Order);
for nn1=1:NDims
XXin(1:NData,nn1)=Xin(1:NData,nn1)./(sum(Xin(1:NData,nn1).^2)/NData-(sum(Xin(1:NData,nn1))/NData).^2);
ss2=0;
for nn2=1:NDims
if(nn2~=nn1)
ss2=ss2+1;
XX(1:NData,ss2)=Xin(1:NData,nn2);%/(sum(Xin(1:NData,nn2).^2)/NData-(sum(Xin(1:NData,nn2))/NData).^2);
end
end
[CoeffR(1,:),XCoeffH,ZI] = RegressYOnX(XXin(1:NData,nn1),XX,NData,NDims-1,Order);
CoeffRX(:,nn1)=CoeffR';
end
%for mm=1:NDims*Order+1
% YProjected=YProjected+WW(1,mm).*CoeffR(mm,1);
%end
for nn=1:NDims
ss=1;
for mm=1:NDims-1
if(mm<nn)
for hh=1:Order
ss=ss+1;
HCorrXX(mm,nn,hh)=CoeffRX(ss,nn);
end
elseif(mm==nn)
for hh=1:Order
ss=ss+1;
HCorrXX(mm,nn,hh)=1.0;
HCorrXX(mm+1,nn,hh)=CoeffRX(ss,nn);
end
elseif(mm>nn)
for hh=1:Order
ss=ss+1;
HCorrXX(mm+1,nn,hh)=CoeffRX(ss,nn);
end
end
end
end
HCorrXX(NDims,NDims,1:Order)=1;
for nn=1:NDims
[XCoeffHNorm(1:Order+1,nn),Zx(1:NData,nn)] = CalculateHermiteSeriesFromData02(XXin(1:NData,nn),Order,ZI);
end
YYin(1:NData)=Yin(1:NData)./(sum(Yin(1:NData).^2)/NData-(sum(Yin(1:NData))/NData).^2);
[CoeffRY(1,:),XCoeffH,ZI] = RegressYOnX(YYin(1:NData),XXin,NData,NDims,Order);
ss=1;
for nn=1:NDims
for hh=1:Order
ss=ss+1;
HCorrXY(nn,hh)=CoeffRY(1,ss);
end
end
CoeffRY
HCorrXY
[YCoeffHNorm(1:Order+1),Zy(1:NData)] = CalculateHermiteSeriesFromData02(YYin(1:NData),Order,ZI);
%CoeffRX
%HCorrXX
str=input("Look at comparison of values");
end
.
.
.
.
function [cn,rhoxx] = CalculateGaussianCorrelationFromHermiteCorrelations001(YCoeffH,XCoeffH,BetaCorrHxy,CorrHxx,NDims,Order)
for hh=1:Order
for nn=1:NDims
ch(nn+1,hh+1)=BetaCorrHxy(nn,hh).*YCoeffH(hh+1);%make sure indices on all hermite-correlations match.check.
%%%% nn+1 since 1st index would go to y-tilde.
end
end
ch
YCoeffH
str=input("Look at above---00-1-1-1-1-");
[YCoeffZ(1:Order+1)] = ConvertHermiteSeriesToZSeries01(YCoeffH(1:Order+1),Order);
for nn=1:NDims
[XCoeffZ(1:Order+1,nn)] = ConvertHermiteSeriesToZSeries01(XCoeffH(1:Order+1,nn),Order);
end
YCoeffH
YCoeffZ
str=input("Look at the Hermite and Z-series coeffs-----here---here");
% YCoeffZA=YCoeffZ;
% YCoeffZ=YCoeffZA;
% if(abs(YCoeffZ(4))>abs(YCoeffZ(2)))
% YCoeffZ(4)=sign(YCoeffZ(4)).*abs(YCoeffZ(2));
% end
% if(abs(YCoeffZ(6))>abs(YCoeffZ(4)))
% YCoeffZ(6)=sign(YCoeffZ(6)).*abs(YCoeffZ(4));
% end
% if(abs(YCoeffZ(8))>abs(YCoeffZ(6)))
% YCoeffZ(6)=sign(YCoeffZ(6)).*abs(YCoeffZ(8));
% end
%
%
% if(abs(YCoeffZ(5))>abs(YCoeffZ(3)))
% YCoeffZ(5)=sign(YCoeffZ(5)).*abs(YCoeffZ(3));
% end
% if(abs(YCoeffZ(7))>abs(YCoeffZ(5)))
% YCoeffZ(5)=sign(YCoeffZ(5)).*abs(YCoeffZ(7));
% end
%
for nn=1:NDims
[c(nn+1,1:Order+1)] = ConvertHermiteSeriesToZSeries01(ch(nn+1,1:Order+1),Order);
end
for nn=1:NDims
rhoxy(nn+1,8)=sign(BetaCorrHxy(nn,7)).^1.*(abs(BetaCorrHxy(nn,7))).^(1/7);
rhoxy(nn+1,7)=sign(BetaCorrHxy(nn,6)).^1.*(abs(BetaCorrHxy(nn,6))).^(1/6);
rhoxy(nn+1,6)=sign(BetaCorrHxy(nn,5)).^1.*(abs( (YCoeffH(6).*BetaCorrHxy(nn,5)-21*YCoeffZ(8).*rhoxy(nn+1,8).^(5))./(YCoeffH(6)-21*YCoeffZ(8)))).^(1/5);
rhoxy(nn+1,5)=sign(BetaCorrHxy(nn,4)).^1.*(abs( (YCoeffH(5).*BetaCorrHxy(nn,4)-15*YCoeffZ(7).*rhoxy(nn+1,7).^(4))./(YCoeffH(5)-15*YCoeffZ(7)))).^(1/4);
rhoxy(nn+1,4)=sign(BetaCorrHxy(nn,3)).^1.*(abs( (YCoeffH(4).*BetaCorrHxy(nn,3)-10*YCoeffZ(6).*rhoxy(nn+1,6).^(3)-105*YCoeffZ(8).*rhoxy(nn+1,8).^(3))...
./(YCoeffH(4)-10*YCoeffZ(6)-105*YCoeffZ(8)))).^(1/3);
rhoxy(nn+1,3)=sign(BetaCorrHxy(nn,2)).^1.*(abs( (YCoeffH(3).*BetaCorrHxy(nn,2)-6*YCoeffZ(5).*rhoxy(nn+1,5).^(2)-45*YCoeffZ(7).*rhoxy(nn+1,7).^(2)) ...
./(YCoeffH(3)-6*YCoeffZ(5)-45*YCoeffZ(7)))).^(1/2);
rhoxy(nn+1,2)=sign(BetaCorrHxy(nn,1)).^0.*((( (YCoeffH(2).*BetaCorrHxy(nn,1)-3*YCoeffZ(4).*rhoxy(nn+1,4).^(1)-15*YCoeffZ(6).*rhoxy(nn+1,6).^(1) ...
-105*YCoeffZ(8).*rhoxy(nn+1,8).^(1))...
./(YCoeffH(2)-3*YCoeffZ(4)-15*YCoeffZ(6)-105*YCoeffZ(8)))).^(1/1));
% rhoxy(nn,2+1)=sign(4/9*BetaCorrHxy(nn,2)+1/36).*abs((4/9*BetaCorrHxy(nn,2)+1/36))^(.5);
% rhoxy(nn,3+1)=sign((36/225*BetaCorrHxy(nn,3)-3/225*BetaCorrHxy(nn,1))).*(abs((36/225*BetaCorrHxy(nn,3)-3/225*BetaCorrHxy(nn,1))))^(1/3);
% rhoxy(nn,4+1)=sign((144*4/(105)^2*BetaCorrHxy(nn,4)-6/105^2*(4*BetaCorrHxy(nn,2)+.25)-18/105^2)).*(abs(((144*4/(105)^2*BetaCorrHxy(nn,4)-6/105^2*(4*BetaCorrHxy(nn,2)+.25)-18/105^2))))^(1/4);
% rhoxy(nn,1+1)=BetaCorrHxy(nn,1);
end
%
for nn=1:NDims
for mm=1:NDims
if(nn==mm)
rhoxx(nn,mm,2)=1;
rhoxx(nn,mm,3)=1;
rhoxx(nn,mm,4)=1;
rhoxx(nn,mm,5)=1;
rhoxx(nn,mm,6)=1;
rhoxx(nn,mm,7)=1;
rhoxx(nn,mm,8)=1;
else %if(nn<mm)
rhoxx(nn,mm,8)=sign(CorrHxx(nn,mm,7)).^1.*(abs(CorrHxx(nn,mm,7))).^(1/7);
rhoxx(nn,mm,7)=sign(CorrHxx(nn,mm,6)).^1.*(abs(CorrHxx(nn,mm,6))).^(1/6);
rhoxx(nn,mm,6)=sign(CorrHxx(nn,mm,5)).^1.*(abs( (XCoeffH(6,nn).*CorrHxx(nn,mm,5)-21*XCoeffZ(8,nn).*rhoxx(nn,mm,8).^(5))./(XCoeffH(6,nn)-21*XCoeffZ(8,nn)))).^(1/5);
rhoxx(nn,mm,5)=sign(CorrHxx(nn,mm,4)).^1.*(abs( (XCoeffH(5,nn).*CorrHxx(nn,mm,4)-15*XCoeffZ(7,nn).*rhoxx(nn,mm,7).^(4))./(XCoeffH(5,nn)-15*XCoeffZ(7,nn)))).^(1/4);
rhoxx(nn,mm,4)=sign(CorrHxx(nn,mm,3)).^1.*(abs( (XCoeffH(4,nn).*CorrHxx(nn,mm,3)-10*XCoeffZ(6,nn).*rhoxx(nn,mm,6).^(3)-105*XCoeffZ(8,nn).*rhoxx(nn,mm,8).^(3))...
./(XCoeffH(4,nn)-10*XCoeffZ(6,nn)-105*XCoeffZ(8,nn)))).^(1/3);
rhoxx(nn,mm,3)=sign(CorrHxx(nn,mm,2)).^1.*(abs( (XCoeffH(3,nn).*CorrHxx(nn,mm,2)-6*XCoeffZ(5,nn).*rhoxx(nn,mm,5).^(2)-45*XCoeffZ(7,nn).*rhoxx(nn,mm,7).^(2)) ...
./(XCoeffH(3,nn)-6*XCoeffZ(5,nn)-45*XCoeffZ(7,nn)))).^(1/2);
rhoxx(nn,mm,2)=sign(CorrHxx(nn,mm,1)).^0.*((( (XCoeffH(2,nn).*CorrHxx(nn,mm,1)-3*XCoeffZ(4,nn).*rhoxx(nn,mm,4).^(1)-15*XCoeffZ(6,nn).*rhoxx(nn,mm,6).^(1) ...
-105*XCoeffZ(8,nn).*rhoxx(nn,mm,8).^(1))...
./(XCoeffH(2,nn)-3*XCoeffZ(4,nn)-15*XCoeffZ(6,nn)-105*XCoeffZ(8,nn)))).^(1/1));
% rhoxx1(nn,mm,6)=sign(CorrHxx(nn,mm,5)).*(abs( (CorrHxx(nn,mm,5)-21.*rhoxx(nn,mm,8).^(5)))).^(1/5);
% rhoxx1(nn,mm,5)=(abs( CorrHxx(nn,mm,4)-15.*rhoxx(nn,mm,7).^(4))).^(1/4);
%rhoxx1(mm,nn,6)=rhoxx1(nn,mm,6);
% rhoxx1(mm,nn,5)=rhoxx1(nn,mm,5);
% rhoxx(mm,nn,8)=rhoxx(nn,mm,8);
% rhoxx(mm,nn,7)=rhoxx(nn,mm,7);
% rhoxx(mm,nn,8)=rhoxx(nn,mm,8);
% rhoxx(mm,nn,7)=rhoxx(nn,mm,7);
% rhoxx(mm,nn,6)=rhoxx(nn,mm,6);
%
% rhoxx(mm,nn,5)=rhoxx(nn,mm,5);
% rhoxx(mm,nn,4)=rhoxx(nn,mm,4);
% rhoxx(mm,nn,3)=rhoxx(nn,mm,3);
% rhoxx(mm,nn,2)=rhoxx(nn,mm,2);
end
end
end
for nn=1:NDims
for mm=1:NDims
rhoxx0(mm,nn,2:Order+1)=(rhoxx(mm,nn,2:Order+1)+rhoxx(nn,mm,2:Order+1))/2;
end
end
rhoxy
rhoxx0
str=input("Look at rhoxy and rhoxx at end");
rhoxx=rhoxx0;
cn=rhoxy;
%for nn=1:NDims
% rho_z(nn+1,7)=c(nn+1,8)./YCoeffZ(8);
% cn(nn+1,8)=(abs(rho_z(nn+1,7))).^(1/7);
% cn(nn+1,8)=cn(nn+1,8).*sign(rho_z(nn+1,7));
%end
cnSqrSum=0;
for nn=1:NDims
%ccn0(nn+1,8)=cn(nn+1,8).^2;
cnSqrSum=cnSqrSum+cn(nn+1,8).*cn(nn+1,8);
for mm=1:NDims
if(nn~=mm)
%ccn0(nn+1,8)=ccn0(nn+1,8)+2*cn(nn+1,8).*cn(mm+1,8).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,8).*cn(mm+1,8).*rhoxx(nn,mm,8);
end
end
%ccn(nn+1,8)=sqrt(1-ccn0(nn+1,8));
end
if(cnSqrSum>.995)
cn(2:NDims+1,8)=cn(2:NDims+1,8)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,8)=sqrt(1-cnSqrSum);
%ccn(1,8)=sqrt(1-cn(1,8).^2);
%Cn(1,8)=cn(1,8).*YCoeffZ(8);
cn
%ccn
str=input("Compare the Eighth Element From NDim---2");
% ccn00(2,8)=cn(2,8).^2+2*cn(2,8).*cn(3,8).*CorrXX1st(1,2)+2*cn(2,8).*cn(4,8).*CorrXX1st(1,3)+ ...
% cn(3,8).^2+2*cn(3,8).*cn(4,8).*CorrXX1st(2,3)+cn(4,8).^2
%
% ccn00(2,8)=sqrt(1-(cn(2,8).^2+2*cn(2,8).*cn(3,8).*CorrXX1st(1,2)+2*cn(2,8).*cn(4,8).*CorrXX1st(1,3)))
%
% cnSqrSum
%
% ccn0(2,8)
%
% ccn(1,8)
%
% ccn(2,8)
%
% str=input("Look at the variables Inside");
%
cnSqrSum=0;
%for nn=1:NDims
% rho_z(nn+1,6)=c(nn+1,7)./YCoeffZ(7);
% cn(nn+1,7)=(abs(rho_z(nn+1,6))).^(1/6);
% cn(nn+1,7)=cn(nn+1,7).*sign(rho_z(nn+1,6));
% %ccn(nn+1,7)=sqrt(1-cn(nn+1,7).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
%end
cnSqrSum=0;
for nn=1:NDims
%ccn0(nn+1,7)=cn(nn+1,7).^2;
cnSqrSum=cnSqrSum+cn(nn+1,7).*cn(nn+1,7);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,7)=ccn0(nn+1,7)+2*cn(nn+1,7).*cn(mm+1,7).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,7).*cn(mm+1,7).*rhoxx(nn,mm,7);
end
end
%ccn(nn+1,7)=sqrt(1-ccn0(nn+1,7));
end
if(cnSqrSum>.995)
cn(2:NDims+1,7)=cn(2:NDims+1,7)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,7)=sqrt(1-cnSqrSum);
%ccn(1,7)=sqrt(1-cn(1,7).^2);
%Cn(1,7)=cn(1,7).*YCoeffZ(7);
cn
%ccn
str=input("Compare the Seventh Element From NDim---2");
%cnSqrSum=0;
%for nn=1:NDims
% CC(3,6)=YCoeffZ(8).*(21*cn(nn+1,8).^5.*ccn(nn+1,8).^2);
% rho_z(nn+1,5)=(c(nn+1,6)-CC(3,6))./YCoeffZ(6);
% if(abs(rho_z(nn+1,5))>.995)
% rho_z(nn+1,5)=sign(rho_z(nn+1,5)).*.995;
% end
% cn(nn+1,6)=(abs(rho_z(nn+1,5))).^(1/5);
% cn(nn+1,6)=cn(nn+1,6).*sign(rho_z(nn+1,5));
%%% nn
%%% c(nn+1,6)
%%% CC(3,6)
%%% YCoeffZ(8)
%%% YCoeffZ(6)
%%% rho_z(nn+1,5)
%%% cn(nn+1,6)
%%%
%%% str=input("Look inside the correlations module loop");
% ccn(nn+1,6)=sqrt(1-cn(nn+1,6).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
%end
cnSqrSum=0;
for nn=1:NDims
% ccn0(nn+1,6)=cn(nn+1,6).^2;
cnSqrSum=cnSqrSum+cn(nn+1,6).*cn(nn+1,6);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,6)=ccn0(nn+1,6)+2*cn(nn+1,6).*cn(mm+1,6).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,6).*cn(mm+1,6).*rhoxx(nn,mm,6);
end
end
%ccn(nn+1,6)=sqrt(1-ccn0(nn+1,6));
end
if(cnSqrSum>.995)
cn(2:NDims+1,6)=cn(2:NDims+1,6)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,6)=sqrt(1-cnSqrSum);
%ccn(1,6)=sqrt(1-cn(1,6).^2);
%Cn(1,6)=cn(1,6).*YCoeffZ(6);
cn
%ccn
str=input("Compare the Sixth Element From NDim---2");
% cnSqrSum=0;
% for nn=1:NDims
% CC(3,5)=YCoeffZ(7).*(15*cn(nn+1,7).^4.*ccn(nn+1,7).^2);
% rho_z(nn+1,4)=(c(nn+1,5)-CC(3,5))./YCoeffZ(5);
% cn(nn+1,5)=(abs(rho_z(nn+1,4))).^(1/4);
% cn(nn+1,5)=cn(nn+1,5).*sign(rho_z(nn+1,4));
% %ccn(nn+1,5)=sqrt(1-cn(nn+1,5).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
% end
cnSqrSum=0;
for nn=1:NDims
%ccn0(nn+1,5)=cn(nn+1,5).^2;
cnSqrSum=cnSqrSum+cn(nn+1,5).*cn(nn+1,5);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,5)=ccn0(nn+1,5)+2*cn(nn+1,5).*cn(mm+1,5).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,5).*cn(mm+1,5).*rhoxx(nn,mm,5);
end
end
%ccn(nn+1,5)=sqrt(1-ccn0(nn+1,5));
end
if(cnSqrSum>.995)
cn(2:NDims+1,5)=cn(2:NDims+1,5)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,5)=sqrt(1-cnSqrSum);
%ccn(1,5)=sqrt(1-cn(1,5).^2);
%Cn(1,5)=cn(1,5).*YCoeffZ(5);
cn
%ccn
str=input("Compare the Fifth Element From NDim---2");
%CC(3,4)=YCoeffZ(6).*(10*cn(6).^3.*dn(6).^2*zeta^2);
%CC(5,4)=YCoeffZ(8).*(35*cn(8).^3.*dn(8).^4.*zeta^4);
% cnSqrSum=0;
% for nn=1:NDims
% CC(5,4)=YCoeffZ(8).*(35*cn(nn+1,8).^3.*ccn(nn+1,8).^4);
% CC(3,4)=YCoeffZ(6).*(10*cn(nn+1,6).^3.*ccn(nn+1,6).^2);
% rho_z(nn+1,3)=(c(nn+1,4)-3*CC(5,4)-CC(3,4))./YCoeffZ(4);
% cn(nn+1,4)=(abs(rho_z(nn+1,3))).^(1/3);
% cn(nn+1,4)=cn(nn+1,4).*sign(rho_z(nn+1,3));
% %ccn(nn+1,4)=sqrt(1-cn(nn+1,4).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
% end
cnSqrSum=0;
for nn=1:NDims
% ccn0(nn+1,4)=cn(nn+1,4).^2;
cnSqrSum=cnSqrSum+cn(nn+1,4).*cn(nn+1,4);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,4)=ccn0(nn+1,4)+2*cn(nn+1,4).*cn(mm+1,4).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,4).*cn(mm+1,4).*rhoxx(nn,mm,4);
end
end
%ccn(nn+1,4)=sqrt(1-ccn0(nn+1,4));
end
if(cnSqrSum>.995)
cn(2:NDims+1,4)=cn(2:NDims+1,4)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,4)=sqrt(1-cnSqrSum);
%ccn(1,4)=sqrt(1-cn(1,4).^2);
%Cn(1,4)=cn(1,4).*YCoeffZ(4);
cn
%ccn
str=input("Compare the Fourth Element From NDim---2");
%CC(3,3)=YCoeffZ(5).*(6* cn(5).^2.* dn(5).^2);
%CC(5,3)=YCoeffZ(7).*(15*cn(7).^2.*dn(7).^4);
% cnSqrSum=0;
% for nn=1:NDims
% CC(3,3)=YCoeffZ(5).*(6*cn(nn+1,5).^2.*ccn(nn+1,5).^2);
% CC(5,3)=YCoeffZ(7).*(15*cn(nn+1,7).^2.*ccn(nn+1,7).^4);
% rho_z(nn+1,2)=(c(nn+1,3)-3*CC(5,3)-CC(3,3))./YCoeffZ(3);
% cn(nn+1,3)=(abs(rho_z(nn+1,2))).^(1/2);
% cn(nn+1,3)=cn(nn+1,3).*sign(rho_z(nn+1,2));
% %ccn(nn+1,3)=sqrt(1-cn(nn+1,3).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
% end
cnSqrSum=0;
for nn=1:NDims
%ccn0(nn+1,3)=cn(nn+1,3).^2;
cnSqrSum=cnSqrSum+cn(nn+1,3).*cn(nn+1,3);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,3)=ccn0(nn+1,3)+2*cn(nn+1,3).*cn(mm+1,3).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,3).*cn(mm+1,3).*rhoxx(nn,mm,3);
end
end
%ccn(nn+1,3)=sqrt(1-ccn0(nn+1,3));
end
if(cnSqrSum>.995)
cn(2:NDims+1,3)=cn(2:NDims+1,3)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
cn(1,3)=sqrt(1-cnSqrSum);
%ccn(1,3)=sqrt(1-cn(1,3).^2);
%Cn(1,3)=cn(1,3).*YCoeffZ(3);
cn
%ccn
str=input("Compare the Third Element From NDim---2");
%CC(7,2)=YCoeffZ(8).*(7*cn(8).*dn(8).^6*zeta^6);
%CC(5,2)=YCoeffZ(6).*(5*cn(6).*dn(6).^4.*zeta^4);
%CC(3,2)=YCoeffZ(4).* (3.* cn(4).* dn(4).^2.* zeta^2);
% cnSqrSum=0;
% for nn=1:NDims
% CC(4,2)=YCoeffZ(4).*(3*cn(nn+1,4).*ccn(nn+1,4).^2);
% CC(6,2)=YCoeffZ(6).*(5*cn(nn+1,5).*ccn(nn+1,6).^4);
% CC(8,2)=YCoeffZ(8).*(7*cn(nn+1,8).*ccn(nn+1,8).^6);
% rho_z(nn+1,1)=(c(nn+1,2)-15*CC(8,2)-3*CC(6,2)-CC(4,2))./YCoeffZ(2);
% cn(nn+1,2)=(abs(rho_z(nn+1,1)));
% %ccn(nn+1,2)=sqrt(1-cn(nn+1,2).^2);
% %cnSqrSum=cnSqrSum+cn(7,nn+1).^2;
% end
cnSqrSum=0;
for nn=1:NDims
% ccn0(nn+1,2)=cn(nn+1,2).^2;
cnSqrSum=cnSqrSum+cn(nn+1,2).*cn(nn+1,2);
for mm=1:NDims
if(nn~=mm)
% ccn0(nn+1,2)=ccn0(nn+1,2)+2*cn(nn+1,2).*cn(mm+1,2).*CorrXX1st(nn,mm);
cnSqrSum=cnSqrSum+cn(nn+1,2).*cn(mm+1,2).*rhoxx(nn,mm,2);
end
end
% ccn(nn+1,2)=sqrt(1-ccn0(nn+1,2));
end
if(cnSqrSum>.995)
cn(2:NDims+1,2)=cn(2:NDims+1,2)*sqrt(.995)/sqrt(cnSqrSum);
cnSqrSum=.995;
end
if(cnSqrSum<.01)
cn(2:NDims+1,2)=cn(2:NDims+1,2)*sqrt(.01)/sqrt(abs(cnSqrSum))/sign(cnSqrSum);
cnSqrSum=.01;
end
cn(1,2)=sqrt(1-cnSqrSum);
%ccn(1,2)=sqrt(1-cn(1,2).^2);
%Cn(1,2)=cn(1,2).*YCoeffZ(2);
cn
%ccn
str=input("Compare the Second Element From NDim---2");
%
% %CC(3,1)=YCoeffZ(2).*(ccn(nn+1,2).^2);
% %CC(5,1)=YCoeffZ(4).*(ccn(nn+1,4).^4);
% %CC(7,1)=YCoeffZ(6).*(ccn(nn+1,6).^6);
% CC(3,1)=YCoeffZ(2).*(cn(1,2).^2);
% CC(5,1)=YCoeffZ(4).*(cn(1,4).^4);
% CC(7,1)=YCoeffZ(6).*(cn(1,6).^6);
%
%
%
%
%
% cn(1,1)=(YCoeffZ(1)-CC(3,1)-3*CC(5,1)-15*CC(7,1))./YCoeffZ(1);
%
%
% cn
% ccn
% str=input("Look at coefficients cn----PleASE lOOK");
%
%
dn(1:Order+1)=cn(1,1:Order+1);
% bn(1:Order+1)=ccn(1,1:Order+1);
%
%
%
%
end
.
.
.
.
function [cnOptim] = OptimizeCorrFromHermitesNewton(Zy,Zx,cnn,HCorrXX,NDims,paths,Order)
%Order;Max Order of Hermites Calibration is seven.
%Zx is paths X K array for joint values of Zx arranged for "paths" number of observations
%Zy is paths X 1 array for Zy associated with each obsewrvation.
%cnn is the original input of correlation coefficients used to derive seed for Newton methjod.
%cnn is in format of the old program and its order and indexing is changed
%in this NEwton program.
ccn(1:NDims+1,1:Order)=cnn(1:NDims+1,2:Order+1); %Shift the indices back by one index.
%so that index matches with order of associated hermite polynomial.
cn(1:NDims,1:Order)=ccn(2:NDims+1,1:Order);%The first row in each hermite column earlier was
%associated zeta but zeta is shifted from first row to (K+1)th row.
cn(NDims+1,1:Order)=ccn(1,1:Order);
% cn(1:NDims+1,1:Order)=1/(NDims+1);
%
% for nn=1:NDims
% cn(nn,1:Order)=cn(nn,1:Order)+sum(HCorrXX(nn,:,1));
% end
%The function below calculates the first hermites till "Order" from data of
%Zy. WHy is (paths X K) array. kth hermite associated with pth observation appears in
%WHy(p,k)
[WHy] = EvalHermiteArrayH1(Zy,Order);
%The program below calculates moments of standard normal. Odd moments are
%zero.
[EZ] = EZZ2();
%The loop below repeats itself for optimization of correlation coefficients
%associated with highest power in each hermite. It repeatrs over all hermites one by one.
for nH=1:Order
cnIn(1:NDims+1,1:nH)=0.0;
if(nH==1)
cnIn(1:NDims+1,1)=cn(1:NDims+1,1);
else
%cnOptim is already optimized value of lower powers of Gaussians
%calculated in earlier loops of optimization over smaller hermites.
%This is already known from previous iterations of this loop.
cnIn(1:NDims+1,1:nH-1)=cnOptim(1:NDims+1,1:nH-1);
%The value of cnIn below is initial guess for correlation
%coefficients associated with optimization of current hermite
cnIn(1:NDims+1,nH)=cn(1:NDims+1,nH);
end
%Below nH-th hermite observation values are assigned to one dimensional array for optimization target in Newton.
WHyn(1:paths,1)=WHy(1:paths,nH);
%Total iterations of Newton root search.
Iterations=500;
%Below is the function that actually does the Multi-dimensional Newton.
[cnbest,InitialObj(nH),FinalObj(nH)] = OptimizenthHermiteGaussianWithNewton(cnIn,Zx,WHyn,HCorrXX,nH,EZ,NDims,paths, Iterations);
%Below is optimum value of correlation coefficients associated with
%nH-th hermite after optimization. This will be used by the program as
%an input to optimization of higher hermites
cnOptim(1:NDims+1,nH)=cnbest(1:NDims+1,1);
nH
end
cnOptim
InitialObj %Obj function at start of optimization of correlation coefficients for nH-th hermite
FinalObj%Obj function after optimization of correlation coefficients for nH-th hermite
str=input("Look at initial and Final Objs");
end
.
.
.
.
function [bnbest,InitialObj,FinalObj] = OptimizenthHermiteGaussianWithNewton(cn,Zx,WHyn,HCorrXX,nH,EZ,NDims,paths,Iterations)
%Why0 in array of nth Hermite Values
KK=NDims;
bn(1:NDims+1,1)=cn(1:NDims+1,nH);
%Below, Calculate the model contribution of lower Gaussian powers that have
%already been calculated through associated lower hermites towards current
%hermite polynomial.
[dHermite] = EvaluatePrevGaussPowersForHCorrs(nH,cn,Zx,NDims,paths,EZ);
%Remove the model contribution of lower Gaussian powers from data value of
%current hermite.
WHy0=WHyn+dHermite;
%Below calcualte variance
var=0.0;
for kk1=1:KK
for kk2=1:KK
var=var+bn(kk1,1).*bn(kk2,1).*sign(HCorrXX(kk1,kk2,nH)).*(abs(HCorrXX(kk1,kk2,nH)));%.^(1/nH);%Changed.
end
end
var=var+bn(KK+1,1).^2;
bn
var
%Below, make sure that variance is one.
bn(:,1)=bn(:,1)/sqrt(var);
str=input("have reached 1st Stone")
%Below calculate the combined value of K correlated variables as described
%on Wilmott post and Calculate G.
GG1(1:paths,1)=0.0;
for kk=1:KK
GG1(1:paths,1)=GG1(1:paths,1)+bn(kk,1).*Zx(1:paths,kk);
end
Zeta0=bn(KK+1,1);
%Evaluate the nHth Gaussian power below.
[GaussPH,GaussPh] = EvaluateHermitePolyForGaussCorrs(GG1,Zeta0,EZ,nH,paths);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Starting ObjBest and calculations here
%cnbest here
bnbest(1:NDims+1,1)=bn(1:NDims+1);
ObjSqrdBestNewton=sum((GaussPH(:,1)-WHy0(:,1)).^2)/paths;
InitialObj=ObjSqrdBestNewton;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%Below, enter the Newton loop.
StallCount=0;
iter=0;
Mul=.1;
while ((iter < Iterations) &&(StallCount<=5))
iter=iter+1;
dGG1(1:paths,1:NDims)=0.0;
for kk=1:KK
dGG1(1:paths,kk)=Zx(1:paths,kk);
end
bn=bnbest;
GG1(1:paths,1)=0.0;
for kk=1:KK
GG1(1:paths,1)=GG1(1:paths,1)+bn(kk,1).*Zx(1:paths,kk);
end
Zeta0=bn(KK+1,1);
bbn=0;
bbn(1:NDims,1)=bn(1:NDims,1);
[GaussPH,GaussPh,DGaussPH] = EvaluateHermitePolyAndDerivsForGaussCorrs(GG1,dGG1,Zeta0,EZ,nH,NDims,paths);
%size(DGaussPH')
%size(DGaussPH)
%size(GaussPH)
%size(WHy0(:,1))
%str=input("Look at sizes");
%I am using a multiple of .1 in Newton equation below. this might have
%to be further decreased for some cases. Below is the Newton
%over-constrained iteration.
bbn=bbn+Mul*((DGaussPH'*DGaussPH)\(DGaussPH'*(WHy0(:,1)-GaussPH)));
%DGaussPH'*DGaussPH
%str=input("Look at matrix product");
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Midfunction ObjBest and calculations here
%cnbest here
var=0.0;
for kk1=1:KK
for kk2=1:KK
var=var+bbn(kk1,1).*bbn(kk2,1).*sign(HCorrXX(kk1,kk2,nH)).*(abs(HCorrXX(kk1,kk2,nH)));%.^(1/nH);%changed
end
end
if(var>.9925)
bbn(:,1)=bbn(:,1)/sqrt(var)*sqrt(.9925);
var=.9925;
end
bbn(KK+1,1)=sqrt(1-var);
var=var+bbn(KK+1,1).^2;
bn
bbn
var
bbn=bbn/sqrt(var);
GG1(1:paths,1)=0.0;
for kk=1:KK
GG1(1:paths,1)=GG1(1:paths,1)+bbn(kk,1).*Zx(1:paths,kk);
end
Zeta0=bbn(KK+1,1);
[GaussPH,GaussPh] = EvaluateHermitePolyForGaussCorrs(GG1,Zeta0,EZ,nH,paths);
ObjSqrdNewton=sum((GaussPH(:,1)-WHy0(:,1)).^2)/paths;
ObjSqrdBestNewton
if(ObjSqrdNewton<ObjSqrdBestNewton)
if((ObjSqrdBestNewton-ObjSqrdNewton)/ObjSqrdBestNewton<.00001)
StallCount=StallCount+1;
Mul=Mul*.75
end
ObjSqrdBestNewton=ObjSqrdNewton;
bnbest=bbn;
else
StallCount=StallCount+1;
%%%%change-step or Newton parameters
end
ObjSqrdBestNewton
ObjSqrdNewton
bnbest
iter
%str=input("Look at the solution");
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
end
FinalObj=ObjSqrdBestNewton;
end
.
.
.
You think life is a secret, Life is only love of flying, It has seen many ups and downs, But it likes travel more than the destination. Allama Iqbal