示例#1
0
        /// <summary>ローゼンブロックの方程式を解くテスト</summary>
        public static void Test()
        {
            MultiRoot mRoots = new MultiRoot(MultiRoot.SolverType.ScalingHybrid, 2);

            //ローゼンブロックの方程式
            double a = 1;
            double b = 10;

            GSLFunctions.DArrayToDArray eFnc = delegate(double[] inputs, ref double[] outputs)
            {
                outputs[0] = a * (1 - inputs[0]);
                outputs[1] = b * (inputs[1] - inputs[0] * inputs[0]);
                return(GSLNET.ErrorNumber.GSL_SUCCESS);
            };

            //収束計算
            int iterNum;

            double[] initX = new double[] { -10, -5 };
            mRoots.Solve(eFnc, ref initX, 1.0e-7, 1.0e-7, 100, out iterNum);
            Console.WriteLine(initX[0] + " , " + initX[1]);

            mRoots.Solve(eFnc, ref initX, 1.0e-7, 100, out iterNum);
            Console.WriteLine(initX[0] + " , " + initX[1]);
        }
示例#2
0
        /// <summary>非線形最小二乗法テスト</summary>
        public void Test()
        {
            Multifit mFit = new Multifit(Multifit.SolverType.LevenbergMarquardtWithScaling, 40, 3);

            //学習データ作成
            double[] ops = new double[40];
            Random   rnd = new Random();

            //出力式
            GSLFunctions.DArrayToDArray fnc = delegate(double[] inputs, ref double[] outputs)
            {
                double a      = inputs[0];
                double lambda = inputs[1];
                double b      = inputs[2];
                for (int i = 0; i < outputs.Length; i++)
                {
                    double t  = i;
                    double yi = a * Math.Exp(-lambda * t) + b;
                    outputs[i] = yi - (1.0 + 5 * Math.Exp(-0.1 * t));
                }
                return(GSLNET.ErrorNumber.GSL_SUCCESS);
            };

            int iterNum;

            double[]           param = new double[] { 1, 0, 0 };
            GSLNET.ErrorNumber eNum  = mFit.Solve(fnc, ref param, 1e-5, 500, out iterNum);
            //メモリ解放
            mFit.Dispose();

            Console.WriteLine("終了");
            Console.Read();
        }