CoefficientsOrder: String;
CoefficientsOrder: string;
Свойство CoefficientsOrder определяет переменные, используемые в функции.
Функцию определяет свойство ISmDerivative.Expression.
Для выполнения примера добавьте ссылку на системную сборку «Stat».
Sub UserProc;
Var
AnDeriv: ISmDerivative;
ArgVals: Array[0..3] Of Double;
i, res, size: Integer;
Begin
AnDeriv := New SmDerivative.Create;
// Задаём выражение
для дифференцирования
AnDeriv.Expression := "A1 + A2 * A2 + A3 * A3 * A2";
// Указываем порядок переменных
AnDeriv.CoefficientsOrder := "A1;A2;A3;A4";
// Задаём переменные дифференцирования
AnDeriv.DiffVariables := "A2;A1";
// Задаём значения переменных
ArgVals[0] := 1.5;
ArgVals[1] := 2.0;
ArgVals[2] := 2.5;
ArgVals[3] := Double.Nan;
AnDeriv.VariablesValues := ArgVals;
// Указываем, что рассчитываются аналитические производные
AnDEriv.UseAnalyticCalc := True;
res := AnDeriv.Execute;
// Выводим результаты расчёта
Debug.WriteLine("Статус выполнения: " + res.ToString);
Debug.WriteLine(AnDeriv.Errors);
For i := 0 To AnDeriv.Warnings.Length - 1 Do
Debug.WriteLine(AnDeriv.Warnings[i]);
End For;
If res = 0 Then
Debug.WriteLine("== Аналитические производные ==");
size := AnDeriv.DerivativeExpressions.Length;
For i := 0 To size - 1 Do
Debug.Write(" - выражение производной: ");
Debug.WriteLine(AnDeriv.DerivativeExpressions[i]);
Debug.Write(" - значение производной: ");
Debug.WriteLine(AnDeriv.DerivativeValues[i]);
Debug.WriteLine("");
End For;
Debug.WriteLine("Значение функции: " + Anderiv.FunctionValue.ToString);
End If;
Debug.WriteLine("");
// Указываем, что рассчитываются приближенные значения частных производных
AnDEriv.UseAnalyticCalc := False;
// Задаём приращение аргумента
AnDEriv.Increment := 0.00000003;
res := AnDeriv.Execute;
// Выводим результаты расчёта
Debug.WriteLine("Статус выполнения: " + res.ToString);
Debug.WriteLine(AnDeriv.Errors);
For i := 0 To AnDeriv.Warnings.Length - 1 Do
Debug.WriteLine(AnDeriv.Warnings[i]);
End For;
If res = 0 Then
Debug.WriteLine("== Приближенные значения частных производных ==");
size := AnDeriv.DerivativeValues.Length;
For i := 0 To size - 1 Do
Debug.WriteLine(AnDeriv.DerivativeValues[i]);
End For;
Debug.WriteLine("Значение функции: " + Anderiv.FunctionValue.ToString);
End If;
End Sub UserProc;
После выполнения примера в окно консоли будут выведены результаты вычисления функции с помощью аналитических производных и с помощью приближенных значений частных производных.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
AnDeriv: ISmDerivative;
ArgVals: Array[0..3] Of Double;
i, res, size: Integer;
Begin
AnDeriv := New SmDerivative.Create();
// Задаём выражение
для дифференцирования
AnDeriv.Expression := "A1 + A2 * A2 + A3 * A3 * A2";
// Указываем порядок переменных
AnDeriv.CoefficientsOrder := "A1;A2;A3;A4";
// Задаём переменные дифференцирования
AnDeriv.DiffVariables := "A2;A1";
// Задаём значения переменных
ArgVals[0] := 1.5;
ArgVals[1] := 2.0;
ArgVals[2] := 2.5;
ArgVals[3] := Double.Nan;
AnDeriv.VariablesValues := ArgVals;
// Указываем, что рассчитываются аналитические производные
AnDEriv.UseAnalyticCalc := True;
res := AnDeriv.Execute();
// Выводим результаты расчёта
System.Diagnostics.Debug.WriteLine("Статус выполнения: " + res.ToString());
System.Diagnostics.Debug.WriteLine(AnDeriv.Errors);
For i := 0 To AnDeriv.Warnings.Length - 1 Do
System.Diagnostics.Debug.WriteLine(AnDeriv.Warnings.GetValue(i));
End For;
If res = 0 Then
System.Diagnostics.Debug.WriteLine("== Аналитические производные ==");
size := AnDeriv.DerivativeExpressions.Length;
For i := 0 To size - 1 Do
System.Diagnostics.Debug.Write(" - выражение производной: ");
System.Diagnostics.Debug.WriteLine(AnDeriv.DerivativeExpressions.GetValue(i));
System.Diagnostics.Debug.Write(" - значение производной: ");
System.Diagnostics.Debug.WriteLine(AnDeriv.DerivativeValues.GetValue(i));
System.Diagnostics.Debug.WriteLine("");
End For;
System.Diagnostics.Debug.WriteLine("Значение функции: " + Anderiv.FunctionValue.ToString());
End If;
System.Diagnostics.Debug.WriteLine("");
// Указываем, что рассчитываются приближенные значения частных производных
AnDEriv.UseAnalyticCalc := False;
// Задаём приращение аргумента
AnDEriv.Increment := 0.00000003;
res := AnDeriv.Execute();
// Выводим результаты расчёта
System.Diagnostics.Debug.WriteLine("Статус выполнения: " + res.ToString());
System.Diagnostics.Debug.WriteLine(AnDeriv.Errors);
For i := 0 To AnDeriv.Warnings.Length - 1 Do
System.Diagnostics.Debug.WriteLine(AnDeriv.Warnings.GetValue(i));
End For;
If res = 0 Then
System.Diagnostics.Debug.WriteLine("== Приближенные значения частных производных ==");
size := AnDeriv.DerivativeValues.Length;
For i := 0 To size - 1 Do
System.Diagnostics.Debug.WriteLine(AnDeriv.DerivativeValues.GetValue(i));
End For;
System.Diagnostics.Debug.WriteLine("Значение функции: " + Anderiv.FunctionValue.ToString());
End If;
End Sub;
После выполнения примера в окно консоли будут выведены результаты вычисления функции с помощью аналитических производных и с помощью приближенных значений частных производных.
См. также: