CoefficientsOrder: String;
CoefficientsOrder: string;
Свойство CoefficientsOrder определяет порядок коэффициентов.
Если коэффициентов несколько, то они указываются через точку с запятой «;».
Для выполнения примера добавьте ссылку на системную сборку «Stat».
Sub UserProc;
Var
Eqs: ISmNonLinearEquations;
Funcs: Array[0..2] Of String;
inits: Array[0..2] Of Double;
res, i: Integer;
Begin
Eqs := New SmNonLinearEquations.Create;
// Задаем нелинейные уравнения
funcs[0] := "X1-22+0.5*X2-X3";
funcs[1] := "X2-26.5+2*X1+0.5*X3";
funcs[2] := "X3+9-X1+6*X2";
Eqs.Functions := Funcs;
// Задаем порядок коэффициентов
Eqs.CoefficientsOrder := "X1;X2;X3";
// Задаем начальные приближения
inits[0] := 10; //x1
inits[1] := 0; //x2
inits[2] := -1; //x3
Eqs.InitApproximation := inits;
// Задаем метод решения системы
Eqs.MethodType := NonLinearEquationsType.HMethod;
// Выполняем расчет
res := Eqs.Execute;
If res <> 0 Then
Debug.WriteLine(Eqs.Errors);
// Выводим результаты расчета
Else
Debug.WriteLine("Решение: ");
Debug.Indent;
For i := 0 To Eqs.Functions.Length - 1 Do
Debug.WriteLine(i.ToString + ". " + Eqs.Solution[i].ToString);
End For;
Debug.Unindent;
Debug.WriteLine("Фактически использованные начальные приближения:");
Debug.Indent;
For i := 0 To Eqs.InitApproximationActual.Length - 1 Do
Debug.WriteLine(i.ToString + ". " + Eqs.InitApproximationActual[i].ToString);
End For;
Debug.Unindent;
End If;
End Sub UserProc;
После выполнения примера в окно консоли будет выведено решение для системы нелинейных уравнений и фактически использованные начальные приближения.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
Eqs: ISmNonLinearEquations;
Funcs: Array[0..2] Of String;
inits: Array[0..2] Of Double;
res, i: Integer;
Sol, InitApproxActual: System.Array;
Begin
Eqs := New SmNonLinearEquations.Create();
// Задаем нелинейные уравнения
funcs[0] := "X1-22+0.5*X2-X3";
funcs[1] := "X2-26.5+2*X1+0.5*X3";
funcs[2] := "X3+9-X1+6*X2";
Eqs.Functions := Funcs;
// Задаем порядок коэффициентов
Eqs.CoefficientsOrder := "X1;X2;X3";
// Задаем начальные приближения
inits[0] := 10; //x1
inits[1] := 0; //x2
inits[2] := -1; //x3
Eqs.InitApproximation := inits;
// Задаем метод решения системы
Eqs.MethodType := NonLinearEquationsType.nletHMethod;
// Выполняем расчет
res := Eqs.Execute();
If res <> 0 Then
System.Diagnostics.Debug.WriteLine(Eqs.Errors);
// Выводим результаты расчета
Else
System.Diagnostics.Debug.WriteLine("Решение: ");
System.Diagnostics.Debug.Indent();
Sol := Eqs.Solution;
For i := 0 To Eqs.Functions.Length - 1 Do
System.Diagnostics.Debug.WriteLine(i.ToString() + ". " + Sol[i].ToString());
End For;
System.Diagnostics.Debug.Unindent();
System.Diagnostics.Debug.WriteLine("Фактически использованные начальные приближения:");
System.Diagnostics.Debug.Indent();
InitApproxActual := Eqs.InitApproximationActual;
For i := 0 To InitApproxActual.Length - 1 Do
System.Diagnostics.Debug.WriteLine(i.ToString() + ". " + InitApproxActual[i].ToString());
End For;
System.Diagnostics.Debug.Unindent();
End If;
End Sub;
См. также: