Основы современных компьютерных технологий

         

Функции-списки


Функции-списки позволяют задавать двуместные отношения между двумя списками значений, которые представляют область определения (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).


    Содержание раздела