ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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
(Формат, Результат)