Лабораторная работа № 25.
Программирование в Mathcad

Время выполнения

2 часа.

Цель работы

Освоить элементарные приемы программирования в среде Mathcad.

Задачи лабораторной работы

После выполнения работы студент должен знать и уметь:
  1. Знать основные приемы программирования в Mathcad;
  2. Уметь составлять программы – функции в Mathcad, реализуя линейные, разветвляющиеся и циклические алгоритмы.

Перечень обеспечивающих средств

Для обеспечения выполнения работы необходимо иметь компьютер с операционной системой MS Windows, установленное приложение РТС Mathcad версии 14 или выше;  методические указания по выполнению работы.  

Общие теоретические сведения

Для ввода конструкций программирования будет необходима наборная панель Программирования, в которую входят конструкции, показанные на рис. 1.
 Рисунок 1. Панель программирования

Для вставки нужной конструкции в текст составляемой программы достаточно щелкнуть мышью на соответствующем значке наборной панели Программирования.
Напомним, что реализовать тот или иной алгоритм вычисления в пакете MathCAD можно двумя способами:
  • Вставляя соответствующие операторы или функции в текст документа MathCAD. Такой способ называется программированием в тексте документа;
  • Используя так называемые программы-функции, которые содержат конструкции, во многом подобные конструкциям таких языков как PASCAL или FORTRAN: операторы присваивания, операторы циклов, условные операторы и т. д. Написание программ-функций в MathCAD позволяет решить задачи, которые невозможно решить используя только операторы и функции MathCAD. Такой способ будем называть программированием  в  программе-функции. Такое программирование включает два этапа:
    • описание программы-функции;
    • вызов программы-функции.
Рассмотрим отдельно эти два этапа.

Описание программы-функции и локальной оператор присваивания

Перед тем как использовать программу-функцию нужно ее задать, т. е. выполнить описания. Описание программы-функции размещается в рабочем документе перед вызовом программы-функции и включает в себя имя программы-функции, список формальных параметров (который может отсутствовать) и тело программы-функции. Рассмотрим эти понятия.
Каждая программа-функция MathCAD имеет оригинальное имя, используя которое осуществляется обращение к этой программе-функции. Через это же имя “возвращается” в рабочий документ результат выполнения программы-функции. 
После имени программы-функции идет список формальных параметров, заключенный в круглые скобки. Через формальные параметры «внутрь» программы-функции “передаются” данные необходимые для выполнения вычислений внутри программы. В качестве формальных параметров могут использоваться имена простых переменных, массивов и функций. Формальные параметры отделяются друг от друга запятой.

Замечание 1. Программа-функция может не иметь формальных параметров и тогда данные передаются через имена переменных, определенных выше описания программы-функции. 

Тело программы-функции включает любое число операторов локальных операторов присваивания, условных операторов и операторов цикла, а также вызов других программ-функций и функций пользователя.
Порядок описания программы-функции MathCAD. Для ввода в рабочий документ описания программы-функции необходимо выполнить следующие действия:
  • ввести имя программы-функции и список формальных параметров, заключенный в круглые скобки;
  • ввести символ “:” - на экране отображается как “: =”;
  • открыть наборную панель программирования и щелкнуть кнопкой “add line”. На экране появится вертикальная черта и вертикальный столбец с двумя полями ввода для ввода операторов, образующих тело программы-функции  (рис. 2);
 Рисунок 2. Структура программы-функции

  • перейти в поле 1 (щелкнув на нем мышью или нажав клавишу Tab) и ввести первый оператор тела программы-функции. Так как самое нижнее поле всегда предназначено для определения возвращаемого программой значения, то поля ввода для дополнительных операторов открываются с помощью щелчка на кнопке “Add line” панели программирования. При этом поле ввода добавляется внизу выделенного к этому моменту оператора. Для удаления того или иного оператора или поля ввода из тела программы-функции, нужно заключить его в выделяющую рамку и нажать клавишу Delete (рис. 3);
                          
Рис. 3. Добавление операторов в тело программы-функции

  • Заполнить самое нижнее поле ввода (поле 2), введя туда выражение, определяющее возвращаемое через имя программы-функции значение.
В приведенном примере формальным параметром является простая переменная x, тело программы включает два локальных оператора присваивания и значение переменной z определяет возвращаемый через имя функции результат выполнения программы-функции.
Локальный оператор присваивания. Для задания внутри программы значения какой-либо переменной используется так называемый локальный оператор присваивания, имеющий вид:
<имя - переменной> <выражение>

Внимание! Использование «обычного» оператора присваивания (обозначается знаком равно) в теле программы-функции приводит к синтаксической ошибке.

Обращение к программе-функции MathCAD

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

<имя - программы> (список фактических параметров)

Фактические параметры указывают при каких конкретных значениях осуществляются вычисления в теле программы. Фактические параметры отделяются друг от друга запятой.
Очевидно, что между фактическими и формальными параметрами должно быть соответствие по количеству, порядку следования и типу. Последнее соответствие означает:
  • если формальным параметром является простая переменная, то в качестве фактического может использоваться константа, переменная, арифметическое выражение;
  • если формальным параметром является вектор или матрица, то фактическим должен быть вектор или матрица;
  • если формальным параметром является имя встроенной функции или другой программы, то и фактическим параметром должен являться тот же объект.
Замечание 2.2. Обращение к программе-функции должно находиться после описания программы-функции и к моменту обращения фактические параметры должны быть определены. 

Пример 1. Обращение к программе f(x), приведенной на рис. 2,3 может иметь следующий вид:
x :=2
f(x) = 1.587
f(-3.23) = 0.536 + 0.928i
z := f(x+4.5)
z = 2.041                  
Заметим, что переменная z никак не связана с “локальной” переменной z, используемой внутри тела программы-функции. 
Замечание 1. Передать данные внутрь программы-функции можно используя внутри программы переменные, определенные до описания программы-функции. Например:
                      
Хотя значение переменной х изменилось внутри программы-функции, вне описания программы-функции эта переменная сохранила свое прежнее значение. 
Замечание 2. Имена фактических параметров при вызове программы-функции могут не совпадать с именами ее формальных параметров. 

Программирование в программе-функции линейных алгоритмов

Напомним, что под линейным алгоритмом понимается вычислительный процесс, в котором необходимые операции выполняются строго последовательно. Операторы, реализующие этот алгоритм в теле программы - функции также размещаются последовательно и выполняются все, начиная с первого оператора и кончая последним.
Пример. Оформим в виде программы-функции вычисление корней квадратного уравнения  ax2 + bx +c = 0 по формуле
                             
Для этого введем следующее описание программы-функции
Программа qq1 имеет четыре параметра: смысл первых трех понятен, а четвертый определяет знак перед корнем квадратным. Задавая Sig1 = 1, получаем корень x1; Sig1 = -1, получаем корень x2. Программа реализует линейный алгоритм – все операторы выполняются всегда строго последовательно.

Программирование в программе-функции разветвляющихся алгоритмов

Напомним, что в разветвляющихся алгоритмах присутствует несколько ветвей вычислительного процесса. Выбор конкретной ветви зависит от выполнения (или невыполнения) заданных условий на значения переменных алгоритма.

Пример 1. Переменная y задается следующим выражением
 
Видно, что алгоритм вычислений содержит две ветви и выбор зависит от значения переменной x.

Для программирования разветвляющихся алгоритмов в MathCAD имеется условная функция if и условный оператор. Используя эти конструкции можно «изменить» последовательное выполнение операторов. В этих конструкциях могут использоваться следующие новые понятия.

Условный оператор. Этот оператор используется только в теле программы-функции и для его ввода необходимо щелкнуть на кнопке if панели программирования или клавиши [ } ]. На экране появляется конструкция с  двумя  полями ввода, изображенная на следующем рисунке.
В поле 2 вводится логическое выражение (в простейшем случае это выражение отношений). В поле 1 вводится выражение (как правило, арифметическое), значение которого используется, если проверяемое логическое выражение  принимает значение 1. 
Условный оператор может находиться только внутри тела программы-функции. 
Например:
В поле 3 задается выражение, значение которого используется, если логическое выражение  равно  0. Для ввода в поле 3 необходимо:
  • заключить это поле в выделяющую рамку;
  • щелкнуть на кнопке “otherwise” панели программирования;
  • в оставшемся поле введите соответствующее выражение.
Пример 2. Составим программу-функцию, вычисляющую функцию y(x), заданную в примере 1. Для этого введем описание  следующей программы-функции:
Обращение к этой программе-функции имеет вид
y(2) = 1.414
y(-2) = 4 
Таким образом, выражение, стоящее перед словом otherwise выполняется только в том случае, если не выполнено заданное перед этим условием.
В программе можно использовать несколько следующих друг за другом  условных операторов с одним выражением перед словом otherwise.

Пример 3. Составим программу-функцию для вычисления переменной z по формуле 
z(t) =
В рабочий документ введем описание следующей программы-функции 
Заметим, что функция z(t) получит значение ln(t) только тогда, когда не выполняется условие записанные в двух вышестоящих строках.
Обращение к этой программе - функции имеет вид
z(2) = 4 
Если в поле 3 ввести оператор без слова otherwise, то этот оператор будет выполняться всегда вне зависимости от выполнения выше заданных условных операторов.

Программирование в программе-функции циклических алгоритмов

Напомним, что циклические алгоритмы (или проще циклы) содержат повторяющиеся вычисления, зависящие от некоторой переменной. Такая переменная называется параметром цикла, а сами повторяющиеся вычисления составляют тело цикла
Классификация циклов. Циклы можно условно разделить на две группы:
  • циклы типа арифметической прогрессии;
  • итерационные циклы.
Характерной чертой первой группы циклов является то, что количество повторений тела цикла можно определить до начала выполнения программы, реализующей цикл, т.е. априори. Классическим примером цикла типа арифметической прогрессии является цикл  примера  3.
Для итерационных циклов нельзя априори определить количество повторений тела цикла. Это обусловлено тем, что окончание таких циклов определяется не выходом параметра цикла за конечное значение, а более сложными условиями. Это иллюстрирует следующий пример.

Пример 1.  Вычислить значение x=, используя итерационную процедуру
xn=0.5(xn--1+a/xn-1),        n=1,2,3,..,  x0=a.
В качестве приближенного значения корня квадратного берется такое значение xn, которое удовлетворяет условию 
|xn-xn-1 |≤ Ε ,
где – заданная точность вычисления.            
Видно, что задав исходные данные, например, a = 9, = 10-3, нельзя, не выполняя итерационные вычисления, определить количество повторений тела цикла.
Программирование цикла типа арифметической прогрессии. Для программирования таких циклов используется оператор цикла for. Для ввода такого оператора необходимо выполнить следующие действия:
  • щелкнуть на кнопке for наборной панели Программирования. На экране появятся  поля ввода, изображенные на рисунке
 
  • в поле ввода 1 введите имя параметра цикла;
  • в поле ввода 2 ввести диапазон значений параметра цикла, используя для этого дискретный аргумент;
  • в поле ввода 3 вводятся операторы, составляющие тело цикла. Если одной строки недостаточно, то дополнительные поля ввода (дополнительные строки) создаются щелчком на кнопке “add line” в панели программирования и тогда слева от тела цикла появляется вертикальная черта.
Пример 2. Для x меняющего от -2 до 2 с шагом 0.5 вычислить значение 
 и сформировать из этих значений  вектор y, т.е. y1 = f(-2),  y2 =  f( 1.5) и т. д.
В этом примере количество повторений определяется по формуле
где xk , x0  - конечное и начальное значение параметра цикла, d - шаг его изменения. Подставив значения, получаем         (2 - (-2))/0.5+1=9.

Описание программы-функции имеет вид
В этом варианте описания программы-функции формальные параметры используются для задания диапазона изменения параметра цикла (переменная x). Для изменения индекса у элемента массива y вводится переменная i целого типа внутри программы-функции. Обращение к описанной программе-функции может иметь вид
z := form_tab (-2,2,0.5)       
Замечание. Если значение индексов у элементов массива меняется начиная с 1 (как в этом примере), то начальное значение индекса необходимо установить равным 1 (для этого обратиться к пункту MATH команде Built-in Variables, а затем в поле ввода Origin ввести значение 1 (вместо установленного по умолчанию значения 0). 

Программирование итерационных циклов. Для программирования таких циклов используется оператор цикла while. Для ввода этого оператора необходимо выполнить следующие действия:
  • щелкнуть на кнопке while панели Программирования. На экране появляются элементы, показанные на рисунке
 
  • в поле 1 ввести условие выполнения цикла;
  • в поле 2 ввести операторы тела цикла. В теле цикла должны присутствовать операторы делающие условие цикла ложным иначе цикл будет продолжаться бесконечно.
Оператор цикла while выполняется следующим образом: обнаружив оператор while, MathCAD проверяет указанное условие. Если оно истинно, то выполняется тело цикла и снова проверяется условие. Если оно ложно, то цикл заканчивается.

Пример. Составим программу-функцию, реализующую итерационную процедуру приближенного вычисления корня квадратного. 
Как видно из текста программы-функции нет необходимости хранить в памяти все приближенные решения x0, x1, x2 , ... , и т.д. Достаточно хранить предыдущее (“старое”) значение xc и последующее (“новое”) значение xn.

Обращение к описанной программе будет иметь вид
sqroot(9,0.0001) = 3 sqroot(25,0.0001) = 5 sqroot(123,0.0001) = 11.091   
К сожалению, организация итерационного цикла с помощью оператора while, без дополнительных средств контроля может привести к зацикливанию. Например, задав при обращении к программе eps < 0 получаем зацикливание.
Поэтому в MathCAD имеется специальный оператор break, который позволяет выйти из цикла или приостановить исполнение программы при выполнении заданного в операторе break условии. Для ввода оператора break необходимо щелкнуть на кнопке break панели Программирования (нельзя вводить этот оператор с клавиатуры по символам). Оператор break используется в левом поле ввода условного оператор if, а в правом размещается условие, при выполнении которого происходит прекращение работы цикла или программы, в нижнем поле - оператор, выполняемый если условие не выполнено. Поэтому первоначально вводится оператор if , а затем заполняются поля этого оператора.
Следующий пример показывает написание не зацикливающей программы с оператором break.

Задание

  1. Составить программу – функцию, вычисляющую функцию f(x) 
  2. Пусть задана функция двух аргументов f(x,y). Найти область определения этой функции. Составить программу – функцию, вычисляющую функцию f(x,y), таким образом, чтобы значения x и y не выходили за пределы области определения функции f(x,y).
  3. Построить графики функций f(x) и f(x,y).

Варианты задания

Содержание отчета

  1. Задание и цель работы.
  2. Выполненные расчеты.

Технология выполнения работы

В данной работе необходимо составить программы – функции, для вычисления значений функций y(x) и f(x,y), используя панель Programming, а так же применяя методики описанные выше.

Вопросы для защиты работы

  1. Как ввести программу-функцию в Mathcad?
  2. Что такое формальные параметры программы - функции? 
  3. Каким образом происходит обращение к программе - функции  в Mathcad?
  4. Что такое условный оператор в Mathcad и как его использовать?
  5. Что такое цикл типа арифметической прогрессии в Mathcad и как его использовать?