ISmDerivative.CoefficientsOrder

Синтаксис Fore

CoefficientsOrder: String;

Синтаксис Fore.NET

CoefficientsOrder: string;

Описание

Свойство CoefficientsOrder определяет переменные, используемые в функции.

Комментарии

Функцию определяет свойство ISmDerivative.Expression.

Пример Fore

Для выполнения примера добавьте ссылку на системную сборку «Stat».

Sub UserProc;
Var
    AnDeriv: ISmDerivative;
    ArgVals: Array[0..3Of 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;

После выполнения примера в окно консоли будут выведены результаты вычисления функции с помощью аналитических производных и с помощью приближенных значений частных производных.

Пример Fore.NET

Imports Prognoz.Platform.Interop.Stat;

Public Shared Sub Main(Params: StartParams);
Var
    AnDeriv: ISmDerivative;
    ArgVals: Array[0..3Of 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;

После выполнения примера в окно консоли будут выведены результаты вычисления функции с помощью аналитических производных и с помощью приближенных значений частных производных.

См. также:

ISmDerivative