InitApproximation: Array;
InitApproximation: System.Array;
Свойство InitApproximation определяет начальные приближения.
Индексация массива начальных приближений должна начинаться с нуля.
Свойство актуально, если ISmLinearEquations.SLEMethod = SLEMethodType.ConjugateGradient.
Добавьте ссылку на системную сборку Stat.
Sub UserProc;
Var
Method: ISmLinearEquations;
ExplainedVal, Exp1, Exp2: Array[2] Of Double;
ExplanatoriesVal: ISlSeries;
Init: Array[2] Of Double;
Status, i: Integer;
Estimate: Array Of Double;
Begin
Method := New SmLinearEquations.Create;
// Значения объясняемого ряда
ExplainedVal[00] := 5;
ExplainedVal[01] := 8;
Method.Explained.Value := ExplainedVal;
// Значения объясняющих рядов
ExplanatoriesVal := Method.Explanatories;
Exp1[00] := 3; Exp2[00] := 2;
Exp1[01] := 2; Exp2[01] := 1;
ExplanatoriesVal.Add.Value := Exp1;
ExplanatoriesVal.Add.Value := Exp2;
// Параметры периода идентификации:
Method.ModelPeriod.FirstPoint := 1;
Method.ModelPeriod.LastPoint := 2;
// Параметры коэффициентов модели:
Method.ModelCoefficients.Intercept.Mode := InterceptMode.None;
// Значения начальных приближений:
Init[0] := 0;
Init[1] := 2;
Method.InitApproximation := Init;
// Точность и максимальное число итераций:
Method.Tolerance := 0.00001;
Method.MaxIteration := 500;
// Метод решения системы линейных уравнений:
Method.SLEMethod := SLEMethodType.ConjugateGradient;
// Приведение системы линейных уравнений к эквивалентной:
Method.SymmetricMatrixSet := True;
// Расчёт модели:
Status := Method.Execute;
Debug.WriteLine(Method.Errors);
Debug.WriteLine("=== Оцененные значения коэффициентов ===");
Estimate := Method.ModelCoefficients.Coefficients.Estimate;
For i := 0 To Estimate.Length - 1 Do
Debug.WriteLine((i+1).ToString + ". " + Estimate[i].ToString);
End For;
End Sub UserProc;
После выполнения примера, в окно консоли будут выведены оцененные значения коэффициентов.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
Method: ISmLinearEquations;
ExplainedVal, Exp1, Exp2: Array[2] Of Double;
ExplanatoriesVal: ISlSeries;
Init: Array[2] Of Double;
Status, i: Integer;
Estimate: System.Array;
Begin
Method := New SmLinearEquations.Create();
// Значения объясняемого ряда
ExplainedVal[00] := 5;
ExplainedVal[01] := 8;
Method.Explained.Value := ExplainedVal;
// Значения объясняющих рядов
ExplanatoriesVal := Method.Explanatories;
Exp1[00] := 3; Exp2[00] := 2;
Exp1[01] := 2; Exp2[01] := 1;
ExplanatoriesVal.Add().Value := Exp1;
ExplanatoriesVal.Add().Value := Exp2;
// Параметры периода идентификации:
Method.ModelPeriod.FirstPoint := 1;
Method.ModelPeriod.LastPoint := 2;
// Параметры коэффициентов модели:
Method.ModelCoefficients.Intercept.Mode := InterceptMode.imNone;
// Значения начальных приближений:
Init[0] := 0;
Init[1] := 2;
Method.InitApproximation := Init;
// Точность и максимальное число итераций:
Method.Tolerance := 0.00001;
Method.MaxIteration := 500;
// Метод решения системы линейных уравнений:
Method.SLEMethod := SLEMethodType.slemtConjugateGradient;
// Приведение системы линейных уравнений к эквивалентной:
Method.SymmetricMatrixSet := True;
// Расчёт модели:
Status := Method.Execute();
System.Diagnostics.Debug.WriteLine(Method.Errors);
System.Diagnostics.Debug.WriteLine("=== Оцененные значения коэффициентов ===");
Estimate := Method.ModelCoefficients.Coefficients.Estimate;
For i := 0 To Estimate.Length - 1 Do
System.Diagnostics.Debug.WriteLine((i+1).ToString() + ". " + Estimate[i].ToString());
End For;
End Sub;
См. также: