Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

30. Mathematica. Изменение структуры списка




30. Mathematica. Изменение структуры списка

С помощью встроенных функций можно изменить структуру спи­ска: создать в списке дополнительный уровень или, наоборот, уменьшить уровень вложенности списка. Это достигается при помощи функций Par­tition и Flatten соответственно.

Функция Partition [list, п] разбивает список на подсписки длины п. Если число элементов не кратно п, то оставшиеся k < п элементов удаляется из списка. Использование функции с тремя аргументами Partition [list, n, d] разбивает список на подсписки длины п с отступом d от начала списка. Первый элемент k-того подсписка имеет номер (k-l)d + 1 в исходном списке и так далее. Таким образом, при d < п списки перекрываются, при d > п - элементы (п+1),... , d не включаются.

 

Partition [Range [20], 4, 6]

{{1, 2, 3, 4}, {7, 8, 9, 10}, {13, 14, 15, 16}} Partition[Range[20], 6, 4]

{{1, 2, 3, 4, 5, б}, {5, б, 7, 8, 9, 10}, {9, 10, 11, 12, 13, 14}, {13, 14, 15, 16, 17, 18}}

 

Функция Flatten [list, п] уменьшает количество уровней в списке. Она убирает головы List в списках от первого до n-го уровня включи­тельно.

 

Flatten[{l, {2, {3, 4, {5, 6}}}, {7, 8}}, 2]

{1, 2, 3, 4, {5, 6}, 7, 8}

 

Если указан третий аргумент Flatten [list, n, head], из всех подвыра­жений указанных уровней выбираются только выражения с головой head.

Функция Flatten At [list, positions] поднимает на первый уровень вы­ражения, стоящие на указанных позициях positions.

FlattenAt[{l, {2, {3, 4, {5, 6}}}, {7, 8}}, 3]

{1, {2, {3, 4, {5, 6}}}, 7, 8}

 

31. Mathematica. Функции Inner и Outer работы со списками

Функция Inner выполняет операцию так называемого обобщенного скалярного произведения. Чтобы понять принцип работы этой функции, рассмотрим подробнее операцию скалярного умножения векторов. При вычислении скалярного произведения векторов используются две опера­ции - умножение соответствующих координат векторов и суммирование полученных произведений. Эти действия можно описать при помощи следующей конструкции

Plus @@ MapThread [Times, {listl, list2}]   

Функция Inner обобщает конструкцию. Вместо операций сло­жения и умножения можно указывать другие функции

gfunction @@ MapThread [ffunction, {listb list2}]   

Функция f function должна иметь два аргумента, количество аргументов функции gfunction определяет длина списков listi, list2. Общий вид функции

Inner [ffunction, expression!, expression, gfunction]  

Она формирует список - результат действия функции ffunction на соот­ветствующие подвыражения первого уровня выражений expression^ ex­pression, и затем меняет голову List на голову gfunction. Если послед­ний аргумент не задан, по умолчанию головой результата является Plus. Выражения expression^ expression не обязательно должны быть списка­ми, но головы выражений, а также количество их подвыражений первого уровня должны совпадать.

Функция Outer [function, listi, list2, head] применяет функцию func­tion ко всем элементам прямого (декартова) произведения списков и воз­вращает выражение с головой head. Если четвертый аргумент не указан, вычисленное выражение - список.

Outer[f, {а, Ь}, {х, у, z}]

{{f [а, х], f[a, у], f [a, z]}, {f [b, x], f [b, y], f [b, z]}}

32. Mathematica. Функции семейства Nest и Fold

33. Mathematica. Механизм нижних значений

34. Mathematica. Механизм верхних значений

35. Mathematica. Как определяются глобальные правила преобразований

36. Mathematica. Функции семейства Replace

37. Mathematica. Локальные правила преобразований

38.  Mathematica. Укажите не менее девяти атрибутов, которые можно присвоить функции

1. Считывается введенная строковая информация.

2. К введенному тексту применяется функция $PreRead.

3. Выдается синтаксическое сообщение-предупреждение, если это необ­ходимо.

4. В случае наличия синтаксической ошибки применяется функция $SyntaxHandler. Если эта функция возвращает $Failed, обработка вы­ражения прекращается.

5. Формируется объект InString[n], представляющий текстовую форму n-ной входной ячейки. Далее управление передается Ядру:

6. Применяется функция $Рrе, обрабатывающая каждое входное выра­жение перед его вычислением.

7. Создается объект In[n], представляющий п - ную входную строку в виде выражения.

8. Вычисляется (эволюционирует) выражение.

9. Применяется функция $Post, обрабатывающая выражение после его вычисления.

10. Создается объект Out[n], представляющий вычисленное выражение.

Снова попадаем в Блокнот:

11. Применяется функция $PrePrint, обрабатывающая вычисленное вы­ражение перед его помещением в выходную ячейку. 12. Создается объект MessageList[n].

13. В выходной ячейке появляется выражение, если от него что-нибудь осталось.

14. Счетчик $Line, указывающий номер текущей выходной ячейки, уве­личивается на единицу при вычислении одного выражения.

39. Mathematica. Стандартныей порядок вычисления выражения

Вычисление выражения в Mathematica основано на использовании правил преобразования. К выражению применяются все возможные пра­вила, которым обучена система. Какие правила применять, система оп-

ределяет, просматривая списки правил, ассоциированных с тем или иным символом. Таким образом, процесс вычисления выражения опирается на вычисление символов. Какие существуют возможности пакета при работе с символами?

Во-первых, с символами связаны четыре типа правил преобразования глобального характера. А именно, правила преобразований, введенные посредством функций семейства xSetxxx, обязательно заносятся в один из списков

•                  Собственных значений символа Own Values,

•                  Верхних значений символа Up Values,

•                  Нижних значений символа Down Values,

•                  Дальних значений символа Sub Values,

которые система просматривает при вычислении выражения.

Во-вторых, символы могут снабжаться атрибутами, то есть наделя-яться некоторыми свойствами. Эти свойства учитываются на определенных этапах вычисления выражения.

Стандартный порядок вычисления выражения следующий:

1.                 Атомарные объекты: числа, строки и символы, не имеющие собственных значений, не вычисляются.

2.                 Первой вычисляется голова выражения, затем - каждое подвыражение, слева направо. Вообще говоря, каждое не атомарное подвыражение является выражением, поэтому рекурсивно происходит вычисление выражения, стоящего на уровень ниже.

3.                 Если встречаются символы, имеющие собственные значения Own Values, то им присваивается указанное собственное значение.

4.                 Если символ-голова наделен свойствами коммутативности, ассоциативности, дистрибутивности относительно списков (имеет атрибуты Orderless, Flat, bistable), то применяются эти свойства.

5.                 Выполняются правила преобразований, определенные пользователем в текущей Сессии. При этом списки значений символа просматриваются в следующем порядке:

 

•                  Список верхних значений символа Up Values,

•                  Список нижних значений символа Down Values,

•                  Список дальних значений символа Sub Values.

6.                 Применяются встроенные в систему (built-in) определения.

7.                 Если в процессе вычисления ни одна часть выражения не изменилась, вычисления прекращаются.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...