public double StaticNS4FactorModelObjfun(double[] para)
        {
            var sns4factor = new StaticNS4FactorModel();

            sns4factor.beta1   = para[0];
            sns4factor.beta2   = para[1];
            sns4factor.beta3   = para[2];
            sns4factor.beta4   = para[3];
            sns4factor.lambda1 = para[4];
            sns4factor.lambda2 = para[5];
            sns4factor.tau     = maturities;
            var modelyields = sns4factor.GetYield();
            var error       = 0.0;

            if (checkpara(sns4factor) == false)
            {
                error = 9999999999999999.99;
            }
            else
            {
                for (int i = 0; i < yields.Length; i++)
                {
                    var temperror = (modelyields[i] - yields[i]);
                    error = error + temperror * temperror;
                }
            }
            return(error);
        }
        public bool checkpara(StaticNS4FactorModel n4factor)
        {
            var result = true;

            if (n4factor.beta1 + n4factor.beta2 <= 0)
            {
                result = false;
            }
            return(result);
        }
        public double[] CalculateModelOutput(double[] tau, double[] para)
        {
            var sns4factor = new StaticNS4FactorModel();

            sns4factor.beta1   = para[0];
            sns4factor.beta2   = para[1];
            sns4factor.beta3   = para[2];
            sns4factor.beta4   = para[3];
            sns4factor.lambda1 = para[4];
            sns4factor.lambda2 = para[5];
            sns4factor.tau     = tau;
            var modelyields = sns4factor.GetYield();

            return(modelyields);
        }