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

маткад учебник

.pdf
Скачиваний:
1817
Добавлен:
10.02.2015
Размер:
565.34 Кб
Скачать

Для обратного преобразования Фурье повторяются все действия за исключением последнего выбора. Выбирается команда Фурье Обратное.

Прямое и обратное преобразования Лапласа функции f(t) определяются формулами

F (s) = f (t) estdt,

0

σ+ i

f (t) = F (s) estds,

σ− i

где F(s) – функция, все особые точки которой находятся слева от линии Re(s) = σ .

Прямое и обратное преобразования Лапласа с помощью Mathcad осуществляются аналогично преобразованию Фурье.

Примеры использования преобразований Фурье и Лапласа приведены на рис. 37.

6.3. Прямое и обратное z-преобразования

Прямое и обратное z-преобразования функции f (n) определяются формулами

Исходные функции:

 

1

 

 

n

 

 

 

e− α n T

z-преобразования:

 

 

 

z

 

 

z

 

 

 

 

 

z

 

 

 

(z − 1)

 

(z − 1)2

 

 

(z − exp(−α T))

 

 

 

 

 

 

 

Обратные

 

 

 

 

 

 

 

 

 

 

exp(−α T)n

z-преобразования:

 

1

 

n

 

 

 

Исходная функция:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n cos (b n)

 

 

 

 

 

 

 

 

 

 

z-преобразование:

 

 

 

( 2

 

 

 

 

 

 

 

)

 

 

 

 

 

 

 

cos (b) − 2 z + cos (b)

 

 

z

 

 

 

 

 

z

 

 

 

(

4

3

 

 

2

cos (b)

2

2

 

 

)

 

z

− 4 z

cos (b) + 4 z

 

 

+ 2 z

− 4 cos (b) z + 1

Рис. 38. z-преобразования

81

F (z) =

f (n)zn ,

n=0

 

f (n) = 21π i c F (z)zn1dz,

где с – контур, включающий все особенности подынтегрального выражения.

На рис. 38 приведены примеры прямого и обратного z-преобразова- ний.

82

7. ПРОГРАММИРОВАНИЕ

Под программой в Mathcad понимают выражение, состоящее из других выражений и функций. Программы в Mathcad содержат конструкции, во многом подобные программным конструкциям языков программирования: условные передачи управления, операторы циклов, области видимости переменных, использование подпрограмм и рекурсии. Алгоритмические конструкции в ряде Mathcad вводятся не традиционным набором через клавиатуру ключевых слов if, while, for, break, otherwise, on error, continue, return, а нажатием одной из кнопок панели программирования, вызываемой, в свою очередь, нажатием кнопки на панели

Математика.

Нажатие одной из этих кнопок создает на дисплее заготовку соответствующей программной конструкции. Рассмотрим их на примерах.

Для вычисления функции

f (x, w) = lg(xw)

можно использовать ее определение в виде одной строки, и программа в этом случае не нужна, но составление программы позволяет показать, как нужно отделять друг от друга операторы, и как использовать локальный оператор присваивания "← ".

Введите левую часть определения функции f(x, w) и оператор присваивания ":=". Теперь нужно открыть панель программирования и нажать кнопку Add Line или на клавиатуре клавишу ]. Появится вертикальная линия с двумя полями ввода для занесения операторов, образующих программу, рис. 39. В верхнем поле ввода введите [z], нажмите кнопку "← " на панели программирования и введите [x/w]. Последнее поле ввода предназначено для задания возвращаемого функцией значения lg(z).

83

Вычисление функции

f(x, w) :=

z

x

w

 

 

 

log(z)

x

f(x, w) = lg

w

Обратите внимание, что z не определена вне программы, а десятичный логарифм обозначается log.

 

x

 

f(x, w) := log

 

 

 

 

 

 

w

– та же функция, определяемая одной строкой

 

 

 

Вычисление функции с условным оператором

F(x, w) :=

z

x

 

w

 

 

 

0 if x w 0

 

log(z) otherwise

Та же функция в виде одной строки

(if в данном случае набирается на клавиатуре):

 

 

x

F(x, w) := if x w

0, 0, log

 

 

 

 

 

w

Рис. 39. Определение одной и той же функции с помощью программы и через выражение

Для функции f(x, w) в верхнем поле используется условный оператор if (если), определяющий нулевое значение для отрицательных значений выражения под знаком логарифма. Напомним, что логарифм отрицательного числа не определен. Во всех остальных случаях (otherwise) F(x, w) = log(x/w).

84

1. Метод Эйлера

Euler(x1, t1, t2, N, f) :=

x

x1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

t1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

t2 t1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while

t < t2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

x + Df(t , x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

t + D

2. Метод Рунге – Кутты 4 порядка

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RK4(x1, t1, t2, N, f) :=

 

 

 

x

x1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

t1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

t2 t1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while t < t2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k1

f(t , x) D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

k1

 

 

 

 

 

 

 

 

 

 

k2

f

t +

 

 

, x +

 

 

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

k2

 

 

 

 

 

 

 

 

 

 

k3

f

t +

 

 

, x +

 

 

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

k4

f(t + D, x + k3)D

 

 

 

 

 

 

 

 

 

x

x +

1

(k1 + 2k2 + 2k3 + k4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

t + D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пример использования функций Euler и RK4

 

 

 

Дана система уравнений x' = y, y' = 0,1y - x + 2;

 

t1 :=

 

0

 

 

 

x

 

 

f(t , x) :=

 

1

 

 

x1:=

 

0.1x

x

+ 2

 

0

 

 

 

 

 

4.326303921

 

1

0

 

 

Euler(x1, t1, t2,

 

RK4(x1, t1, t2

, N, f) =

N, f) =

 

 

 

 

0.339538702

 

 

 

 

 

0 t2 := 3

N := 1000

4.3160160790.336967211

Рис. 40. Численное решение задачи Коши (иллюстрация цикла while)

85

Mathcad предлагает два вида циклов, отличающихся по способу определения условия завершения цикла. Если цикл должен завершиться по выполнении некоторого условия, причем момент выполнения этого условия заранее неизвестен, то целесообразно использовать цикл типа while. После нажатия кнопки while на экране появляется указанное слово с правым и нижним пустыми прямоугольниками. В правый прямоугольник записывается булево выражение (переменная), управляющее циклом, а в нижний прямоугольник – тело цикла, операторы, которые будут выполняться, пока булево выражение возвращает "Да". Если в цикле цикла более одного оператора, то нужно воспользоваться кнопкой Add Line. На рис. 40 представлены программы численного интегрирования дифференциального уравнения методом Эйлера (пункт 1) и методом Рунге – Кутты 4-го порядка (пункт 2). Ядро программ – цикл

sum(n) :=

 

s

 

 

 

 

n := 44

 

 

 

0

 

 

 

 

n

 

 

 

 

for

i 1.. n

 

эквивалентно оператору

i = 990

 

 

 

 

s

s + i

 

 

 

 

i =1

 

sum(44) = 990

 

 

 

 

 

 

 

 

join(r, s) :=

 

m

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for

x r, s

 

 

 

 

 

 

 

 

 

 

 

v m

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m m + 1

 

 

 

 

 

 

 

 

v

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

10

 

 

 

 

 

 

 

2

 

 

 

 

 

 

1

 

 

 

 

r :=

11

 

 

 

join(r, s) =

10

 

 

 

 

 

s :=

 

 

 

 

 

 

 

 

 

2

 

 

11

 

 

 

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

 

 

Рис. 41. Использование цикла типа for с переменными цикла двух различных видов

86

while. Созданные программные функции Euler и RK4 возвращают значение вектора x(t2) для системы уравнений x = f (t, x).

Аргументы функций Euler и RK4: x1 – вектор начальных условий для момента времени t1, N – число шагов интегрирования, f – правая

insimp(f , a , b , N) :=

s

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

b a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

 

for

i 1.. N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

φ← f(a w + i w) + 4 f a

 

 

+ i w + f(a + i w)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

s

s + w φ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

s

 

 

 

 

 

 

 

 

 

 

 

 

 

Функция интегрирования с адаптивным выбором шага

 

 

 

adapt (f , a , b) :=

 

x

insimp(f , a , b , 10)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x if

 

x insimp(f , a , b , 5)

 

TOL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a + b

 

 

 

a + b

 

 

 

 

 

adapt

f , a ,

 

 

+ adapt

f ,

 

, b

otherwise

 

 

 

 

 

 

 

 

 

2

 

 

 

2

 

 

 

Точность интегрирования адаптивным алгоритмом определяется постоянной TOL, а методом Симпсона - количеством шагов N.

TOL = 1 × 103

f(x) := log(x) sin(x)

adapt (f , 1015, 1)= −0.1040653749

insimp(f , 1015 , 1, 100)= −0.1041480801

Рис. 42. Использование рекурсивных определений функции

87

часть системы дифференциальных уравнений. Напомним, что в среде Mathcad имеется встроенная функция rkfixed. В качестве упражнения рекомендуется доработать функции Euler и RK4 так, чтобы они возвращали решение не только в конечной точке t2, но и на всем интервале интегрирования.

Цикл типа for является циклом, число выполнений которого определено заранее. Число выражений определяется переменной цикла, задаваемой в его начале. На рис. 41 приведено два примера использования цикла. После щелчка на кнопке for на экране справа от имени команды появляется знак " ", окруженный пустыми прямоугольниками. Cправа от знака " " вводится либо диапазон значений переменной цикла, как это показано при вычислении sum(n), либо список скаляров, диапазонов и векторов, разделенных запятыми. При определении функции join(r, s) переменная цикла определена списком элементов векторов.

Одним из путей, которые позволяют избежать нагромождения сложных программных конструкций, является перенесение сложностей в подпрограммы. На рис. 42 показано, как это можно сделать в Mathcad. Определив отдельно программу численного определения интеграла по методу Симсона insimp, можно сделать программу вычисления интеграла с заданной точностью значительно проще. Определение adapt стало бы значительно более громоздким, если бы оба вхождения в него нужно было бы заменить очень длинным определением intsinp, приведенным в верхней части рисунка. Функция adapt осуществляет адаптивное интегрирование, используя insimp для аппроксимации площади на каждом подынтервале интегрирования. Из последней строчки видно, что функция adapt вызывает сама себя, т. е. определена рекурсивно.

Библиографический список

1.Дьяконов В. Mathcad 2000: учебный курс. СПб.: Питер, 2001. 592 с.

2.Кудрявцев Е. М. Mathcad 2000 Pro. М.: ДМК Пресс, 2001. 576 с.

3.Гурский Д. А. Вычисления в MathCAD. Минск: Новое знание, 2003. 814 с.

4.Плис А. И., Сливина Н. А. MathCAD: математический практикум для экономистов и инженеров: Учеб. пособие. М.: Финансы и статистика, 1999. 656 с.

5.Херхагер М., Партолль Х. MathCAD 2000. Полное руководство. Киев: Ирина, 2000. 416 с.

88

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]