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);
        }