Ниже приведен пример использования операции GetMs для расчёта уравнения. В запросе передаются: экземпляр открытого контейнера моделирования, шаблон расчёта уравнения и параметры выполнения операции. В ответе приходит экземпляр модели, содержащей уравнение с результатами расчёта.
Для выполнения примера уравнение должно рассчитываться методом «Фильтр Бакстера-Кинга».
{
"Envelope" :
{
"Body" :
{
"GetMs" :
{
"tMs" :
{
"id" : "S20!M!S!C1"
},
"tArg" :
{
"pattern" :
{
"obInst" : "false",
"all" : "false",
"item" :
{
"key" : "3317",
"model" :
{
"transform" :
{
"formulas" :
{
"method" : ""
}
}
}
}
},
"execParams" :
{
"k" : "0", "scenarioKeys" : "", "execMethod" : "true", "execEvaluateSeries" : "true", "execWeightsMatrix" : "true" } } } } } }
{
"Envelope" :
{
"Body" :
{
"GetMsResult" :
{
"id" :
{
"id" : "S20!M!S!C1"
},
"meta" :
{
"item" :
{
"k" : "3317",
"id" : "OBJ3317",
"n" : "MyInputVavable[t] = BandpassFilter(MyInputVavable[t], 3, 2.00, 8.00)",
"vis" : "1",
"type" : "Model",
"modelMd" :
{
"transform" :
{
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "BandpassFilter",
"method" :
{
"bandpassFilter" :
{
"missingData" :
{
"specifiedVector" : "",
"method" : "None",
"methodParameter" : "5",
"specifiedValue" : "0"
},
"width" : "3",
"frequencyLow" : "2.000000",
"frequencyHigh" : "8.000000",
"outputType" : "CycleSeries",
"explained" :
{
"slice" :
{
"k" : "0",
"id" : "261",
"n" : "MyInputVavable",
"vis" : "1",
"variableKey" : "3319",
"stubKey" : "2805",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "2818"
},
"variant" : "261"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
},
"lag" : "",
"key" : "0",
"termToText" : "{MyInputVavable[t]}",
"termToInnerText" : "@_3319:0[]",
"termInfo" :
{
"k" : "4294967295",
"lag" : "0",
"inversion" :
{
"type" : "None",
"lag" : "PrecidingValue",
"previousLag" : "-1",
"seasonality" : "None",
"dependence" : "Linear",
"K" : "3"
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
}
},
"weightsMatrix" :
{
"d" :
[
"0.774074",
"-0.201005",
"-0.135081",
"-0.050952"
]
},
"cycleTerm" :
{
"k" : "4294967295"
},
"nonCyclicalTerm" :
{
"k" : "4294967295"
}
},
"name" : "Y = BandpassFilter(X, 3, 2.00, 8.00)",
"evaluateSeries" :
{
"its" :
{
"Item" :
{
"scenarioKey" : "4294967295",
"fact" :
{
"d" :
[
"1.000000",
"-1.700000",
"7.200000",
"-1.000000",
"5.000000",
"0.200000",
"6.600000",
"-0.500000", "3.200000", "2.000000", "3.000000", "6.200000", "7.100000", "5.800000", "2.800000", "3.700000", "5.600000",
"3.200000",
"3.600000",
"8.000000",
"7.000000",
"NaN",
"NaN"
]
},
"modelling" :
{
"d" : [ "NaN", "NaN", "NaN", "-3.410946", "2.279158", "-2.504119", "4.010580", "-3.061676",
"0.552665", "-1.166081", "-0.987390", "1.409774", "2.009979", "0.724201", "-1.936608", "-0.585275", "1.380232", "-1.451977",
"NaN",
"NaN",
"NaN",
"NaN",
"NaN"
]
},
"residuals" :
{
"d" :
[ "NaN", "NaN", "NaN", "2.410946", "2.720842", "2.704119", "2.589420", "2.561676", "2.647335",
"3.166081", "3.987390", "4.790226", "5.090021", "5.075799", "4.736608", "4.285275", "4.219768", "4.651977", "NaN",
"NaN",
"NaN",
"NaN",
"NaN"
]
}
}
},
"dates" :
{
"it" : [ "1990A1", "1991A1", "1992A1", "1993A1", "1994A1", "1995A1", "1996A1", "1997A1",
"1998A1", "1999A1", "2000A1", "2001A1", "2002A1", "2003A1", "2004A1", "2005A1", "2006A1", "2007A1",
"2008A1", "2009A1", "2010A1", "2011A1", "2012A1", "2013A1", "2014A1", "2015A1", "2016A1", "2017A1",
"2018A1",
"2019A1",
"2020A1"
]
}
},
"inversionInfo" :
{
"type" : "None",
"lag" : "PrecidingValue",
"previousLag" : "-1", "seasonality" : "None", "dependence" : "Linear", "K" : "3" } }, "calendarLevel" : "Year", "outputSliceKey" : "0" } ]
} } }, "warnings" : "" } } } } } } }
Функция GetMsBpf рассчитывает указанное уравнение. Входные параметры: экземпляр контейнера моделирования; ключ рассчитываемого уравнения. В результате выполнения функция возвращает модель, содержащую рассчитанное уравнение. Результаты расчёта выводятся в окно консоли. Для вывода результатов используются вспомогательные процедуры: PrintArray, PrintSeries, описанные в разделе «Расчёт уравнения».
Для выполнения примера уравнение должно рассчитываться методом «Фильтр Бакстера-Кинга».
public static MsItem GetMsBpf(MsId ms, ulong eqKey)
{
var getMsOp = new GetMs();
// Задаем параметры выполнения операции
getMsOp.tMs = ms;
getMsOp.tArg = new GetMsArg()
{ // Задаем шаблон извлечения данных
pattern = new MsMdPattern()
{
obInst = false,
all = false,
item = new MsItemPattern()
{ // Указываем ключ рассчитываемого уравнения
key = eqKey,
model = new MsModelPattern()
{
transform = new MsFormulaTransformPattern()
{
formulas = new TsFormulaPattern()
{
method = new TsMethodPattern() { }
}
}
}
}
}, // Задаем параметры расчёта уравнения
execParams = new MsMdExecParams()
{
k = 0,
execMethod = true,
execEvaluateSeries = true,
execWeightsMatrix = true,
scenarioKeys = new long[] { }
}
};
// Создаем прокси-объект для выполнения операции
var somClient = new SomPortTypeClient();
GetMsResult getMsResult = somClient.GetMs(getMsOp);
MsItem model = getMsResult.meta.item;
// Выводим ошибки и предупреждения
MsModel eq = model.modelMd;
if (eq.warnings != null)
{
Console.WriteLine("-- Предупреждения --");
Console.WriteLine("".PadRight(3) + printArray(eq.warnings));
}
if (eq.error == null) //Проверяем, возникли ли ошибки при расчёте уравнения
{ // Уравнение рассчитано без ошибок
// Получаем результаты расчёта
TsFormula formula = eq.transform.formulas.its.GetValue(0) as TsFormula;
TsBandpassFilterMethod bpf = formula.method.bandpassFilter;
// Получаем матрицу весов и выводим в окно консоли
Console.WriteLine("-- Матрица весов --");
Console.WriteLine("".PadRight(3) + printArray(bpf.weightsMatrix));
// Получаем рассчитанные значения и выводим в окно консоли
MsEvaluateSeriesResult seriesRes = formula.method.evaluateSeries;
printSeries(seriesRes);
}
else // При расчёте уравнения возникли ошибки
{
Console.WriteLine("-- Ошибки --");
Console.WriteLine(eq.error);
}
// Возвращаем модель, содержащую уравнение
return model;
}
См. также:
GetMs: Операция | Фильтр Бакстера-Кинга
SOAP