C#, Code Haishibei (43): código fuente de C# para el "método de bisección" de "raíz real de la ecuación no lineal"

utilizando el sistema;

 

espacio de nombres Zhou.CSharp.Algorithm
{     delegado público double delFunction_x(doble x);     delegado publico double delFunction_xa(doble[] x);     delegado publico double delFunction_x_y(doble x, doble y);     delegado público double delFunction_x_ya(doble x, doble[] y);     delegado público doble delFunction_xa_ya(doble[] x, doble[] y);




    /// <summary>
    /// Class NLEquations para resolver ecuaciones no lineales
    /// Original Zhou Changfa
    /// Adaptado a una profunda confusión
    /// </summary>
    public static parcial class NLEquations
    {         /// <summary>         /// Método de bisección para encontrar raíces reales de ecuaciones no lineales         /// </summary>         /// <param name="Func">Calcular la función del extremo izquierdo de la ecuación double Func(double x)</param>         /// <param name=" nNumRoots">El valor estimado del número de raíces reales en [xStart, xEnd]</param>         /// <param name="x">Array unidimensional, la longitud es m. regresa en el intervalo [xStart,









        /// <param name="eps">parámetro de control de precisión</param>
        /// <return>int type, el número de raíces reales obtenidas</return>
        public static int GetRootBisect(delFunction_x Func, int nNumRoots, double [ ] x, double xStart, double xEnd, double dblStep, double eps)
        {             int n, js;             double z, y, z1, y1, z0, y0;

            // El número de raíces se borra a 0
            n = 0;

            // busca desde el extremo izquierdo
            z = xStart,
            y = Func(z);

            // 循环求解
            while ((z <= xEnd + dblStep / 2.0) && (n != nNumRoots))
            {                 if (Math.Abs(y) < eps)                 {                     n = n + 1;                     x[n - 1] = z;                     z = z + dblPaso / 2.0;                     y = Func(z);                 }                 else                 {                     z1 = z + dblStep;                     y1 = Func(z1);










                    if (Math.Abs(y1) <eps)
                    {                         n = n + 1;                         x[n - 1] = z1;                         z = z1 + dblPaso / 2.0;                         y = Func(z);                     }                     más si (y * y1 > 0.0)                     {                         y = y1;                         z = z1;                     }                     más                     {                         js = 0;                         while (js == 0)                         {                             if (Math.Abs(z1 - z) <eps)
















                            {                                 norte = norte + 1;                                 x[n - 1] = (z1 + z) / 2.0;                                 z = z1 + dblPaso / 2.0; y = Func(z);                                 js = 1;                             }                             más                             {                                 z0 = (z1 + z) / 2.0;                                 y0 = Func(z0);                                 if (Math.Abs(y0) < eps)                                 {                                     x[n] = z0;                                     n = n + 1;













                                    js = 1;
                                    z = z0 + dblPaso / 2.0;
                                    y = Func(z);
                                }
                                más si ((y * y0) < 0.0)
                                {                                     z1 = z0;                                     y1 = y0;                                 }                                 más                                 {                                     z = z0;                                     y = y0;                                 }                             }









                        }
                    }             }
                }

            // Devuelve el número de raíces reales
            return (n);
        }
 

}

}

Supongo que te gusta

Origin blog.csdn.net/beijinghorn/article/details/131133578
Recomendado
Clasificación