Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MathCad_2000.pdf
Скачиваний:
27
Добавлен:
17.02.2016
Размер:
838.59 Кб
Скачать

12. ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ И СИСТЕМЫ

12.1. Методы решения

Начиная с версии 5 в систему MathCad введены функции для решения дифференциальных уравнений и систем численными методами. Применение этих функций требует выполнения ряда вспомогательных операций и учёта особенностей каждой из них. Далее рассматривается решение обыкновенных дифференциальных уравнений (ОДУ), представленных в форме Коши.

Решение обыкновенных дифференциальных уравнений существенно упростилось в MathCad 2000, так как появилась новая функция odesolve(x,b,[step]), которая используется в вычислительном блоке Given и позволяет записывать уравнения и начальные условия в привычном виде. Функция odesolve(x,b,[step]) возвращает решение дифференциального уравнения в виде функции. Уравнение должно быть линейным относительно наивысшей производной и количество начальных условий должно быть равно порядку ОДУ. Параметрами функции odesolve являются:

x – переменная интегрирования, вещественного типа;

b – конечное значение интервала интегрирования, вещественного типа;

step – необязательный параметр, определяющий число шагов. Если этот параметр задан, то при поиске решения используется постоянный шаг. В противном случае применяется адаптивный метод.

При записи уравнения можно применять символы дифференцирования d/dx или обозначение производной штрихом. Для задания штриха используется комбинация клавиш Ctrl+F7.

Given

 

 

 

 

d y(x)

 

 

sin(x) +

1

 

 

 

 

y(x)

dx

 

 

 

y(0)

 

 

1

 

 

 

 

 

 

 

 

 

y := Odesolve (x ,24 ,100 )

58

При записи уравнения и условий следует использовать жирный знак равенства и в правой части обязательно указывать аргумент функции (x). Если написать просто y, а не y(x), то будет ошибка.

Для формирования блока Given можно использовать предварительно определённую функцию пользователя, а также задавать переменными начальные условия, конечное значение интервала интегрирования и число шагов :

f (t ,y) := sin(t) + 1y t0 := 0 y0 := 1

t1 := 8 π

Given

y'(t) f (t ,y(t))

y(t0) y0

y := Odesolve (t ,t1)

f(t,y) - правая часть уравнения

y0 - значение функции при t0=0

t1 - конечное значение интервала интегрирования

Исходное уравнение

Начальное условие

Вызов функции

Получив функцию, являющуюся решением уравнения, целесообразно построить её график (обычным способом). При желании можно вывести значения функции y, задав предварительно точки с помощью ранжированной переменной.

Для решения обыкновенных дифференциальных уравнений используются функции:

Bulstoer(y, x1, x2, n, D), bulstoer(y, x1, x2, acc, n, D, k, s), Rkadapt (y, x1, x2, n, D), rkadapt(y, x1, x2, acc, n, D, k, s), rkfixed(y, x1, x2, n, D),

Stiffb(y, x1, x2, n, D, J),

stiffb(y, x1, x2, acc, n, D, J, k, s) , Stiffr(y, x1, x2, n, D, J),

stiffr(y, x1, x2, acc, n, D, J, k, s),

где y – вектор начальных условий,

x1 – начало интервала интегрирования,

x2 – конец интервала интегрирования, n – число шагов интегрирования,

59

D – вектор, элементами которого являются правые части

исходных уравнений,

 

 

 

k – максимальное

число

промежуточных

точек

решения,

 

 

 

s – минимально допустимый интервал между точками, acc – параметр, контролирующий точность решения. J – функция Якобиана.

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

Решение получается в виде матрицы, содержащей n+1 строк и p+1 столбцов. Количество столбцов на единицу больше, чем количество уравнений p или порядок уравнения. Начальный столбец матрицы по умолчанию имеет индекс 0 и содержит значения аргумента в точках, определяемых величинами x1, x2, n.

Функции, имена которых начинаются с букв rk (rkadapt, Rkadapt, rkfixed), используют метод Рунге-Кутта. В функциях

Bulstoer, bulstoer, Stiffb, stiffb реализован метод Булирша-Штёра.

Функции Stiffr, stiffr находят корни по методу Розенброка.

Метод Рунге-Кутта, реализованный в rkfixed, не является самым быстрым, но во многих случаях справляется с поставленной задачей. Однако в ряде задач целесообразно применить более сложные методы.

Функции bulstoer, Stiffb, stiffb, Stiffr, stiffr позволяют находить решения жёстких систем дифференциальных уравнений.

Если известно, что функции системы являются гладкими, то целесообразно применить метод Bulstoer, а для плавных функций рекомендуется метод Rkadapt. Функция Rkadapt изменяет шаг в зависимости от поведения производной: уменьшает там, где производная меняется быстро, и увеличивает там, где поведение производной можно считать спокойным. Таким образом, при поиске решения используется переменный шаг, но в матрице результата значения приводятся для равноотстоящих точек, заданных пользователем через параметры.

В тех случаях, когда требуется найти решение только в конечной точке, то целесообразно применить одну из функций bulstoer, rkadapt, stiffb, stiffr, что позволит уменьшить объём выполняемых вычислений.

60

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

12.2. Пример использования функции rkfixed

Решим рассмотренное ранее уравнение с помощью функции rkfixed(y, x1, x2, n, D). Аналогичным образом для решения уравнения можно было применить функцию Rkadapt или Bulstoer.

Последовательность действий:

задаём количество шагов

формируем вектор ic начальных условий. Так как уравнение одно, то вектор содержит один элемент

задаём правые части D(t,Y). Вторым аргументом

должен быть вектор искомой функции

вызываем функцию rkfixed для получения матрицы решения

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

выделяем второй столбец матрицы, который содержит значения функции-результата

строим график

N : = 100

ic0 := y0

 

 

 

 

D(t,Y) := sin(t) +

1

 

 

 

 

 

 

Y0

 

 

 

 

S := rkfixed(ic,t0 ,t1 ,N ,D)

 

 

T :=

0

 

1

 

 

S

Y := S

 

 

 

 

10

 

 

 

 

 

Y

5

 

 

 

 

 

 

0

5

10

15

20

25

 

 

 

 

T

 

 

 

 

 

61

 

 

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