C#,码海拾贝(47)——求“非线性方程实根”的“对分法”之C#源代码

using System;

namespace Zhou.CSharp.Algorithm
{
    public delegate double delFunction_x(double x);
    public delegate double delFunction_xa(double[] x);
    public delegate double delFunction_x_y(double x, double y);
    public delegate double delFunction_x_ya(double x, double[] y);
    public delegate double delFunction_xa_ya(double[] x, double[] y);

    ///


    /// 求解非线性方程组的类 NLEquations
    /// 原作 周长发
    /// 改编 深度混淆
    ///

    public static partial class NLEquations
    {

        ///


        /// 求实系数代数方程全部根的QR方法
        ///

        /// 多项式方程的次数
        /// 一维数组,长度为n+1,按降幂次序依次存放n次多项式方程的 n+1个系数
        /// 一维数组,长度为n,返回n个根的实部
        /// 一维数组,长度为n,返回n个根的虚部
        /// 迭代次数
        /// 精度控制参数
        /// bool 型,求解是否成功
        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;
        }
 

}

}

你可能感兴趣的:(C#数值计算,Numerical,Recipes,c#,数学建模,开发语言,算法,线性代数)