7. Программирование в Mathcad
Впакете Mathcad существует богатый набор средств для решения различных математических задач, встроено огромное количество функций из различных разделов математики. Однако написать функции для всех практических задач, которые могут стоять перед пользователями пакета, невозможно. Для расширения возможностей разработчики пакета встроили достаточно простой и оригинальный язык программирования. В любом месте документа Mathcad можно вставить код программы на встроенном языке программирования. Это можно сделать при помощи «горячих клавиш» или команд из панели инструментов Programming (Программирование).
Для визуализации панели програм-
мирования необходимо нажать на кнопку из панели математических инструментов или по-
дать команду View \Toolbars \Programming. На данной панели имеется десять команд. Щелчок по одной из этих команд создает в текущей
позиции заготовку для соответствующей программной конструкции. При частом использовании команд программирования удобнее запомнить комбинации «горячих клавиш» и команды генерировать при помощи клавиатуры.
Примечание. При составлении программ ключевые слова команд вручную писать нельзя. Заготовку команды можно получить только при помощи щелчка мыши по соответствующей кнопке или при помощи комбинаций клавиш.
Приведем значение «горячих клавиш», использующих при программировании на Mathcadе.
Команда | Горячая клавиша | Команда | Горячая клавиша |
Add Line | ] | ← | { |
if | } | otherwise | CTR+Shift+] |
for | Ctrl+Shift+’ | while | Ctrl+] |
break | Ctrl+Shift+[ | continue | Ctrl+[ |
return | Ctrl+Shift+\ | On error | Ctrl+’ |
Предполагается, что читатель уже знаком с основными идеями программирования, изучив один из стандартных языков про-
118
граммирования: QBasic, Visual Basic, Fortran, Pascal, C++, Java, Ruby или любой другой язык программирования. Данный практикум адресован пользователям, решающим инженерные и научные задачи, для которых программирование не является основным видом деятельности. Для таких пользователей языки программирования C++ и Java противопоказаны, так как ориентированы на профессиональных специалистов. Инженерам, использующим программирование не ежедневно, для решения большинства задач достаточно и одиннадцати команд из панели программирования Mathcad.
Сразу же отметим недостатки программирования в среде Mathcad. Одним из главных недостатков является неразвитость отладчика программ. Ошибки, возникающие при выполнении программ, отображаются, но подробной информации о типе ошибки, значении локальных и глобальных переменных в момент останова программы оперативно получить нельзя. Отлаживать программы уже средней сложности в Mathcad не доставляет особой радости. Поэтому сложные инженерные, научные и экономические задачи удобнее и быстрее, с точки зрения автора, выполнять в рамках визуального алгоритмического языка Visual Basic [3] или последних версий языка Fortran.
Рассмотрим все команды из панели программирования Math-
cad.
1. Add Line – добавить строку в текущую позицию программы. При вводе данной команды появляется или расширяется на одну строку вертикальная линия, объединяющая отдельные операторы в блок с одним входом и одним выходом, который выполняется как один оператор.
Позиция, куда вставится строка, определяется положением курсора. Чтоб вставить новую строку в середину программы, нужно выделить (пробелами) строку перед позицией, куда будет вставлена пустая строка. Удалить лишнюю строку можно с помощью кнопки backspace на клавиатуре.
Для того чтобы начать ввод подпрограммы, необходимо набрать имя программы и в скобках через запятую перечислить формальные параметры подпрограммы, ввести нужное количество раз команду Add Line. Программа выводит последнюю переменную, обрабатываемую программой перед выходом. Вместо
119
имени подпрограммы можно указать имя переменной, куда необходимо вывести результат работы подпрограммы.
2. ← – оператор присваивания значения локальной переменной. При выходе из блока программы значения локальных переменных оказываются недоступны для других участков Mathcad файла.
В Mathcad имеются два оператора присваивания: для глобальных переменных (обозначается двумя символами «:=») и для локальных переменных «←». Глобальные переменные доступны в любом месте программы после объявления данной переменной, а локальные – только в текущем блоке.
Для пояснения действия локального и глобального оператора присваивания рассмотрим пример простейшей программы на
Mathcad.
Напишем программу для решения квадратного уравнения ax2+bx+c=0. В программе при помощи операторов глобального присваивания задаются значения глобальных переменныхa, b иc. Для сравнения введем еще локальную переменнуюk и присвоим ей значение 4. Далее вычисляем значение корней квадратного уравнения при помощи программы, состоящей из одного блока операторов. В программе применяются три оператора локального присваивания и возвращается значения вектораx, состоящего из двух чисел. После выполнения программы выводим значение всех переменных, используемых в программе. При этом значение всех локальных переменныхD, x иk, заданных вне блока, программа не видит, поэтому вместо знака= выводится оператор глобального присваивания «:=». В этом случае значение переменной не выводится, а вместо него отображается красный прямоугольный маркер.
Начало программы.
a :=1 b:= −4 c:= 3 k← 4 ORIGIN:=1
x1 |
| = | D | ←b2 −4 a c | |||||
|
|
|
|
|
|
|
|
| |
x2 |
|
| x | ← | −b − | D | |||
|
|
|
|
|
|
|
| ||
|
|
| 1 |
|
| 2 a |
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
| x | ← | −b + | D | |||
|
|
|
|
|
|
| |||
|
|
| 2 |
|
| 2 a |
|
|
|
|
|
| x |
|
|
|
|
| |
D := | x := | k := |
|
|
| ||||
|
|
|
|
x1=1×2= 3a =1b = −4c = 3.
Конец программы.
3. Оператор if предназначен для организации разветвляющихся вычислительных процессов. Чтобы ввести оператор if в программу, необходимо мышкой щелкнуть по кнопке if из панели программирования или использовать горячую клавишу –}.
При этом в программу вставляется заготовка для оператора if: if .
Общий вид простого оператора if: D if L,L – логическое выражение;
D – оператор, выполняемый в случае, если условиеL принимает значение «истина».
Оператор работает следующим образом:
•вычисляется логическое условие L;
•если L – истина, то выполняется операторD, в ином случае он не выполняется;
•выполнение программы продолжается со следующего,
после if, оператора.
Как мы видим, данный оператор if идентичен аналогичному оператору из других высокоуровневых языков программирования. Единственное отличие заключаются в синтаксисе.
Для формирования сложных условий можно использовать панель инструментов Boolean, содержатся знаки логического равенства, неравенства и логических операций. В частности, «V» означает логическое «или», а «Λ» — логическое «и».
121
Таким образом, чтобы сформулировать условие, что переменная х находится в диапазоне(–3;4),необходимо написать:x > –3 Λx < 4.
При формулировании сложных логических условий для расстановки приоритетов можно использовать скобки.
Пример. Построить график следующей функции:
28 −6x, | x (−∞;3) | |
| +1, | x [3;−1] . |
f (x) = x2 | ||
|
| x (1,∞) |
2, |
|
Решение.
f (x) := 28−6x if x > 3
x2 +1 if x ≤3 x ≥ −1
2if x < −1
Всложных подпрограммах
часто используется блочный оператор if:if L
D1
Dn
Где D1, …, Dn – действия, выполняемые в случае, если логическое условиеL истинно.
Для того чтобы вставить подобную конструкцию, нам необходимо, на панели инструментов Programming, выбратьif , затем установить курсор на место ввода слева от оператораif иn раз нажать наAdd Line.
Приведем пример программы с подобным оператором. Усовершенствуем программу для решения квадратного уравнения ax2+bx+c=0.
Начало программы.
x1 |
| = | ORIGIN :=1 a:=1 b:= −1 c:= 4 | |||
|
| D ←b | 2 | −4 | a c | |
x2 |
|
|
| |||
|
|
| if D ≥ 0 |
|
x1 ← −b2−a D x2 ← −b2+a D
if D < 0
x1 ←»действительных корней нет» x2 ←»действительных корней нет»
x
x1 =»действительных корней нет» x2 =»действительных корней нет»
Конец программы.
В данном случае при дискриминанте меньше 0 программа выдает сообщение «действительных корней нет!».
Кроме оператора if, программа Mathcad может содержать и операторotherwise.
4. Оператор otherwise применяется в случае, когда используется условие с двумя вариантами действия, то есть, если условие истинно, нужно выполнить одно действие (или действия), а если ложно, то другое.
Общий вид такого оператора следующий:
D1 ifL
D2 otherwise
В случае если условие L истинно, выполняются действияD1, иначе выполняются действияD2. То естьotherwise аналогичен оператору else в Бейсике, Фортране и других высокоуровневых языках.
Рассмотрим пример программы, использующей операторы if иotherwise. В данном случае проверяются условия, при которых логарифм не существует(x<0 илиy<0 илиy=1). Если они выпол-
123
нены, выдается сообщение «error», в противном случае вычисля-
ется logyx. |
|
|
|
f _ log(x,y) := |
| «error» | if x≤ 0 y≤ 0 y=1 |
| |||
|
| log(x,y) | otherwise |
f _ log(−4,5)=»error» |
| ||
f _ log(8,2)= 3 |
|
|
|
Когда в блоке otherwise несколько строк, нужно установить курсор в место ввода слева от оператораotherwise и нажатьAdd Line необходимое количество раз.
Вернемся к программе, вычисляющей корни уравнения ax2+bx+c=0, и запишем ее с помощью операторовif иotherwise. Начало программы.
ORIGIN :=1 a:=1 b:= 2 c:= 2
x1 | = |
| D ←b | 2 | −4 a c |
|
|
| |||
|
|
|
| ||||||||
|
|
|
|
| |||||||
x2 |
|
| if D ≥ 0 |
|
|
| |||||
|
|
|
| x | ← |
| −b − | D | |||
|
|
|
|
| |||||||
|
|
|
|
|
|
| |||||
|
|
|
| 1 |
|
|
| 2 a |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
| x | ← | −b + | D | ||||
|
|
|
|
|
| ||||||
|
|
|
| 2 |
|
|
| 2 a |
|
|
|
|
|
| otherwise |
|
|
| |||||
|
|
|
| x1 ←»действительных корней нет» | |||||||
|
|
|
| ||||||||
|
|
|
| x2 ←»действительных корней нет» | |||||||
|
|
| x |
|
|
|
|
|
|
| |
x1= −2 |
| x2= −1 |
|
|
|
Конец программы.
5. Оператор for используется для создания циклических вычислительных процессов. В документе Mathcad простейшие циклы могут быть заменены ранжированными векторами. Для более сложных циклов необходимо составлять программу.
Чтобы вставить оператор for в программу, необходимо мышкой щелкнуть по кнопкеfor из панели программирования или использовать «горячую» клавишу «Ctrl+Shift+’». При этом в программу вставляется заготовка для оператораfor:
for
Общий вид оператора выбора for: for i k1..kn
D
Или
for i (k1k2k3 …kn)
D
Где i – счетчик цикла. Переменная, которая меняется в диапазоне отk1 доkn. Диапазон изменения счетчика цикла вводится с помощью ранжированной переменной или с помощью вектора.
D –действия,которые выполняются в цикле (тело цикла). Ниже приведен пример, в котором диапазон изменения счетчика циклаn задан с помощью вектора. Вектор вставляется с по-
мощью панели инструментов Matrix.
sum := s← 0
for n (1 2 5 7 10 11 13 16 17 19)
s ← s+ 1n
sum = 2.285.
Данная программа вычисляет сумму
Sum=1+1/2+1/5+1/7+1/10+1/11+1/13+1/16+1/17+1/19.
Если тело цикла оператора for состоит из нескольких строк, то необходимо установить курсор на позицию для ввода тела цикла и соответствующее количество раз нажать наAdd Line.
Как и в обычных программах, циклы и условные операторы могут быть вложенными. Mathcad, впрочем, сам следит за вложенностью циклов и сделать ошибку во вложенности просто не позволит.
Пример. Написать функциюFA, создающую матрицуA, состоящую изM строк иN столбцов следующего вида:
125
1 | 2 | 4 | 8 | 16 |
| |
| 0 | 1 | 2 | 4 | 8 |
|
|
| |||||
| 0 | 0 | 1 | 2 | 4 |
|
|
| |||||
| 0 | 0 | 0 | 1 | 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Запишем подпрограмму, выводящую эту матрицу с помощью двух вложенных циклов:
FA(M, N) := |
| for | i 0..M−1 |
| ||||
|
| |||||||
|
|
|
| for | j 0..N−1 |
| ||
|
|
|
|
| Ai, j | ← 1 | if | i = j |
|
|
|
|
| ||||
|
|
|
|
| Ai, j | ← 0 | if | i > j |
|
|
|
|
| Ai, j← 2 Ai, j−1 | if i < j | ||
|
|
| A |
|
|
|
|
|
1 | 2 | 4 | 8 | 16 |
|
| ||
| 0 | 1 | 2 | 4 | 8 |
|
|
|
FA(4,5)= |
|
|
| |||||
| 0 | 0 | 1 | 2 | 4 |
|
|
|
|
|
|
| |||||
| 0 | 0 | 0 | 1 | 2 |
|
|
|
Обозначим i – | строку матрицы, j – столбец матрицы. |
Тогда главная диагональ задается уравнением «i=j», элементы матрицы, расположенные выше главной диагонали, уравнением«i<j», а элементы матрицы, расположенные ниже главной диагонали, – усравнением«i<j».
Каждый элемент, расположенный выше главной диагонали, вычисляется как удвоенное произведение элемента, стоящего в этой же строке в предыдущем столбце: Ai j=2* Ai j–1.
Для проверки работы функции подали команду: FA(4,5)=. 6. Операторцикла while используется тогда, когда цикл дол-
жен выполняться не заданное количество раз, а до тех пор, пока не будет выполнено определенное в цикле условие.
Чтобы вставить оператор while в программу, необходимо мышкой щелкнуть по кнопкеwhile из панели программирования или использовать горячую клавишу –«Ctrl+]». При этом в программу вставляется заготовка для оператораwhile:
while
Общий вид оператора While:while L
D,
где L – условие, при выполнении которого выполняется цикл (условие цикла). В данном случае, действиеD (тело цикла) выполняется до тех пор, пока условиеL истинно. Если логическое условиеL изначально ложно, то операторы, составляющие тело цикла, не будут выполняться, а управление передается на оператор следующий за операторомwhile.
Если в теле цикла выполняемых действий должно быть несколько, то необходимо установить курсор на позицию для ввода тела цикла и соответствующее количество раз нажать на Add Line.
Следует заметить, что если условие L истинно всегда, то программа будет работать бесконечно (зациклится). Именно поэтому с цикломwhile необходимо быть очень осторожным и тщательно проверять условие выхода из цикла, прежде чем выполнять программу.
Если программа все-такиповисла, то чтобы прервать ее выполнение, необходимо нажать клавишу «Esc» и в появившемся окне нажать на кнопку OK.
Приведем пример программы, использующей цикл while.
s ← 0 |
|
|
| ||
n ←1 |
|
|
| ||
| 1 |
|
| ||
while |
|
| > tol | ||
n | |||||
|
|
|
|
s ← s+ 1n n← n+1
s
= 2.829.
Вданной программе с указанной точностью (tol) вычисляется сумма s=1+1/2+1/3+1/4+1/5+1/6+1/7…
7. Оператор break обеспечивает экстренный выход из цикла. Программа при этом продолжает выполнять следующую после цикла строку. Данный оператор часто применяется, чтобы избежать «зацикливания» программы.
Вкачестве примера применения оператора break рассмотрим
∞ |
| 12n −1 |
|
|
|
задачу вычисления суммы числового ряда S = ∑ |
|
| . | В | |
n | 3 | ||||
n=1 | + 2n +1 |
|
|
приведенной ниже программе, суммирование членов ряда прекращается, когда достигается точность, указанная параметром tol или если число итераций цикла превышает 10000.
f (n) := | 12 n −1 |
| |
n3 + 2 n+1 | |||
|
sum(tol) := s← 0 n←1
while f(n) > tol s← s+ f(n)
break if n >10000 n ←n +1
s sum(0.000011) =8.726 .
В данном случае оператор break исключается возможность зацикливания программы для расходящегося ряда.
8. Оператор continue возвращает управление в первую строку цикла. Как только этот оператор встречается в программе, выполнение текущей итерации прерывается и выполняется переход на следующую итерацию цикла. Выход из цикла не производится.
Данный оператор, как и оператор break, не содержит параметров.
Пример: Найти сумму N первых членов ряда:
N |
| 1 |
|
S = ∑ |
| . | |
2n | 3 | ||
n=1 | −16 |
|
В программе, при помощи оператора continue, происходит обход слагаемого в котором знаменатель дроби равен нулю.
sum(N) := |
| s ← 0 | |
| |||
|
| for n 1..N | |
|
|
| a ← 2n3 −16 |
|
|
| |
|
|
| continue if a = 0 |
|
|
| s ← s+ 1 |
|
|
| a |
|
| s |
sum(100)= −0.024.
9. Оператор return прерывает выполнение программы. В качестве результата работы программы возвращается значение, указанное в позиции для ввода, после оператора return.
При выборе на панели инструментов пункта return вставляется строка.
Пример. Подсчитать с указанной точностью tol сумму ряда:
∞ |
|
| 12n |
|
S = ∑ |
|
| . | |
n | 2 | + 2n +16 | ||
n=1 |
|
|
Если ряд получается расходящийся, программа выдаст сообщение «расходится». Ряд будет считаться расходящимся, если число итераций цикла превысило 1000000 раз.
f 1(n) := | 12n | |||||||
n2 + 2n+16 |
|
|
|
|
| |||
sum1(N) := |
| s ← 0 | ||||||
| ||||||||
|
| n ←1 | ||||||
|
| while |
| f 1(n) |
| > tol | ||
|
|
|
| |||||
|
|
| s ← s+ f1(n) | |||||
|
|
| ||||||
|
|
| return » ряд расходится» if n>100000 | |||||
|
|
| n ← n+1 | |||||
|
| s |
129
sum1(0.01) =» ряд расходится».
10. Оператор on error отвечает за обработку ошибок. При выборе данного оператора в программу вставляется заготовка следующего вида:
Общий вид оператора on error:D1on error D2 .
Если при вычислении выражения D1 произошла ошибка, будет вычислено значениеD2.
Данный оператор имеет смысл использовать, если при выполнении программы возможна ошибка в каком-тоопределенном месте, например деление на ноль.
Приведем пример программы, вычисляющей десятичный логарифм числа xy.
Если логарифм не существует, выдается сообщение об ошибке: «аргумент логарифма <0».
|
|
|
f (x,y) := |
| z ← x y |
| ||
|
| «аргумент логарифма< 0» on errorlog(z) |
f (0,5) =»аргумент логарифма< 0″; | ||
f (10,1)=1. |
Оператор on error можно применять в комплексе встроенной функциейerror().
f (x, y) := z← x y
error(«аргумент логарифма< 0») on errorlog(z)
В данном случае сообщение об ошибке будет показываться в стандартном для Mathcad виде. При ошибке текст вызова функции выделяется красным цветом, а при подведении мыши к этому вызову внизу отображается запрограммированный в функции error текст.
studfiles.net
Урок 24. Решение уравнений в Mathcad – использование функций
Решение уравнений является важным для решения практических задач. Поэтому уделим уравнениям еще один урок.
Блок решения в функции
Если Вы хотите исследовать изобразить на графике поведение уравнения в зависимости от значения определенного параметра, Вам, возможно, придется решить систему уравнений много раз. Вы можете сделать это, используя блок решения в функции. Покажем на примере: предположим, мы хотим исследовать поведение решения следующего уравнения в зависимости от различных значения параметра A:
Блоку решения не нужно ни значение параметра, ни начальное приближение, поскольку решение есть функция этих двух значений. Эти значения мы будем задавать при вызове функции.
Функцию можно использовать сколько угодно раз:
Использовать функцию можно с диапазоном переменных:
Такая техника решения не самая надежная. Если хотя бы одно решение не может быть найдено, Вы не получите и решений для других параметров (это произойдет, если задать A<0.7). Поэтому лучше заранее проверить свою функцию.
Сообщения об ошибке можно избежать, написав маленькую программу:
Если блок решения выдает сообщение об ошибке, на выходе получим значение NaN (Not a Number – «Не Число»), которое просто не отображается на графике:
Построим две ветки уравнения с использованием этого приема:
Когда переменных много
Расчеты часто содержат несколько переменных, но Вам, возможно, придется использовать лишь некоторые из них. В качестве примера рассмотрим систему восьми уравнений, где нам нужно получить только значения X и Y. Начальные приближения следует задать для всех переменных:
Решение представляет собой вектор из восьми элементов, но нам нужны лишь элементы с индексами 0 и 1.
Минимизация ошибки
Find() – не единственный решатель в Mathcad. Еще один полезным решателем является Minnerr(), находящий решения, которые минимизируют ошибку в системе уравнений. Рассмотрим пример: есть набор данных, которые мы хотим аппроксимировать уравнением Бейтмена:
Мы хотим подобрать три константы в уравнении Бейтмена таким образом, чтобы ошибка приближения была минимальна. У нас есть семь уравнений (по одной для каждого эксперимента) и три константы, так что в системе избыток данных. Minerr() может обработать эту проблему:
Замечания:
- Три константы являются переменными для этой системы.
- Переменные не могут иметь счетных индексов.
- У параметров (t и c) могут быть счетные индексы.
Возможно, Вам хотелось бы использовать цикл for для семи уравнений, но в блоке решений этого сделать нельзя.
Для полностью определенных систем (с одинаковым числом независимых уравнений и неизвестных) функция Minerr() дает тот же ответ, что и Find().
Резюме
В этом уроке мы определили способы расширенного использования блоков решения:
- Вы можете определить вывод блока решения как функцию. Таким образом в блок решения можно передавать параметры и начальные приближения.
- Если при вычислении точек для графика хотя бы одно решение не будет найдено, то график не будет построен. Этой ошибки можно избежать, написав небольшую программу с использованием “try/on error”, которая выводит NaN (Not a Number – Не Число), если результат отсутствует.
- Для двух и более неизвестных (и уравнений) вывод блока решения является вектором. Если нужен один или два элемента этого вектора, их можно вывести, используя подстрочные индексы.
- Вместо функции Find() можно использовать Minerr() – она минимизирует ошибку для заданного набора ограничений, в том числе, если данные избыточны. Minerr() часто может дать приближенный результат, когда Find() выдает ошибку.
Другие интересные материалы
sapr-journal.ru
Форматирование формул в PTC Mathcad
Пользователям часто нужно оформить в PTC Mathcad расчет с формулами, оформленных в следующей последовательности:
- формула в символьном виде;
- формула с подставленными числами;
- результат вычисления.
Пример такого расчета показан на рисунке (версия Mathcad – 15.0):
В этой статье описано, как можно отформатировать формулы в PTC Mathcad под заданные требования с помощью команд explicit и float.
Сначала следует определить все переменные, входящие в формулу, т.е. задать им численные значения:
Затем нужно ввести имя результирующей переменной и присвоить ей нужное выражение:
Если не открыта панель «Символьные», её следует открыть командой «Вид –> Панели инструментов –> Символьные». Поставьте курсор в выражение и на этой панели выберите команду explicit, которая подставляет в формулу численные значения входящих в нее переменных. После этого в выражении появится стрелка – оператор символьного вычисления – со словом explicit:
Затем после слова explicit следует с клавиатуры через запятую ввести ALL – модификатор, указывающий на то, что подставить следует все переменные, входящие в выражение. Затем щелкните левой кнопкой мыши вне выражения. Отобразится результат подстановки:
Для вычисления и отображения результата с необходимым числом знаков после запятой поставьте курсор на выражение с подставленными числами и на панели символьные выберите команду float:
В пустой местозаполнитель после слова float следует ввести желаемое число десятичных разрядов. Именно с такой точностью число будет отображено в результате вычислений и при подстановке этого результата в другие выражения:
На следующем шаге следует скрыть ключевые слова и отобразить знаки равенства вместо операторов символьного вычисления (стрелки) и операторов присваивания (двоеточие-равно). Щелкните правой кнопкой по нужному выражению и в команде «Отображать определение как» выберите «Знак равенства»:
В результате вместо оператора присваивания «:=» будет отображен обычный знак равенства:
Затем щелкните правой кнопкой по выражению с вычислением и в команде «Отображать вычисления как» выберите «Знак равенства»:
Стрелки операторов символьного вычисления будут заменены на знаки равенства:
Снова щелкните правой кнопкой мыши по выражению и выберите команду «Скрыть ключевые слова»:
В результате ключевые слова explicit и float и их модификаторы отображаться не будут. Таким образом, формулы приведены к желаемому виду:
В PTC Mathcad Prime действия по подстановке выполняются аналогично, но, к сожалению, скрывать ключевые слова и изменять вид операторов в текущей версии (PTC Mathcad Prime 3.0) нельзя:
Другие интересные материалы
About Павел Демидов
Выпускник МГТУ им. Н.Э. Баумана, технический специалист по продуктам PTC Mathcad и Solid Edge.sapr-journal.ru
Урок 12. Программирование в Mathcad — циклы
Во втором уроке по программированию в Mathcad мы рассмотрим циклы – различные повторяющиеся вычисления. Помимо циклов мы рассмотрим, как можно находить ошибки в программах.
В этом уроке мы изучим три новые команды:
- for – для циклов for.
- while – для циклов while.
- return – как команду для отслеживания ошибок.
Остановка вычислений
Операции Mathcad, которые мы рассматривали ранее, достаточно безвредны – они не заставят Ваш компьютер «зависнуть». Но с циклами это не так. Поэтому для начала следует изучить команды в меню Вычисления –> Элементы управления:
Здесь находятся четыре кнопки:
- Автоматический расчет.
- Остановить все расчеты.
- Рассчитать.
- Отключить область.
Кнопка «Автоматический расчет» обычно включена. Она отключается при нажатии на кнопку «Остановить все расчеты». Зеленый индикатор в левом нижнем углу становится серым. «Остановить все расчеты» служит для прекращения всех расчетов в документе на случай, если что-то пошло не так. При автоматическом расчете вычисления производятся лишь в том случае, когда происходят какие-либо изменения. С помощью кнопки «Рассчитать» можно сделать пересчет всего документа. Кнопка «Отключить область» прекращает вычисления в тех математических областях, которые Вы выбрали.
На рисунке ниже видно, что область серая – значит, она отключена:
Нажмите на нее, затем на кнопку «Отключить область». Тем самым Вы запустите расчет в области. Вычисление займет некоторое время:
Его можно прекратить, нажав на кнопку «Остановить все расчеты», затем отключив область и снова включив автоматический расчет.
Циклы
for
Циклы forприменяются, когда заранее известно число повторений вычислений. Программа ниже формирует вектор из n+1 элементов. Значения начинаются с нуля и имеют шаг 1.
Цикл forначинается со второй строки. Он включает в себя счетчик (здесь – i), который является локальной переменной-диапазоном. Эту строку можно прочитать как: «Для диапазона целых чисел от 0 до nвключительно сделать: …». Затем следуют выполняемые действия – в нашем случае это простое присваивание. Когда цикл завершается, программа выполняет действия на следующей строке – здесь это оператор return.
Составим программу.
Задайте имя программы-функции, вставьте программную структуру (вертикальная линия) и определение цикла forиз меню Математика –> Операторы и символы –> Программирование или с помощью сочетания клавиш [Ctrl+Shift+”]:
Определите имя переменной-счетчика:
Определите диапазон счетчика:
Введите команды тела цикла и оператор return:
Проверим программу:
Как видно, использование дробных или отрицательных чисел – не лучшая идея. Вы можете изменить точку начала, но этого лучше избегать:
Видите нули, которые появились в начале вектора? Причиной появления этих нулей является то, что если не определить некоторые элементы вектора, то им автоматически присвоится значение 0:
Циклы
while
На рисунке ниже – простейший цикл while, который делает то же самое, что и предыдущий цикл for:
До цикла необходимо создать строку, содержащую определение начального значения счетчика. Следующую строку можно прочитать как «Выполнять цикл, пока соблюдается условие i?n». После определения элемента вектора нужно задать команду на увеличение переменной-счетчика, так как в цикле while это не происходит автоматически.
Другой, более «реалистичный», пример цикла while вычисляет экспоненту отрицательного числа, используя разложения в ряд:
Суммирование будем производить с помощью цикла while. Будем проверять, насколько изменяется общая сумма S при каждом увеличении k. Если абсолютное значение этого изменения достаточно мало, цикл завершится. Чтобы начать цикл, необходимо определить первые два элемента вектора:
Кроме того, мы определили начальное значение суммы S и счетчика k. Дальнейшие вычисления производятся в цикле:
Проверка:
С положительными числами программа работает хорошо, но для работы с отрицательными она не предназначена.
Отладка
Одна из простых технологий отладки программ – вывод промежуточных результатов вычислений и их сравнение с тем, какие значения должны быть. Пример на цикле while:
Число элементов вектора верное, но второй элемент неправильный. Похоже, что последние элементы нашего вектора получили правильный индекс, а второй элемент (с индексом 1) – нет. Мы можем проверить, какой индекс получил второй элемент, вставив «returni» в первую строку цикла while. Программа остановит вычисление и вернет значение i:
Вероятно, Вы уже поняли, что ошибка в первой строке. Замените 2 на 1, удалите дополнительную строку return, и Вы получите верный результат.
Можно получить выходное значение итерации цикла, отличной от первой. Для этого требуется применить оператор условия if. В программе ниже выводится элемент вектора после третьей итерации цикла:
После отладки всегда следует удалять дополнительные строки, которые Вы вводите, так как программа всегда прекращает работу после первого оператора return.
Подпрограммы
Примеры программ в этом уроке малы. Настоящие программы могут быть намного больше. В других языках программирования они обычно составляются как основная программа и следующие за ней подпрограммы и процедуры. Эти более малые программы можно составлять сами по себе и затем вызывать их в основной программе. Также могут быть подподпрограммы и так далее.
Ваша собственная программа
Когда Вы начинаете составлять свою собственную программу, может показаться, что Вы находитесь в замкнутом круге: чтобы начать, нужен опыт; чтобы получить опыт, нужно начать.
Начать необходимо, но не следует начинать с набора команд в Mathcad! Для начала следует подготовиться.
Прежде всего, нужно решить, что делает Ваша программа. Для больших, сложных программ это, как правило, нетривиальная задача. Какие выходные данные нужны, и какие входные для этого необходимы?
Возможно, самая сложная часть – это представление того, как будет получен желаемый результат. Будьте готовы потратить несколько листов бумаги. Нарисуйте различные структурные диаграммы и детализируйте их. Вы знаете следующие элементы:
- Ввод (input)
- Действие (или определение)
- Вывод (output)
- Одиночное ответвление (if..elseили if..if)
- Многократное ответвление (if..if..if)
- Цикл for
- Цикл while
Решите, какие вспомогательные переменные (например, счетчики) необходимы, и какие имена Вы собираетесь им дать. Постарайтесь предусмотреть, где и что может пойти не так и как это можно проверить.
Только когда Вы поняли, что улучшить программу на бумаге больше нельзя, открывайте Mathcad. Остановите все вычисления, затем вводите код. Возможно, это самая простая часть написания программы.
После написания кода программы сохраните файл. Затем нажмите кнопку «Автоматический расчет», чтобы запустить вычисления. Будьте готовы увидеть неверный результат или ошибку – тогда программу придется отлаживать. Сохраняйте файл каждый раз, когда делаете большие изменения.
После запуска программы ее необходимо проверить. Попробуйте обычные входные значения, а также такие значения, с которыми могут возникнуть проблемы. Программа может дать сообщение об ошибке для неверного входного или выходного значения. В завершение подумайте, как можно улучшить программу.
Резюме
- Отключайте вычисления при написании или редактировании программы (Вычисления –> Остановить все расчеты).
- Цикл for – повторяет вычисления определенное количество раз. Цикл forобязательно включает в себя счетчик и число повторений.
- Цикл while – выполняется, пока соблюдается определенное условие. Начальное значение счетчика следует задавать до цикла. В теле цикла изменение счетчика задается вручную.
- Программы почти всегда требуют отладки. Полезная команда для этого – return, с помощью которой можно вывести промежуточное значение.
- Важно подготовиться к написанию программы, например, составив структурную диаграмму до написания непосредственно кода.
Другие интересные материалы
sapr-journal.ru
Иллюстрированный самоучитель по MathCAD 11 › Программирование › Локальное присваивание. Условные операторы. [страница — 98] | Самоучители по математическим пакетам
Локальное присваивание. Условные операторы.
Язык программирования Mathcad не был бы эффективным, если бы не позволял создавать внутри программных модулей локальные переменные, которые «не видны» извне, из других частей документа. Присваивание в пределах программ, в отличие от документов Mathcad, производится с помощью оператора Local Definition (Локальное присваивание), который вставляется нажатием кнопки с изображением стрелки ← на панели Programming (Программирование).
Ни оператор присваивания :=, ни оператор вывода = в пределах программ не применяются.
Локальное присваивание иллюстрируется листингом 6.5. Переменная z существует только внутри программы, выделенной вертикальной чертой. Из других мест документа получить ее значение невозможно.
Листинг 6.5. Локальное присваивание в программе:
Условные операторы (if, otherwise)
Действие условного оператора if состоит из двух частей. Сначала проверяется логическое выражение (условие) справа от него. Если оно истинно, выполняется выражение слева от оператора if. Если ложно – ничего не происходит, а выполнение программы продолжается переходом к ее следующей строке. Вставить условный оператор в программу можно следующим образом (см. рис. 6.8):
- Если необходимо, введите левую часть выражения и оператор присваивания.
- Создайте новую строку программного кода, нажав на панели Programming (Программирование) кнопку Add Line (Добавить строку).
- Нажмите кнопку условного оператора if.
- Справа от оператора if введите условие. Пользуйтесь логическими операторами, вводя их с панели Boolean (Булевы операторы).
- Выражение, которое должно выполняться, если условие истинно, введите слева от оператора if.
- Если в программе предусматриваются дополнительные условия, добавьте в программу еще одну строку нажатием кнопки Add Line и введите их таким же образом, используя оператор if или otherwise.
Оператор otherwise используется совместно с одним или несколькими условными операторами if и указывает на выражение, которое будет выполняться, если ни одно из условий не оказалось истинным. Примеры использования операторов if и otherwise приведены в предыдущих разделах (см. листинги 6.3 и 6.4).
Рис. 6.8. Вставка условного оператора
samoychiteli.ru