В данном примере рассмотрено создание системы нелинейных уравнений:
X1-(1-0.2*X2-0.1*X3)
X2-(1.2-0.1*X1-0.2*X3)
X3-(0.8-0.1*X1-0.1*X2)
Система будет рассчитана модифицированным методом простых итераций с параметрами:
максимальное число итераций - 1000
точность решения - 0.00000000001
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
См. также: