Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Воскобойников Задорожный Основы MathCAD

.pdf
Скачиваний:
150
Добавлен:
10.02.2015
Размер:
1 Мб
Скачать
☆

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