public double[] CalcualteModelOutput(double[] para) { var x10 = para[0]; var x20 = para[1]; var mu = para[2]; var rho12 = para[3]; var theta1 = para[4]; var theta2 = para[5]; var c1 = para[6]; var c2 = para[7]; var epsilon1 = para[8]; var epsilon2 = para[9]; var SV2Factor = new StaticVasicekTwoFactorModel(); SV2Factor.maturities = maturities; SV2Factor.x10 = x10; SV2Factor.x20 = x20; SV2Factor.mu = mu; SV2Factor.rho12 = rho12; SV2Factor.theta1 = theta1; SV2Factor.theta2 = theta2; SV2Factor.c1 = c1; SV2Factor.c2 = c2; SV2Factor.epsilon1 = epsilon1; SV2Factor.epsilon2 = epsilon2; var modelyields = SV2Factor.GetYields(); return(modelyields); }
private double StaticVasicekTwoFactorModelObj(double[] para) { var error = 0.0; var lowerbound = new double[10] { -14.99, -14.99, -14.99, -0.9999999, -4.99, -4.99, 0.0000001, 0.0000001, 0.0000001, 0.0000001 }; var upperbound = new double[10] { 14.99, 14.99, 14.99, 0.9999999, 4.99, 4.99, 4.99, 4.99, 14.99, 14.99 }; if (CheckStaticVasicekTwoFactorModelPara(para, lowerbound, upperbound) == false) { error = 99999999999999.99; } else { var x10 = para[0]; var x20 = para[1]; var mu = para[2]; var rho12 = para[3]; var theta1 = para[4]; var theta2 = para[5]; var c1 = para[6]; var c2 = para[7]; var epsilon1 = para[8]; var epsilon2 = para[9]; var SV2Factor = new StaticVasicekTwoFactorModel(); SV2Factor.maturities = maturities; SV2Factor.x10 = x10; SV2Factor.x20 = x20; SV2Factor.mu = mu; SV2Factor.rho12 = rho12; SV2Factor.theta1 = theta1; SV2Factor.theta2 = theta2; SV2Factor.c1 = c1; SV2Factor.c2 = c2; SV2Factor.epsilon1 = epsilon1; SV2Factor.epsilon2 = epsilon2; var modelyields = SV2Factor.GetYields(); for (int i = 0; i < modelyields.Length; i++) { error = error + (modelyields[i] - yields[i]) * (modelyields[i] - yields[i]); } } return(error); }