Функции-списки
Функции-списки позволяют задавать двуместные отношения между двумя списками значений, которые представляют область определения (domain) и область значений (range) функции-списка.
Области определения и значения функций-списков, тип соответствия между ними для каждой функции-списка задаются при описании вычислительной модели задачи на панели List Function Subsheet. Для вызова этой панели нужно па панели Function Sheet указать имя функции в поле Name, выбрать тип List в поле Туре и щелкнуть правой кнопкой мыши.
Допускается использование следующих типов соответствий в функциях-списках:
таблицы (тип функции fab/e, 1-1 соответствие);
интервалы (тип функции step, 1-N соответствие);
линейная интерполяция (тип функции linear);
кубическая интерполяция (тип функции cubic).
Список, задающий значения домена функции-списка, просматривается, начиная с головы, т.е. с первого элемента, и в качестве результата выдается первое встретившееся подходящее решение.
Все типы функций-списков являются одноместными и могут вызываться как процедуры с помощью CALL или использоваться в выражениях. Примеры обращения к функциям-спискам:
weight = PTE(element)
call PTE(element;weight)
elasticity = prop2( material)
density = air3(air1 (altitude)*air2(temperature))
Для функций-списков обязательным является соблюдение эквивалентности типов данных переменных, используемых при обращении к функции, и используемых в ее теле типов значений домена и диапазона. При этом имена списков для доменов и диапазонов, задаваемые в теле функции, могут совпадать с именами аргументов функции при обращении к ней.
344
Табличные функции-списки (тип функции table в поле Mapping) описывают бинарные таблицы. Элементами первого столбца (Domain) таблицы являются значения элементов списка, указанного в поле Domain List. Элементы второго столбца (Range) связаны со списком, указанным в поле Range List. Элементы списков могут принимать числовые или символьные значения. Ниже приведен текст табличной функции с именем country_capital, содержащей символьные данные.
=================== LIST FUNCTION: country_capital ===================
Comment: Определение столицы страны
Domain List: country
Mapping: table
Range List: capital
Element- Domain-------------------Range--------------
1 |
'Russia |
'Moscow |
2 |
'France |
'Paris |
3 |
'England |
'London |
Возможны следующие варианты обращения к функции:
cap = country_capital(ctry)
callcountry_capital(country;capital)
Интервальные функции-списки (типа step). В функциях данного типа интервалы между соседними элементами из списка-домена рассматриваются как шаги изменения значений элементов из списка-домена, значения элементов из списка-диапазона могут быть произвольными.
При обращении к такой функции значение аргумента должно принадлежать хотя бы одному из интервалов, образуемых парами соседних элементов из списка-диапазона. Если значение аргумента не равно ни одному из элементов интервала, то результатом функции будет значение элемента из списка-диапазона, соответствующего первому элементу интервала, которому принадлежит значение аргумента. Пример интервальной функции:
=================== LIST FUNCTION: xfourth =====================
Comment: четвертая степень х
Domain List: |
x |
Mapping: |
Step |
Range List: |
у |
Element --------- Domain -------------- Range ----------------
1 |
1 |
1 |
2 |
2 |
16 |
3 |
3 |
81 |
4 |
4 |
256 |
Если в модели есть предложение вида: у = xfourth(x) и х=2.5, то у примет значение, равное 16.
345
Функции-списки с линейной и кубической интерполяцией. Функции данного типа подобны интервальным функциям. Различие состоит в том, что в качестве результата выдается значение, полученное в качестве линейной (кубической) интерполяции интервала между соседними элементами списка-диапазона, который соответствует интервалу из списка-домена и в который попадает значение аргумента функции при обращении к ней.
Если бы для функции xfourth была бы использована линейная интерполяция, (в поле Mapping указать тип функции linear), то при обращении к ней с тем же значением аргумента х=2.5 результат получился бы равным 48.5, а если бы кубическая (в поле Mapping указать тип функции cubic), то результат получится равным 38.5.Из примера функции xfourth, а в ней заданы значения для функциональной зависимости у = хЛ4, видно, что целесообразно использовать для данного соответствия кубическую интерполяцию, так как при этом обеспечивается наибольшая точность вычислений (2.5Л4=39.0625).
Содержание раздела