[Рефераты, сочинения, доклады, презентации ]

Метод Ньютона программа на C#

public double[] NewtonMethod()

        {

            betta = 0.5;

            int k = 0;

            double normo4ka;

            derF = new double[derFs.Length];

            p = new List<double[]>();

            do            {

                derF = derFunc(k);

                normo4ka = Norm(derF);

                if (normo4ka <= eps) break;

                H = new double[derFsMatrix.GetLength(0), derFsMatrix.GetLength(1)];

                Hinv = new double[derFsMatrix.GetLength(0), derFsMatrix.GetLength(1)];

                for (int i = 0; i < H.GetLength(0); i++)                {

                    for (int j = 0; j < H.GetLength(1); j++)                    {

                        H[i, j] = derFsMatrix[i, j](x[0]);

                        Hinv[i, j] = derFsMatrix[i, j](x[0]);                    }                }

                a = new Matrix(Hinv);

                double det = a.Det();

                if (det != 0)                {

                    a = a.Invert();

                    Hinv = a.mat;

                    Hinv = Ext.BigScalarMultiplay(Hinv, -1f);

                    p.Add(Ext.VecMat(Hinv, derF));                }

                else                {                    p.Add(Ext.ScalarMultiplay(derF, -1f));                }

                alpha = 1;

                delta = F(Ext.Plus(x[k], Ext.ScalarMultiplay(p[k], alpha))) - F(x[k]) - alpha / 2f * Ext.Multiplay(derF, p[k]);

                if (delta > 0) alpha *= betta;

                x.Add(Ext.Plus(x[k], Ext.ScalarMultiplay(p[k], alpha)));                k++;            }

            while (normo4ka > eps);

            FOpt = F(x[k]);            return x[k];        }