ISmExpressionProvider.Metabase

Синтаксис Fore

Metabase: Object;

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

Metabase: object;

Описание

Свойство Metabase определяет репозиторий, в котором будет происходить поиск пользовательского модуля, используемого в выражении.

Комментарии

Данное свойство актуально для статистических методов, в которых можно задавать выражения:

Пример Fore

Для выполнения примера в репозитории необходимо наличие модуля с идентификатором «STAT_FUNC», содержащего пользовательскую функцию «test».

Добавьте ссылки на системные сборки: Metabase, Stat.

Sub UserProc;
Var
    sm: SmNonLinearEquations;
    functions: array[
2Of string;
    initvalues: array[
2Of double;
    status: integer;
    provider: ISmExpressionProvider;
Begin
    sm := 
New SmNonLinearEquations.Create;
    provider := sm 
As ISmExpressionProvider;
    
// Получаем текущий репозиторий для поиска пользовательского модуля
    provider.Metabase := MetabaseClass.Active;
    
// Задаем выражения уравнений
    functions[0] := "y1+12.34-0.21*134";
    
// Передаем в выражение уравнения пользовательскую функцию
    functions[1] := "STAT_FUNC.test(y1,y2)";
    sm.Functions := functions;
    initvalues[
0] := 1;
    initvalues[
1] := 1;
    
// Определяем начальные приближения
    sm.InitApproximation := initvalues;
    
// Определяем порядок коэффициентов
    sm.CoefficientsOrder := "y1;y2";
    
// Проверяем на наличие ошибок
    status := sm.Execute;
    debug.WriteLine(status);
    debug.WriteLine(sm.Errors);
    
If (status = 0Then
        debug.WriteLine(sm.Solution[
0].tostring);
        debug.WriteLine(sm.Solution[
1].tostring);
        debug.WriteLine(sm.FunctionValues[
0].tostring);
        debug.WriteLine(sm.FunctionValues[
1].tostring);
    
End If;
End Sub UserProc;

 

// Пользовательская функция
Public Function test(x1, x2: double): double;
Begin
    Return x1 * (x2 - 1);
End Function test;

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

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Stat;

Public
 Shared Sub Main(Params: StartParams);
Var
    sm: SmNonLinearEquations;
    functions: array[2Of string;
    initvalues: array[2Of double;
    status: integer;
    provider: ISmExpressionProvider;
    Sol, Func: System.Array;
Begin
    sm := New SmNonLinearEquations.Create();
    provider := sm As ISmExpressionProvider;
    // Получаем текущий репозиторий для поиска пользовательского модуля
    provider.Metabase := Params.Metabase;
    // Задаем выражения уравнений
    functions[0] := "y1+12.34-0.21*134";
    // Передаем в выражение уравнения пользовательскую функцию
    functions[1] := "STAT_FUNC.test(y1,y2)";
    sm.Functions := functions;
    initvalues[0] := 1;
    initvalues[1] := 1;
    // Определяем начальные приближения
    sm.InitApproximation := initvalues;
    // Определяем порядок коэффициентов
    sm.CoefficientsOrder := "y1;y2";
    // Выполняем расчет
    status := sm.Execute();
    System.Diagnostics.debug.WriteLine(status);
    System.Diagnostics.debug.WriteLine(sm.Errors);
    If (status = 0Then
        Sol := sm.Solution;
        Func := sm.FunctionValues;
        System.Diagnostics.debug.WriteLine(Sol[0].ToString());
        System.Diagnostics.debug.WriteLine(Sol[1].ToString());
        System.Diagnostics.debug.WriteLine(Func[0].ToString());
        System.Diagnostics.debug.WriteLine(Func[1].ToString());
    End If;
End Sub;

См. также:

ISmExpressionProvider