Файл: Петрозаводский государственный университет.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.12.2023

Просмотров: 179

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

128
Урок 9. Программирование в MathCAD

Пример 9.3.
Пусть числовая матрица A содержит экзаменационные оценки. Оценки различных студентов размещаются в разных строках матрицы A. Требуется установить, сколько всего «неудовлетворительных» оценок получено студентами во время сессии.
Решение:
Neyd A
( )
k
0

k k
1


a
2
if continue a
A

for k


Пример 9.4.
Для заданных N и x вычислите первые N членов ряда, общий член кото- рого задается формулой:
2 1
1
i
x i
a
i



Решение: Предлагаем два варианта построения функции для вычисления членов ряда, первый – с использованием оператора for, а второй – оператора while:
R N x

(
)
a i
x i
1

i
2 1



continue i
1 N


for a

Примеры обращения к функции R(N,x): x
4

N
5

i
1 N


a
R N x

(
)

a i

a
R N
3


(
)

a i


Пример 9.5.
Для заданных N, x0, y0 постройте две числовые последовательности x n и y n
(n
=1,2,…,N), члены которых определяются следующими рекуррентными уравнения- ми:
1 1
,
cos(
2)
n
n
n
n
n
n
x
x
y
y
x
y








 

R N x

(
)
i
1

a i
x i
1

i
2 1



i i
1


i
N

while a


Урок 9. Программирование в MathCAD
129
Решение:
Ru x0 y0

N

(
)
x
0
x0

y
0
y0

x n 1

x n
y n


y n 1

cos x n
2



y n


continue n
0 N


for augment x y

(
)

Функция Ru(x0,y0,N) возвращает матрицу, первый столбец которой составляют члены по- следовательности x n
, а второй – последовательности y n
. При этом нумерация столбцов на- чинается с 0. Пример обращения к функции Ru(x0,y0,N):
x
Ru 1 2

6

(
)
0
 

y
Ru 1 2

6

(
)
1
 

x
T

y
T


Пример 9.6.
Даны действительные числа
, (
0,
0).
x
x




Вычислите беско- нечную сумму
2 1
0
( 1)
!(2 1)
k
k
k
x
k
k






с заданной точностью

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

, тогда это и все последующие слагаемые можно уже не учитывать.
Решение:
S x


 
S
0

k
0

a x

S
S
a


k k
1


a
1

(
)
k x
2k 1


k

2k
1

(
)


a


while
S

S 2 0.001

(
)

S 3 0.00001

(
)

Иногда необходимо досрочно завершить цикл, т. е. не по условию в его заголовке, а в не- которой строке в теле цикла. Для этого предназначен оператор break.

Пример 9.7.
Пусть числовая матрица A содержит экзаменационные оценки. Оценки различных студентов размещаются в разных строках матрицы A. Требуется установить, сколько студентов сдали все экзамены на «хорошо» и «отлично».


130
Урок 9. Программирование в MathCAD
Решение:
S45 A
( )
OR IGIN
1

n rows A
( )

m cols A
( )

k
0

k k
1


k k
1


break
A
i j

4

if continue j
1 m


for continue i
1 n


for k


Пример 9.8.
Имеется информация о наводнениях в Санкт-Петербурге с момента его основания в 1703 году. Пусть каждая строка массива H содержит год, дату и уровень подъема воды (см) зарегистрированного наводнения. Наводнением считается подъем воды в реке Неве в месте измерений до отметки x=160 см и выше. Фрагмент массива H:
1852 1.11 161 1854 5.09 183 1854 5.10 194 1854 27.10 196 1857 8.12 168
Требуется составить программу, с помощью которой можно узнать, в каком году высота наводнения впервые превысила заданный уровень.
Решение: Пусть x – заданный уровень (в см). Программа определения года:
God H x

(
)
OR IGIN
1

n rows H
( )

g
"Th e level was n ot reached"

g
H
i 1


break
H
i 3

x

if continue i
1 n


for g

Примеры обращения к функции God:

Урок 9. Программирование в MathCAD
131
H
T

God H 300

(
)

God H 260

(
)


Упражнение 9.2.
Имеется числовой массив B, элементы которого – это количество баллов, полученных студентами при прохождении теста по информатике. Требуется ус- тановить, сколько студентов получили «зачет», если известна минимальная сумма бал- лов Tmin для его выставления.

Упражнение 9.3.
Известно, что
2 2
1 1
1 2
k
k











Сколько сомножителей надо взять в произведении, чтобы равенство выполнялось с заданной степенью точности


Упражнение 9.4.
Вычислите
3
x
a

для заданного значения a, используя рекур- рентное соотношение:
1 1
2 3
n
n
n
a
x
x
x











и условие
n
x
a

Сколько итераций надо выполнить для достижения заданной погреш- ности

, используя условие
1
n
n
x
x




?
9.5.
Возврат значения (return)
Если для определения переменной или функции применяется программный модуль, то его строки исполняются последовательно при вычислении в документе этой переменной или функции. Соответственно, по мере выполнения программы рассчитываемый результат претерпевает изменения. В качестве окончательного результата выдается последнее при- своенное значение. Чтобы подчеркнуть возврат программным модулем определенного значения, можно взять за правило делать это в последней строке программного модуля
(например, как это сделано в программах рассмотренных выше примеров).
Вместе с тем можно прервать выполнение программы в любой ее точке (например, с помощью условного оператора) и выдать некоторое значение, применив оператор return.
В этом случае при выполнении указанного условия значение, введенное в знакоместо по- сле return, возвращается в качестве результата, а никакой другой оператор больше не вы- полняется.

Пример 9.9.
Составить программу, с помощью которой можно установить, имеет ли система линейных уравнений AX=B решение. В случае существования единственного решения программа должна возвращать решение X, которое находится с помощью фор- мул Крамера.
Решение:


132
Урок 9. Программирование в MathCAD
SLE(A,B)
- функция для решения с ис темы линейных уравнений AX=B методом Крамера
SLE A B

(
)
OR IGIN
1

D
A

N
rows A
( )

H
A

H
i
 
B

d i
H

i
1 N


for sd
1
N
i d
i



"T here is no solution(s)"
return sd
0

(
)
if
"Infinite set of solution(s)"
return sd
0
(
)
if
D
0
if x
i d
i
D

continue i
1 N


for x

Примеры решения уравнения AX=B с помощью функции SLE:
A
1 4
4 2
0 4
0 3
0









B
1 2
0









SLE A B

(
)

A
1 4
4 2
0 0
0 3
3









B
1 2
0









SLE A B

(
)

A
1 1
2 2
0 0
0 2
4









B
1 2
4









SLE A B

(
)


Упражнение 9.5.
Пусть массив H содержит информацию о наводнениях в Санкт-
Петербурге. Описание структуры массива см. в примере 9.8. Составьте программы для ответа на следующие вопросы:
1)
В каком году впервые с начала наблюдений был отмечен самый высокий уровень подъема воды?
2)
Какой была максимальная высота наводнения в заданный год?
3)
В каком году чаще всего регистрировались наводнения?
4)
Какова максимальная высота наводнения в заданный год?

Урок 9. Программирование в MathCAD
133
9.6.
Перехват ошибок (on error)
Программирование в MathCAD позволяет осуществлять дополнительную обработку оши- бок. Если пользователь предполагает, что действие оператора в каком-либо месте про- граммного модуля способно вызвать ошибку (например, деление на ноль), то эту ошибку можно перехватить с помощью оператора on error. В правом знакоместе шаблона операто- ра следует ввести выражение, которое должно выполняться в данной строке программы. В левом – выражение, которое будет выполнено вместо правого выражения, если при вы- полнении последнего возникает ошибка. Пример использования оператора on error: f x
( )
2
x
2

(
)
x
6



g x f

(
)
"not defined"
return f x
( )
on error
"not defined"
return
Im f x
( )
(
)
0

if f x
( )

g 2 f

(
)

g
10

f

(
)

g
6

f

(
)

g 3 f

(
)

В примере функция g(x,f) позволяет вычислять значения функции f(x) только в тех точках x, в которых она определена и является вещественнозначной.
1   ...   7   8   9   10   11   12   13   14   15

9.7.
Пример рекурсивно определенной функции

Пример 9.10.
Составить программу для определения наибольшего общего делителя
(НОД) массива чисел.
Решение:
Построим вспомогательную функцию для нахождения НОД двух чисел, ис- пользуя метод Эвклида:
NOD(a,b)
- функция для определения наибольшего общего делителя двух чисел a и b:
NOD a b

(
)
z if a b

a

b

(
)

y if a b

a

b

(
)

h mod y z

(
)

y z

z h

mod y z

(
)
0

while z

Тогда для нахождения НОД массива чисел можно воспользоваться следующей програм- мой:

134
Урок 9. Программирование в MathCAD
NODarray(A)
- функция для определения наибольшего общего делителя массива чисел A :
NODarray A
( )
d
A
1

d
NOD d A
i




i
1
last A
( )


for d

Примеры обращения к функциям NOD и NODarray:
NOD 48 144

(
)

NOD 60 156

(
)

i
1 5


C
i
12 3
144 36 14

NODarray C
( )

NODarray 45 18 81 27 72
(
)
T




ПРИЛОЖЕНИЕ 1. Примеры MathCAD-документов
135 rad

( )


180


Уравнения траектории снаряда:
x t
( )
vo cos rad

( )
(
)

t


y t
( )
vo sin rad

( )
(
)

t

g t
2

2


Решение:
Найдем момент времени T, когда траектория с наряда перес ечет плос кос ть x=R:
T
R
vo cos rad

( )
(
)


T 1.333

с ек
В этот момент времени координата "y" точки траектории с наряда будет равна:
yR
y T
( )

Попадание в цель будет, ес ли
H
yR

H
P


. Проверим, выполняетс я ли это ус ловие:
usl yR
H

(
)
yR
H
P


(
)


if usl "da"

"no"

(
)
"da"

Уравнение цели: c u
( )
R

u
P P
H



Пос троим траекторию с наряда:
0 5
10 5
10
y t
( )
u x t
( ) c u
( )

Снаряд поразит цель на выс оте:
if usl yR

"no"

(
)
8.609

ПРИЛОЖЕНИЕ 1. Примеры MathCAD-документов
Задача о попадании снаряда в цель
Траектория с наряда, вылетающего из орудия под углом

с начальной с корос тью v o
(м/с ек), опис ываетс я уравнениями:
x vo cos

( )

t

, y vo sin

( )

t

g t
2

2

, где g=9.8 м/с ек
2
, t
- время, с ек.
Задавая v o
и

определить, поразит ли с наряд цель выс отой P, рас положенную в вертикаль- ной плос кос ти с твола орудия на рас с тоянии R и на выс оте H.
Исходные данные:
Начальная с корос ть vo 15

м/с ек
Угол вылета

60

град.
Ус корение с вободного падения g
9.8

м/с ек
2
Характерис тика цели:
Выс ота, м
P
5

Выс ота над поверхнос тью, м
H
4

Рас с тояние до цели, м
R
10

Функция перевода угла из градус ной меры в радианную:


136
ПРИЛОЖЕНИЕ 1. Примеры MathCAD-документов
Кривая, вычерчиваемая с пирографом при:
A 120

B 55

C 50

t
0 0.1

2


n



y t
( )
A
B

(
) sin t
( )

C sin
A
B
t










x t
( )
A
B

(
) cos t
( )

C cos
A
B
t










Параметричес кое задание кривой
:
n
11

n
B
NOD

NOD 5

NOD
i
D
i 1

D
i
0





D
i if D
i 1

0 0

mod D
i 2

D
i 1








i
3
N


N
10

D
2
min A B

(
)

D
1
max A B

(
)

Поис к НОД(A,B):
C
50

B
55

A
120

Параметры с пирографа:
Решение:
Спирограф
- это зубчатый дис к радиус а
B, рас положенный внутр и колес а радиус а
A. Дис к вращаетс я против час о вой с трелки и вс егда находитс я в зацеплении с внешним колес ом.
В дис ке имеетс я небольшое отверс тие на рас с тоянии
C от центра дис ка, в которое помеща- етс я карандаш. Грифель карандаша в процес с е вращения вычерчивает рис унок; вычерчивание заканчиваетс я, когда карандаш возвращаетс я в ис ходное положение.
Уравнение кривой, вычерчиваемой грифелем, в параметричес кой ф орме имеет вид:
x(t)=(A-B)cos t + C cos


, y(t)=(A-B)sin t - C sin

, где

=(A/B )t, CУгол t меняетс я от 0 до 2

n, n равно B, деленному на наибольший общий делитель (НОД) чис ел A и B.
Даны натуральные A, B, C (CПостроение кривой, вычерчиваемой грифелем спирографа
nod 25


ПРИЛОЖЕНИЕ 1. Примеры MathCAD-документов
137
Кривая, вычерчиваемая с пирографом при:
A

B

C

Кривая, вычерчиваемая с пирографом при:
A

B

C

Кривая, вычерчиваемая с пирографом при:
A

B

C


138
ПРИЛОЖЕНИЕ 1. Примеры MathCAD-документов
3a
2


37.699

Задача о нахождении площади поверхности вращения
Найти площадь поверхности, образованной вращением вокруг оси абсцисс
петли линии
2
)
3
(
2 9
x
a
x
y
a




.
Решение:
Перепишем уравнение в следующем виде:
2
)
3
(
9 2
x
a
a
x
y



Очевидно, что данная функция не может быть выражена, как явная. График состоит из двух линий (
y
y
и
0

<
0), поэтому можно ввести две функции: y1(х) и y2(х) соответст- венно.
Для определения границ интегрирования найдѐм точки пересечения графика с осью ОХ
(т. к. линия вращается вокруг оси ОХ). Допустимые значения переменной
0

x
a
2

y1 x
( )
1 3 a x

3a x

(
)


y2 x
( )
y1 x
( )


0 1
2 3
4 5
6 7
2 2
y 1 x
( )
y 2 x
( )
x root y1 x
( )
y2 x
( )

x

0

1

(
)
0

root y1 x
( )
y2 x
( )

x

2

7

(
)
6

Из рисунка видно, что для заданного параметра а=2 получили границы изменения х от 0 до 6.
Как известно, формула для вычисления площади поверхности вращения кривой y = y(x) вокруг оси ОХ имеет вид:







b
a
dx
x
y
x
y
S
2
))
(
(
1
)
(
2

Пусть вращается, например, положительная ветвь петли
0
)
(
1

x
y
S
2


0 6
x y1 x
( )
1
x y1 x
( )
d d






2






d


S
37.699

1 0
1 2
3 4
5 6
7 2
0 2
4
y 1 x
( ) y 2 x
( )

0
x
Если сравним полученный результат с результатом теоретическим:



2 3a
S
, то убедимся в правильности решения:
Замечание. В MathCAD нет символа приближенного равенства. Количество выводи- мых знаков после десятичной запятой может быть изменено с помощью команды
Format, Result
(Формат, Результат)