Расчет системы нелинейных уравнений

В данном примере рассмотрено создание системы нелинейных уравнений:

Система будет рассчитана модифицированным методом простых итераций с параметрами:

Sub Main;

Var

Eqs: ISmNonLinearEquations;

Funcs: Array[3] Of String;

inits: Array[3] Of Double;

d: Double;

i, res: Integer;

Begin

Eqs := New SmNonLinearEquations.Create As ISmNonLinearEquations;

// Задаем уравнения

funcs[0] := "X1-(1-0.2*X2-0.1*X3)";

funcs[1] := "X2-(1.2-0.1*X1-0.2*X3)";

funcs[2] := "X3-(0.8-0.1*X1-0.1*X2)";

Eqs.Functions := Funcs;

// Задаем начальные приближения

inits[0] := -1000;

inits[1] := 120000;

inits[2] := 0.8;

Eqs.InitApproximation := inits;

// Задаем порядок коэффициентов

Eqs.CoefficientsOrder := "X1;X2;X3";

// Задаем максимальное число итераций, за которое должен осуществляться поиск решения

Eqs.MaxIteration := 1000;

// Задаем точность решения

Eqs.Tolerance := 0.00000000001;

// Задаем метод расчета системы

Eqs.MethodType := NonLinearEquationsType.IterationsMethod;

// Выполнение расчета

res := Eqs.Execute;

Debug.WriteLine(Eqs.Errors);

// Вывод результатов

If (res = 0) Then

For i := 0 To (Eqs.Solution.Length - 1) Do

d := Eqs.Solution[i];

Debug.WriteLine("Значение X" + (i + 1).ToString + ": " + d.ToString);

End For;

Debug.WriteLine("Значения функций:");

For i := 0 To Eqs.FunctionValues.Length - 1 Do

d := Eqs.FunctionValues[i];

Debug.WriteLine(Eqs.Functions[i] + " = " + d.ToString);

End For;

End If;

End Sub Main;

После выполнения примера будет создана система нелинейных уравнений. Затем она будет рассчитана с заданными параметрами. Результаты будут выведены в окно консоли:

Module execution started

Нет ошибок

Значение X1: 0.73717277486942689

Значение X2: 1.0010471204188958

Значение X3: 0.62617801047116783

Значения функций:

X1-(1-0.2*X2-0.1*X3) = 3.2285285556099552E-013

X2-(1.2-0.1*X1-0.2*X3) = 7.2164496600635175E-014

X3-(0.8-0.1*X1-0.1*X2) = 0

Module execution finished

См. также:

Примеры