Метод Ньютона программа на 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]; }