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

40. Mathematica. Как можно изменить стандартный порядок вычисления выражения




40. Mathematica. Как можно изменить стандартный порядок вычисления выражения

Существует семейство Holdxxx атрибутов, с помощью которых можно управлять порядком вычисления выражения. Перечис­лим основные атрибуты этого семейства:

• Атрибут HoldAll блокирует вычисление всех подвыражений первого уровня,

• Атрибут HoldFirst опускает вычисление первого подвыражения пер­вого уровня,

• Атрибут HoldRest блокирует вычисление всех подвыражений первого уровня, кроме первого.

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

SetAttributes[f, HoldFirst] f[l+5, x+2]

f[1+5, 2+x]

В рассмотренном выше примере заморожен первый аргумент выра­жения с головой f, поэтому система его не вычислила.

В случае, когда необходимо локально вычислить некоторое заморо­женное подвыражение, применяют функцию Evaluate [expression].

 

 

41. Mathematica. Конструкции, управляющие ходом вычисления

Table[ChebyshevT[n, x], {n, 1, 4}]

{x, -1 + 2 x2, -3 x + 4 x3, 1 - 8 x2 + 8 x4}

недостаточно в аргументах функции Plot указать функцию, вычисляющую уравнения этих кривых. Plot[Table[ChebyshevT[n, x], {n, 1, 4}], {x, -1, 1}]

General: : stop: Eurther output of Plot: : plnr will be suppressed during this calculation. More..

Символ Plot имеет атрибут HoldAll, аргументы этой функции не вычисляются, и система вернет пустой график, предупредив пользователя сообщением.

Функция Plot требует либо задания функций списком готовых уравнений, либо использования функции Evaluate для вычисления этих уравнений.

Изменять стандартный порядок вычисления выражения можно также при помощи встроенных функций пакета Unevaluated, Hold, Hold-Form, HoldPattern, HoldComplete. Например, чтобы записать частичную сумму ряда, используем чистую функцию и функцию HoldForm

 

42. Mathematica. Управляющие структуры выбора

Структуры выбора в Mathemaica представлены условными операто­рами, разветвляющими поток управления. Условный оператор позволяет выбирать различные пути вычисления в программе в зависимости от значения некоторого логического выражения.

Основная структура выбора - условный оператор If. Его полная форма

If[test, then, else, unknown]                                                                                

Помимо полной формы, этот оператор используется в сокращенных версиях:

• If[test, then]

• If[test, then, else]

Оператор If [test, then] вычисляет выражение then в случае истинно­сти выражения test и возвращает Null в случае, когда значение логиче­ского выражения test является ложным. Оператор в таком виде употреб­ляют, когда нужно либо производить или не производить некоторое дей­ствие.

Форма If[test, then, else] вычисляет выражение then в случае истин­ности выражения test, в противном случае вычисляется выражение else. Эта конструкция дает выбор между двумя альтернативными действиями.

И, наконец, полная форма (26) оператора If выражения предусмат­ривает обработку варианта, когда значение выражения test отлично от значений true и false.

В Mathematica нет ограничений на тип выражений, входящих в ус­ловный оператор. Таким образом, внутри конструкции выбора может также находиться другой оператор If. Такие структуры называют вло­женными управляющими структурами (nested control structure). Такими структурами вполне можно обходиться, но в системе существуют специ­альные структуры выбора с многочисленными ветвями Which и Swich.

Оператор Which [testi, expression!, ..., testn, expression^       

имеет четное число аргументов, среди которых п тестов и п выражений, подлежащих вычислению. При вычислении этой структуры последова­тельно вычисляются выражения testi, i=l, k-1 до тех пор, пока не най­дется testk, имеющее значение True. В случае, когда такое условие testk существует, выполняется следующее за ним выражение expression^ Если же все testi имеют значение False, то результат выполнения оператора -значение Null. Если при проверке testi имеет не булево значение, опера­тор Which остается не вычисленным. Иногда, когда есть вероятность прохождения всех тестов на False, удобно иметь сообщение о создав­шейся ситуации. Для этого последним тестом записывается True, а сле­дующее за ним выражение содержит сообщение о ситуации. Конструкция

Switch [expression, рапегпь expression!, patternn, expression^ дает ветвление или выбор не в результате выполнения условия, а после проверки на соответствие выражения expression образцам pattern^ При этом вычисляется выражение, стоящее за первым из образцов, которому соответствует исходное выражение. Если expression не соответствует ни одному из образцов, возвращается не вычисленное выражение с головой Switch. Если в этой ситуации последним указать образец, то будет вычислено выражение, следующее за ним.

 

43. Mathematica. Управляющие структуры повторения

Цикл (loop) - управляющая структура, которая вызывает повторяю­щееся выполнение некоторой последовательности инструкций. Повто­ряющиеся действия определяют тело цикла (loop body).

Всякая конструкция повторения имеет общие компоненты:

• Момент, когда поток управления передается первому выражению внутри цикла, называют точкой входа данного цикла,

• Очередной проход через цикл, реализующий повторяющиеся дейст­вия, называют итерацией,

• Точка, в которой повторение тела цикла завершается и управление пе­редается инструкции, следующей за структурой повторения, называют точкой выхода из цикла.

При моделировании явлений мы встречаемся с двумя основными типами циклических процессов:

• Цикл, управляемый счетчиком (count-controlled),

• Цикл, управляемый событием (event-controlled)

Цикл, управляемый счетчиком, выполняется заданное число раз. Цикл, управляемый событием, завершается, когда внутри него происходит событие, дающее сигнал к прекращению работы.

Циклы, управляемые счетчиком, используют переменную управления циклом (loop control variable). Перед входом в цикл эта переменная инициализируется, а в теле цикла она должна получать приращение. На выходе из цикла переменная имеет значение, отличное от значения при входе в цикл. Такое состояние переменной цикла не совсем естественно. Удобнее, чтобы переменная цикла изменяла свои значения только внутри цикла, то есть была локальной. Для этого существует механизм локализации переменных, который используется в конструкциях повторения Do, Table, Sum, Product. Одним из аргументов этих функций является итератор, или список итераторов, которые, являясь локальными переменными, управляют количеством повторений вычислений.

Циклы, управляемые событием, делятся на две группы:

•                  Цикл с предусловием,

•                  Цикл с постусловием

Конструкция повторения While [test, loop body] является циклом с предусловием. При этом простое или составное выражение loop body вычисляется до тех пор, пока условие test истинно. Перед каждой итерацией проверяется условие test. В случае, когда условие test становится ложным, управление передается инструкции, следующей за оператором While в потоке управления. Конструкция повторения

 For [start, test, increment, loop body]

вычисляет выражение start, затем - выражение test. В случае, когда test имеет значение True, выполняется loop body и increment с целью изменения счетчика, и снова вычисляется test. В случае, когда значением test является False, цикл завершает работу.

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

Поделиться:





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



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