Воскобойников Задорожный Основы MathCAD
.pdf
d2 |
(u(t) |
|
2 |
v(t ) |
d2 |
v(t) |
|
4 |
v(t) − 2 u(t) |
||
|
|
|
|
|
|
||||||
dt2 |
|
dt2 |
|
||||||||
|
|
|
|
|
|
|
|
||||
|
|
1.5 |
|
|
|
y1 |
|
|
|
|
1.5 |
|
|
|
2 y2 |
|
|
y := |
|
|
D(x,y) := |
|
|
|||
|
1 |
|
|
y3 |
|
|||
|
|
|||||||
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
4 y2 − 2 y0 |
|||
Z := rkfixed(y ,0,1,100,D)
Задание 10.1. Решить дифференциальное уравнение
y''(x) + x2 y' + x y(x) cos (x) при граничных условиях y’(0)=3, y(0)=8; найдем значения y и построим график решения.
Задание 10.2. Решить систему дифференциальных уравнений x’(t)+y(t)=0, y’(t)-z(t)=0, z’(t)-x(t)=0
при условиях:
x(-1)=0, x(-1)=-10, y(-1)=-10, y’(-1)=10.
x''(t) + y(t) |
|
0 |
y'(t) − z(t) |
|
0 |
z'(t) − x(t) |
|
0 |
|
|
|||||
|
|
|
|||||||||||||
|
|
|
|||||||||||||
x(−1) |
|
0 |
x'(−1) |
|
−10 |
y(−1) |
|
−10 |
y'(−1) |
|
10 |
||||
|
|
|
|
||||||||||||
|
|
|
|
||||||||||||
ТЕМА 11. ПРОГРАММИРОВАНИЕ
Программы в MathCAD – это просто выражения, порядок вычисления которых задан в виде последовательности нескольких простых шагов. Такое задание выражений часто оказывается проще, чем написание обычных выражений с множеством вложенных скобок. Программа в MathCAD представляется в виде подпрограммыфункции. В этой теме будут рассмотрены вычисления с использованием подпрограммы-функции.
11.1. Описание подпрограммы-функции и локальный оператор присваивания
Перед тем как использовать подпрограмму-функцию (П-Ф), нужно ее задать, т.е. выполнить описания. Описание П-Ф размещается в рабочем документе перед ее вызовом и включает в себя имя подпрограммы-функции, список формальных параметров (который может отсутствовать) и тело подпрограммы-функции. Задание П-Ф выглядит следующим образом:
< имя П-Ф > (< список фактических параметров >). Для ввода конструкций в тело П-Ф используется палитра инструментов.
Основные элементы, формирования П-Ф это:
• Add Line – создает и при необходимости удлиняет жирную вертикальную линию, с право от которой записывается программный блок;
• ← - символ локального (в теле модуля) присваивания.
Остальные элементы предназначены для управления ходом программы. Мы рассмотрим их в дальнейшем.
103 |
104 |
Для ввода в рабочий документ описания П-Ф необходимо выполнить следующие действия:
•ввести имя П-Ф и список формальных параметров, заключенный в круглые скобки ;
•ввести символ “:” – на экране отображается как “: =”;
•открыть палитру Программирование и щелкнуть кнопкой Add line (см. рис. 11.1.1). На экране появится вертикальная черта и вертикальный столбец с двумя полями для ввода операторов, образующих тело П-Ф (см. рис. 11.1.2);
|
Имя подпрограммы- |
|
Поле 1 |
|
функции |
|
|
|
|
|
f(x) |
|
|
|
|
|
Поле 2 |
|
|
|||
|
Формальный параметр
Рис. 11.1.2. Структура подпрограммы-функции
• перейти в поле 1 (щелкнув на нем мышью или нажав клавишу [Tab]) и ввести первый оператор тела П-Ф.
Так как самое нижнее поле всегда предназначено для возвращаемого П-Ф значения, то поля ввода для дополнительных операторов открываются с помощью щелчка на кнопке Add line палитры Программирование (см. рис. 11.1.3). При этом поле ввода добавляется внизу выделенного к этому моменту оператора. Для удаления того или иного оператора или поля ввода из тела П-Ф нужно заключить его в выделяющую рамку и нажать клавишу [Delete];
Пример 11.1. Выполним вычисление значения
a :
•Введем имя П-Ф f;
•Щелкнем кнопкой Add line,
Впервое поле введем функцию присвоения, во второе функцию вычисления.
f := x ← 25
x
f = 

Пример 11.2. Выполним вычисление значения f(x). Ведем значение функции:
f(x) := |
|
x ← x + 2 |
Оператор 1 |
|||
|
||||||
|
|
|
|
|
|
|
|
|
|
1 |
|
|
Оператор 2 |
|
|
z ← x3 |
|
|
||
|
|
|
|
|||
|
|
|
Поле 3 |
|||
|
|
z |
|
|||
|
|
|
|
|||
|
|
|
|
|||
Втретье поставим возвращаемую переменную z.
11.2.Программирование линейных алгоритмов
в подпрограмме-функции
Напомним, что под линейным алгоритмом понимается вычислительный процесс, в котором необходимые операции выполняются строго последовательно. Операторы, реализующие этот алгоритм, в теле П-Ф также размещаются последовательно и выполняются все, начиная с первого и заканчивая последним.
Пример 11.2.1. Оформим в виде П-Ф вычисление корней квадратного уравнения ax2 + bx +c = 0 по формуле
x1,2 = −b (b2 −4ac)1/ 2 .
2a
Описание П-Ф root_poly2 и обращение к ней приведено на рис. 11.5.1. П-Ф имеет три входных формальных параметра – коэффициенты квадратного уравнения. Выходом является вектор с двумя компонентами. Заметим, что величины x1, x2 являются простыми переменными, а не элементами одномерного массива. Поэтому нижние индексы в их именах вводятся после нажатия клавиши [.] – «десятичная точка». Подпрограмма-функция реализует линейный алго-
ритм – все операторы выполняются всегда строго последовательно. ♦
105 |
106 |
root_poly2 (a ,b ,c) := |
d ← |
b2 − 4 a c |
|
|
||||
|
x1 ← |
|
−b + d |
|
|
|
||
|
2 a |
|
|
|||||
|
|
|
|
|
|
|
||
|
x2 ← |
|
−b − d |
|
|
|
||
|
2 a |
|
|
|||||
|
|
|
|
|
|
|
||
|
|
x |
1 |
|
|
|
||
|
|
|
|
|
|
|||
|
|
x |
2 |
|
|
|
||
|
|
|
|
|
|
|||
z := root_poly2 (12 ,7 ,10) |
|
|
|
−0.292 |
+ 0.865i |
|
||
|
|
|
z = |
|
|
|||
|
|
|
|
|
−0.292 |
− 0.865i |
|
|
Рис. 11.2.1. Пример программирования линейного алгоритма
11.3. Программирование разветвляющихся алгоритмов в подпрограмме-функции
Напомним, что в разветвляющихся алгоритмах присутствует несколько ветвей вычислительного процесса. Выбор конкретной ветви зависит от выполнения (или не выполнения) заданных условий на значения переменных алгоритма.
Для программирования разветвляющихся алгоритмов в подпро- грамме-функции MathCAD можно использовать условную функцию и условный оператор if. Используя эти конструкции, можно «изменить» последовательное выполнение операторов. Условная функция if была рассмотрена в п. 3.2, поэтому перейдем к изучению условного оператора if.
Условный оператор. Этот оператор используется только в теле П-Ф и для его ввода необходимо щелкнуть на кнопке if палитры ПРОГРАММИРОВАНИЕ. На экране появляется конструкция с двумя полями ввода, изображенная на рис. 11.2.1.
Поле 2
if
Поле 1
Рис. 11.3.1. Структура условного оператора if
В поле 2 вводится логическое выражение УСЛ (в простейшем случае это выражение отношений). В поле 1 вводится конструкция ВЫР1 (как правило, арифметическое выражение), которая выполняется, если проверяемое логическое выражение принимает значение 1. Если УСЛ = 0, то ВЫР1 не выполняется. Это соответствует условной структуре, называемой ЕСЛИ – ТО.
Для получения условной структуры ЕСЛИ – ТО – ИНАЧЕ используется оператор otherwise, вводимый с палитры Программирование, в поле которого размещается конструкция ВЫР2, которая выполняется, если проверяемое логическое выражение принимает значение 0 (см. рис. 11.2.2). Оператор otherwise непосредственно следует после условного оператора if.
if
otherwise
Рис. 11.3.2. Реализация структуры ЕСЛИ – ТО – ИНАЧЕ
Для ввода ВЫР2 в поле оператора otherwise необходимо:
•выделить поле, стоящее после оператора if;
•щелкнуть на кнопке otherwise палитры Программирование;
•в появившееся поле оператора otherwise ввести необходи-
мую конструкцию ВЫР2.
Пример 11.3.1. Составим описание П-Ф, вычисляющей функцию y(x). Значение переменной y зависит от значений переменной x и определяется выражением:
x2 , |
если x ≤ 0; |
|
y = |
x, |
в противном случае. |
|
||
Описание и вызов П-Ф приведены на рис. 11.3.3.
107 |
108 |
y( x) := x2 if x ≤ 0
x otherwise
y(2) = 1.414 |
y(−4) = 16 |
Рис. 11.3.3. Реализация разветвляющегося алгоритма.
Пример 11.3.2. Составим описание П-Ф для вычисления переменной z(t) по формуле
t3 , t < −3; z(t) = ln(t), t > 4;
t2 , − 3 ≤ t ≤ 4.
Описание П-Ф и ее вызов приведены на рис. 11.2.4.
z(t) := |
t3 |
if t ≤ −3 |
|
|
t2 |
if −3 ≤ t ≤ 4 |
|
|
ln(t) otherwise |
|
|
z(−8) = −512 |
z(2) = 4 |
z(7 ) = 1.946 |
|
Рис. 11.3.4. Реализация разветвляющегося алгоритма
Из описания видно, что функция z(t) получит значение ln(t)
только тогда, когда не выполняются условия, записанные в двух вышестоящих строках тела П-Ф.
Внимание! Если в строке 3 ввести просто ln(t), то это выражение будет вычисляться всегда вне зависимости от выполнения заданных выше условных операторов.
Задание 11.3.1. Составьте описания П-Ф, реализующих следующие разветвляющиеся алгоритмы:
109
|
|
1 |
, если x ≥1; |
|
|
|
|
|
2 |
x |
|
А.y= 1 |
3 |
x, если 0 ≤ x ≤1; |
|
|
3 |
|
|
|
|
|
|
|
1 |
4 |
x , еслиx < 0. |
|
|
||
|
4 |
|
|
|
|
|
|
1 |
, если |
x − y |
|
|
|
|
|
||
Б. |
|
2 |
|
x +1 |
|
|
μ(x,ε) = |
|
|
|
|||
|
1 |
3 |
x + y, если |
x − y |
||
|
|
|
|
|||
|
3 |
|
|
|
|
|
<ε;
≥ε,
где y = x .
Рассмотрим использование условного оператора if при программировании более сложных разветвляющихся алгоритмов. Выделим следующие варианты.
Пример 11.3.3. Составьте описание П-Ф, вычисляющей значения двух полиномов x(t), y(t) нулевой или первой степени. Порядок полиномов задается переменной n. Если n < 0 или n > 1, то значения полиномов равны 0. Описание П-Ф приведено на рис. 11.2.7. Обратите внимание, что коэффициенты полиномов передаются через массивы a, b, а в полях условных операторов находятся не арифметические выражения, а локальные операторы присваивания. ♦
poly (n,a ,b ,t) := if n
0
x← a0
y← b0 if n
1
x← a0 + a1 t
y← b0 + b1 t
otherwise x ← 0
y ← 0
x
y
110
Рис. 11.3.5. Реализация алгоритма примера 11.2.3 Задание 11.3.2. Даны три числа a, b, c. Составить П-Ф, реали-
зующую следующий алгоритм. Если a ≤ b ≤ c , то все числа заменить их квадратами, если a > b > c , то каждое число заменить максимальным значением из этих трех чисел, в противном случае — сменить знаки у чисел.
Задание 11.3.3. Координаты точки на плоскости задаются двумя числами x, y. Составить П-Ф, вычисляющую номер четверти на плоскости, в которую попала точка.
Задание 11.3.4. Длина сторон треугольника задается числами a, b, c. Составить П-Ф, вычисляющую значение целой переменной n по следующему правилу: n = 3, если три стороны равны; n = 2, если любые две стороны равны; n = 1, если все три стороны имеют разную длину.
11.4. Программирование цикла типа арифметической прогрессии.
Напомним, что циклические алгоритмы (циклы) содержат повторяющиеся вычисления, зависящие от некоторой переменной. Такая переменная называется параметром цикла, а сами повторяющиеся вычисления составляют тело цикла.Для программирования таких циклов используется оператор цикла for (часто называемый оператором цикла с параметром). Для ввода такого оператора необходимо выполнить следующие действия:
• щелкнуть на кнопке for палитры Программирование. На экране появятся поля ввода, изображенные на рис. 11.4.1;
Поле 1 |
|
|
|
|
|
|
Поле 2 |
|
|
|
|
|
|
|
|
for |
|
|
|
|
|||
|
|
|
Поле |
||||
|
|
||||||
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 11.4.1. Поля оператора цикла for
• в поле ввода 1 ввести имя переменной, являющейся параметром цикла;
•в поле 2 — закон изменения параметра цикла, используя для этого описание дискретной переменной или описание массива;
•в поле 3 — операторы, составляющие тело цикла. Если одной строки недостаточно, то дополнительные поля ввода (дополнительные строки) создаются щелчком на кнопке Add line палитры Программирование, и тогда слева от тела цикла появляется вертикальная черта, охватывающая тело цикла.
Пример 11.4.1. Составить описание П-Ф, которая формирует вектор z из n элементов, определяемых соотношением:
zi = (i +1 4) , i = 1, …, n; n = 10.
В этом примере i – параметр цикла, а тело цикла (вычисление элементов zi ) будет повторено n = 10 раз, т.е. алгоритм является цик-
лом типа арифметической прогрессии.
Описание П-Ф и ее вызов приведены на рис. 11.4.2. Заметим, что значение системной переменной ORIGIN (начальное значение индексного выражения) задается равным 1. ♦
form_vec1 (n) := |
|
for i 1 .. n |
|
0.5 |
|
|
|
|
0.2 |
|
|||
|
|
|
|
|||
|
|
zi ← |
1 |
form_vec1 (5) = |
0.1 |
|
|
|
|||||
|
|
i2 + 1 |
|
0.059 |
||
|
|
|
|
|
|
|
|
|
z |
|
|
0.038 |
|
|
|
|
|
|
|
|
Рис. 11.4.2. Подпрограмма-функция формирования вектора
Рассмотрим более сложный пример, когда тело цикла состоит из последовательности операций.
Пример 11.3.2. Для x меняющегося от -2 до 2 с шагом 0.5 вычислить значение f(x) = e-x. Cos (2x) и сформировать из этих значе-
ний вектор y, т.е. y1 = f(-2), y2 = f(-1.5) и т.д.
В этом примере количество повторений тела цикла определяется по формуле
111 |
112 |
xk |
− x0 |
|
+ 1, |
где xk, x0 – конечное и начальное значения пара- |
||
метра цикла, d – шаг его изменения. Подставив |
||||||
|
|
|
|
|||
|
|
|||||
|
d |
|
|
значения, получаем (2–(–2))/0.5+1=9. Следова- |
||
тельно, сформированный вектор y будет содержать 9 элементов. Необходимо отметить, что алгоритм формирования содержит два параметра цикла: первый параметр – переменная x, определяющая текущее значение аргумента функции f(x); второй – это переменная i, определяющая текущее значение индекса у элемента формируемого вектора. Но между этими двумя параметрами имеется однозначное соответствие, поэтому цикл нужно организовывать только по одному параметру, например, по переменной x, а значение второго параметра будет вычисляться в теле цикла.
Введем имя П-Ф, символ присвоить (:=) и дважды щелкнем по Add |
||||
Line, чтобы сформировать три поля: |
||||
form_vec2 |
(x0 , xk ,d) := |
|
|
|
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
Установим начальное значение переменной i: |
||||
form_vec2 |
(x0 , xk ,d) := |
|
i ← 1 |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Введём из панели Программирование функцию for и заполним её поля:
form_vec2 (x0 , xk ,d) := i ← 1 for 



Для формирования цикла щелкнем по Add Line:
form_vec2 (x0 , xk ,d) := i ← 1
for x x0, x0 + d .. xk
Заполним тело цикла и заканчиваем программный модуль. В теле цикла выполняется два оператора. Первый оператор формирует элемент массива y, а второй изменяет на 1 значение индекса:
form_vec2 (x0 , xk ,d) := |
|
i ← 1 |
||||
|
||||||
|
|
for |
x x0 , x0 + d .. xk |
|||
|
|
|
|
|
yi ← e− x cos(2 x) |
|
|
|
|
|
|||
|
|
|
|
|
i ← i + 1 |
|
|
|
y |
z := form_vec2 (0,0.8 ,0.1) |
|||
|
|
|
||||
zT = ( 1 0.887 0.754 |
0.611 |
0.467 0.328 0.199 0.084 −0.013 ) |
||||
Рис. 11.4.3. Формирование вектора примера 11.4.2
Пример 11.4.3. Составить описание П-Ф, где значения параметра цикла задаются вектором.
На рис. 11.4.4 приведено описание такой П-Ф.
sum_vec_3 := S ← 0
|
|
|
|
|
2 |
|
|
|
|
|
|
for |
i |
5 |
|
Обращение |
|
|
|
||||
|
|
|
|
|
7 |
|
|
к П-Ф |
|
|
|
|
|
|
|
|
|
|
S |
← S |
+ i |
||
|
sum_vec_3 |
= |
|
||||
|
|
S |
|
|
|
||
|
|
|
|
||||
|
|
|
|
|
|
|
|
Рис. 11.4.4. Описание П-Ф примера 11.4.3 |
|
|
|||||
113 |
114 |
Задание 11.4.1. Составьте описание П-Ф формирования суммы элементов ряда в заданном интервале. Границы a и b интервала ввести в качестве формальных параметров П-Ф.
11.5. Программирование итерационных циклов.
Для программирования таких циклов используется оператор цикла while. Для ввода этого оператора необходимо выполнить следующие действия:
• щелкнуть на кнопке while палитры Программирование. На экране появляются элементы, показанные на рис. 11.3.5;
|
|
|
|
|
Поле 1 |
|
while |
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
Поле 2 |
|
||
|
||||||
|
||||||
|
|
|
|
|
|
|
|
Рис. 11.5.1. |
Структура оператора цикла while |
||||
|
||||||
|
||||||
•в поле 1 ввести условие выполнения цикла;
•в поле 2 ввести операторы тела цикла. В теле цикла должны присутствовать операторы, которые могут изменить значение условия цикла, иначе цикл будет продолжаться бесконечно.
Оператор цикла while выполняется следующим образом: обнаружив оператор while, MathCAD проверяет указанное в операторе условие. Если оно равно 1 (т.е. выполняется), то выполняется тело цикла, и снова проверяется условие. Если условие принимает значение 0, то цикл заканчивается.
Пример 11.5.1. Составим П-Ф, реализующую итерационную процедуру приближенного вычисления корня квадратного. Вычис-
лить приближенное значение
а , используя итерационную процедуру:
x |
n+1 |
= 0.5 (x |
n |
+ |
a |
), n = 0, 1, ... ; x = a. |
|
||||||
|
|
|
0 |
|||
|
|
|
|
|
xn |
|
В качестве приближенного значения
а принимается xn+1 , удовлетворяющее условию:
x2 |
− a |
≤ε , |
n+1 |
|
|
где ε – заданная точность вычисления корня квадратного.. Описание П-Ф приведено на рис. 11.3.6.
Как видно из текста, П-Ф нет необходимости хранить в памяти все приближенные решения x0, x1, x2. Достаточно хранить предыдущее («старое») значение (обозначим его как xc) и последующее («новое») значение xn.
К сожалению, организация итерационного цикла с помощью оператора while без дополнительных средств контроля может привести к зацикливанию, т.е. повторению тела цикла «бесконечное» число раз. Например, задав при обращении к П-Ф ε < 0, получаем зацикливание.
sqroot (a ,ε) := |
|
xn ← a |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|||||
|
|
while |
|
xn2 − a |
|
|
> ε |
|
|||||
|
|
|
|||||||||||
|
|
|
xc ← xn |
a Вызов подпрограммы-функции |
|||||||||
|
|
|
|||||||||||
|
|
|
|
|
|
xc + |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
xn ← |
xc |
|
|
|||||||
|
|
|
|
|
|
sqroot (9 |
,0.1) = 3.00009 |
||||||
|
|
|
|
|
|
|
|
|
|||||
2 |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
sqroot (9 |
,0.0001 ) = 3.00000 |
|
|
|
xn |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
||||
Рис. 11.5.2. Реализация итерационного цикла примера
11.5.1.
Поэтому в MathCAD имеется специальный оператор break, который позволяет выйти из цикла или приостановить исполнение
115 |
116 |
программы при выполнении заданного в операторе break условия. Для ввода оператора break необходимо щелкнуть на кнопке break панели Программирование (нельзя вводить этот оператор с клавиатуры по символам). Оператор break используется в левом поле ввода условного оператор if, а в правом размещается условие, при выполнении которого происходит прекращение работы цикла или про-
граммы. Поэтому первоначально вводится оператор if, а затем за-
полняются поля этого оператора. Следующий пример показывает написание подпрограммы без «зацикливания» с использованием оператора break.
Пример 11.5.2. Составим П-Ф, реализующую итерационную процедуру вычисления корня квадратного без «зацикливания». Описание П-Ф приведено на рис. 11.5.3.
В этой подпрограмме число повторений тела ограничено 10000. Если за это число итераций приближенное значение корня с заданной точностью не найдено, то параметр ierr – индикатор ошибки получает значение 1, что говорит об ошибке в вычислительном процессе. Для передачи двух вычисленных значений xn, ierr используется вектор. Если ierr = 1, то переменной xn присваивается значение строковой константы “not solve” для привлечения внимания пользователя к ошибочному завершению работы П-Ф. Заметим, что после обращения к П-Ф необходимо обязательно проверить значение индикатора ошибки ierr и, в зависимости от его значения, либо продолжить работу с вычисленным значением корня квадратного, либо прекратить дальнейшие вычисления и определить причину появления ошибки.
|
sqroot_new (a ,ε) := |
|
xn ← a |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
ierr ← 1 |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
for i 1 .. 10000 |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
if |
|
xn2 − a |
|
< ε |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
ierr ← 0 |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
Вызов подпрограммы-функции |
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
3 |
|
|
|
|
|
|
|
xc ← xn |
|
|
|
|
|
|
|
|||
sqroot_new (9 ,0.0001 ) = |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
xc + |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
"not solve" |
|
|
|
|
xn ← |
xc |
|||||||||||
sqroot_new (9 ,−0.0001 ) = |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
1 |
|
2 |
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
xn |
|
← "not solve" if ierr |
|
1 |
||||||||||
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
xn |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
ierr |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Рис. 11.5.3. Реализация итерационного цикла без «зацикливания»
11.6. Программирование двойных циклов.
Напомним, что элементы матриц (двумерных массивов) имеют два индекса: первый индекс определяет номер строки, а второй – номер столбца, на пересечении которых находится указанный элемент. Например, запись A2,4 – означает обращение к элементу,
стоящему на пересечении второй строки и четвертого столбца. Поэтому в общем случае для работы с матрицами необходимо использовать так называемый двойной цикл, у которого тело одного цикла, называемого внутренним, «вкладывается» в тело другого – «внешнего» цикла. Каждый из этих циклов имеет свой параметр: параметр внешнего цикла и параметр внутреннего цикла. Следовательно, для организации такого двойного цикла необходимо использовать два оператора цикла, один из которых размещен в теле другого (различные варианты вложений операторов цикла приведены на рис. 11.6.1).
117 |
118 |
for |
|
|
|
|
|
for |
|
|
|
|
|
while |
|
|
|
||||
|
|
|
|
|
|
|
|
||||||||||||
for |
|
|
|
while |
|
|
|
for |
|
|
|
||||||||
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 11.6.1. Варианты вложений операторов цикла
Пример 11.6.1. Составить описание П-Ф формирующей матрицу по следующему правилу:
Bi, j = |
1 |
|
, i =1,..., n; j =1,..., m . |
|
i + j +1 |
||||
|
|
|||
Описание и вызов П-Ф приведены на рис. 11.6.2. В этой П-Ф параметром внешнего цикла является переменная i, а параметром внутреннего — переменная j. ♦
ORIGIN := 1 |
|
form_mat1 (n,m) := |
for i 1 ..n |
|
|
|||||
|
|
|
|
|
|
|
for j 1 .. m |
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
0.333 |
0.25 |
|
|
Bi , j ← |
|
|
||
|
|
0.25 |
0.2 |
|
|
i + j |
+ 1 |
|||
|
|
|
|
|
||||||
form_mat1 (4 ,2) = |
|
B |
|
|
|
|||||
|
|
|
|
|
|
|
|
|
||
|
|
0.2 |
0.167 |
|
|
|
|
|
||
|
|
0.167 |
0.143 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
Рис. 11.6.2. Реализация двойного цикла примера 11.6.1
Пример 11.6.2. Составить описание П-Ф, вычисляющей факториал числа n ≥ 0 по формуле
n! =1 2 3 n .
ОПИСАНИЕ П-Ф С ИСПОЛЬЗОВАНИЕМ ОПЕРАТОРА ПРОИЗВЕДЕНИЯ ПРИВЕДЕНО НА РИС. 11.6.2.
F1(n) := 0 if n ≤ 0
n |
F1(5) = 120 |
|
∏ i |
otherwise |
F1(−3) = 0 |
i = 1 |
F1(0) = 0 |
|
|
|
Рис. 11.6.3. Вычисление факториала числа n
Описание П-Ф с использованием итерационного цикла и оператора break приведено на рис. 11.6.4. Обратите внимание на запись условия в операторе while, а именно while 1, что обеспечивает повторение тела цикла до тех пор, пока не выполнится условие n = 1, что приведет к выполнению оператора break и выходу из цикла.
F2(n) := f ← 0 if n ≤ 0 |
|
otherwise |
|
f ← n |
|
while 1 |
|
f ← f (n − 1) |
|
n ← n − 1 |
|
break if n |
1 |
f |
F2(5) = 120 |
Рис. 11.6.4. Вычисление факториала числа n
Задание 11.6.1. Дана матрица A размерности n ×m . Соста-
вить П-Ф, формирующую вектор, i-й элемент равен среднему арифметическому i-й строки матрицы.
119 |
120 |
Задание 11.6.2. Дана матрица A размерности n ×m . Составить П- Ф, вычисляющую сумму и количество только тех элементов матрицы, которые удовлетворяют условию Ai, j ≥ ε , где ε — задаваемая
величина.
Задание 11.6.3. Имеется экзаменационная ведомость студенческой группы из n = 20 человек по m = 5 дисциплинам. Оценки из этой ведомости занесены в матрицу размерности n ×m . Составить П-Ф, вычисляющую число студентов, получивших только четверки и пятерки. ●
Задание 11.6.4. Имеется экзаменационная ведомость студенческой группы из n = 20 человек по m = 5 дисциплинам. Оценки из этой ведомости занесены в матрицу размерности n ×m . Составить П-Ф, вычисляющую средний балл по каждой дисциплине. ●
ЗАКЛЮЧЕНИЕ
В данном пособии авторы стремились изложить основы программирования в пакете MathCAD и продемонстрировать основные возможности пакета Mathcad для выполнения научно-инженерных расчетов и графического представления их результатов.
К сожалению, ограниченный объем учебного пособия не позволил уделить внимание ряду важных возможностей пакета. Для дополнительного и глубокого изучения следует обратиться к литературе, представленной в библиографическом списке и др.
Авторы желают читателям (особенно студентам и аспирантам), чтобы пакет MathCAD стал для них «дружелюбным и незаменимым» помощником в решении широкого круга научно-инженерных задач.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1.Дьяконов В.П. MathCAD 8-12 для студентов. Серия «Библиотека студента». – М.: СОЛОН-Пресс, 2005. – 632 с.
2.Дьяконов В.П. Компьютерная математика. Теория и практика / В.П. Дьяконов. – М.: Изд-во Нолидж, 2001. – 296 с.
3.Дьяконов В.П. MathCAD2000: Учебный курс / В.П. Дьяконов. –
СПб: Питер, 2000. – 596 с.
4.Дьяконов В.П. MathCAD 8 Professional в математике, физике и Internet / В.П. Дьяконов, И.В. Абраменконова. – М.: Нолидж, 1999. – 512 с.
5.Дьяконов В.П. Matlab: Учебный курс / В.П. Дьяконов. – СПб:
Питер, 2001. – 560 с.
6.Потемкин В.Г. Система инженерных и научных расчетов Matlab 5.x.: В 2-х т. – М. ДИАЛОГ–МИФИ, 1999. – 672 с.
7.Дьяконов В.П. Mathematica 4: Учебный курс / В.П. Дьяконов. –
СПб: Питер, 2000 – 482 с.
8.Дьяконов В.П. Математическая система Maple V R3/R4/R5 / В.П. Дьяконов. – М.: Солон, 1998. – 381 с.
9.Воскобойников Ю.Е. Программирование в математическом пакете MathCAD. Методические указания / Ю.Е. Воскобойников, Т.Н. Воскобойникова. – Новосибирск: Изд-во НГАСУ, 1999. – 32 с.
10.Кирьянов Д.В. Самоучитель MathCAD2001 / Д.В. Кирьянов. –
СПб.: БХВ-Петербург, 2002. – 459 с.
11.Очков В.Ф. Советы пользователям MathCAD / В.Ф. Очков. – М.:
Изд-во МЭИ, 2001. – 196 с.
12.Макаров Е.Г. Инженерные расчеты в MathCAD. Учебный курс. - СПб: Питер, 2005. – 448 с.
121 |
122 |
