C#、貝殻を拾うコード海 (47) - 「非線形方程式の実根」の「二分法」の 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>
        /// 実係数を持つ代数方程式の根をすべて求める QR メソッド
        /// </summary>
        /// <param name="n">多項式の次数
        /// <param name= "dblCoef" >n 次の多項方程式の n+1 個の係数を降順で格納する、長さ n+1 の 1 次元配列</param> /// < param name="xr">次数を含む 1 次元
        配列長さ n、n ルートの実数部を返します</param>
        /// <param name="xi">長さ n の 1 次元配列、n ルートの虚数部を返します</param>
        /// < param name="nMaxIt ">反復回数</param>
        /// <param name="eps">精度制御パラメータ</param>
        /// <return>ブール型、解が成功したかどうか</return>
        public static bool GetRootQr(int n, double[] dblCoef, double[] xr, double[] xi, int nMaxIt,double eps)
        {             // 行列を初期化します             Matrix mtxQ = new Matrix();             mtxQ.Init(n, n);



            double[] q = mtxQ.GetData();

            //ハーシェンベルグ行列を構築
            for (int j = 0; j <= n - 1; j++)
            {                 q[j] = -dblCoef[n - j - 1] / dblCoef[n];             }             for (int j = n ; j <= n * n - 1; j++)             {                 q[j] = 0.0;             }             for (int i = 0; i <= n - 2; i++)             {                 q[(i + 1) * n + i] = 1.0;             }             // 方程式の解であるハーシェンベルグ行列の固有値と固有ベクトルを求めます             if (Matrix.ComputeEvHBerg(mtxQ, out xr, out xi, nMaxIt, eps))             {                 return true;             }             return false;         }

















 

}

}

おすすめ

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