C#、コード Haishibei (45) - 「非線形方程式の実根」の「Etkin 反復法」の C# ソース コード

 

システムを使用する;

名前空間 Zhou.CSharp.Algorithm
{     パブリック デリゲート double delFunction_x(double x);     パブリックデリゲートdouble delFunction_xa(double[] x);     パブリックデリゲートdouble delFunction_x_y(double x, double y);     パブリックデリゲートdouble delFunction_x_ya(double x, double[] y);     パブリックデリゲートdouble delFunction_xa_ya(double[] x, double[] y);




    /// <summary>
    /// 非線形方程式を解くためのクラス NLEquations
    /// Zhou Changfa
    /// 深い混乱に適応
    /// </summary>
    public static Partial class NLEquations
    {

        /// <summary>
        /// 非線形方程式の実根を求めるための Etkin 反復法
        /// 方程式の左辺の関数 f(x) を計算します double Func(double x)
        /// </summary >
        /// < param name="Func">方程式の左端関数を計算します</param>
        /// <param name="x">反復の初期値を入力し (解を推測し)、区間内に取得された実根</param>
        / // <param name="nMaxIt">再帰回数</param>
        /// <param name="eps">精度制御パラメータ</param>
        /// < return>Bool 型、解決が成功したかどうか</return>
        public static bool GetRootAitken(delFunction_x Func, ref double x, int nMaxIt, double eps)
        {             int flag, r;             double u, v, x0;

            // 解決条件
            r = 0;
            x0 = x;
            flag = 0;

            // 迭代求解
            while ((flag == 0) && (r != nMaxIt))
            {                 r = r + 1;                 u = 関数(x0);                 v = 関数(u);                 if (Math.Abs​​(u - v) < eps)                 {                     x0 = v;                     フラグ = 1;                 }                 else                 {                     x0 = v - (v - u) * (v - u) / (v - 2.0 * u + x0);                 }             }












            x = x0;

            // 指定された反復回数内で解の精度に達するかどうか
            return (nMaxIt > r);
        }
 

}

}

おすすめ

転載: blog.csdn.net/beijinghorn/article/details/131133635