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

Posobie_MathCAD_v2

.pdf
Скачиваний:
129
Добавлен:
09.04.2015
Размер:
2.77 Mб
Скачать

отрезка 1, количество разбиений отрезка 10 и вектор правых частей системы. Результатом является матрица u, состоящая из трех столбцов — аргумент, первая неизвестная функция, вторая неизвестная

Рис. 6.8. Листинг решения

функция — и 11 строк, по-

скольку заданное число раз-

системы (6.11) с помощью

биений 10. Понятно, что ре-

стандартной ПФ

шение для первой искомой

 

функции должно совпадать с решением на рис. 6.7.

Пользовательские функции для решения систем ОДУ

Приведем формулы для решения системы (6.11) с помощью вышеописанных методов. Конечно-разностное представление будет иметь вид:

yi 1 yi hzi ,

zi 1 zi h 2zi yi xi , y0 1, z0 0 ,

для модифицированного метода Эйлера:

~

yi

yi 1

~

zi

zi 1

yi 1 yi

zi 1 zi xi 1 xi

hzi

h 2zi yi xi

 

 

h

~

 

 

 

 

 

 

 

zi zi 1

,

 

 

2

 

 

 

 

 

 

 

 

h

 

 

~

~

 

 

 

 

2zi yi xi 2zi 1

yi 1

xi 1 ,

2

 

 

 

 

 

 

h,

и четырехэтапного метода Рунге – Кутты: yi 1 yi h6 k1 2k2 2k3 k4

zi 1 zi h6 l1 2l2 2l3 l4 k1 zi ,l1 2zi yi xi ,

111

k2

k3

k4

 

hl

 

 

 

 

hl

 

 

 

 

hk

 

 

h

 

z

1

,l

2 z

 

1

 

y

 

1

 

x

,

 

 

 

 

i

2

2

 

i

 

2

 

 

i

 

2

 

i

2

 

 

 

 

 

 

 

 

 

 

 

 

 

zi hl22 ,l3

zi hl3,l4

 

 

 

hl

 

 

 

 

 

hk

 

 

 

 

h

 

2 z

i

 

2

 

 

y

i

 

2

 

x

i

 

,

 

 

 

 

 

2

 

 

 

 

2

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

2 zi hl3 yi hk3 xi h.

 

 

 

Программа для решения примера 6.3 методом Эйлера приведена на рис. 6.9.

g(x y z) 2 z y x

Euler_systa( b N u0)

 

ORIGIN 1

 

 

 

h

b a

 

 

N 1

 

 

 

 

 

 

u1 1 u01

 

 

u1 2 u02

 

 

for i 1 N 1

 

 

 

xi a (i 1) h

 

 

 

 

 

 

u(i 1) 1 ui 1 h ui 2

 

 

 

u(i 1) 2 ui 2 h g xi ui 1 ui 2

 

 

 

 

 

xN b

 

 

augmentx( u)

 

 

 

1

 

 

u0

 

 

 

 

 

0

 

A1 Euler_syst0( 1 N u0)

i 1 N

Рис. 6.9. Листинг решения системы (6.11) с помощью пользовательской ПФ, реализующей метод Эйлера

Здесь используется ПФ Euler_syst, входными данными в которую служат границы отрезка, число разбиений отрезка и вектор начальных данных. Выходным результатом является объединенная матрица, состоящая из вектора значений аргумента и матрицы решений. Процедура расчета решения аналогична

112

ПФ Euler, только для системы число расчетов увеличивается пропорционально числу ОДУ в системе.

6.1.8. Жесткие ОДУ

До сих пор мы имели дело с ОДУ, которые надежно решались явными численными методами Рунге-Кутты. Однако имеется класс так называемых жестких (stiff) систем ОДУ, для которых явные методы практически не применимы, поскольку их решение требует исключительно малого значения шага численного метода. Рассмотрим пример такой жесткой задачи.

Пример 6.4. Решить задачу Коши

y' = –100y + 100, y(0) = 2

Точным решением задачи является функция y = 1+e–100x, имеющая очень большой градиент вблизи точки x=0. Действительно, y=2 при x=0 (в силу начальных данных), однако уже при малых положительных значениях x решение близко к своему асимптотическому значению y = 1. Получим численное решение этой задачи явным методом Эйлера (6.4) с шагом h = 0,02.

yi 1 1 100h yi 100h 2 yi , i 0, 1,..., n 1, y0 2 .

Решение будет представлять собой последовательность y 0 2, y 0.02 0, y 0.04 2, y 0.06 0, ...

что не соответствует точному. При h = 0.01 первая же вычисленная точка y1 = 1 попадает на асимптоту решения, и последующие вычисления не изменяют значения приближенного решения. Существенно более мелкий шаг, например h = 0.001, позволит получить вполне удовлетворительное соответствие между приближенным и точным решением. Однако вычисления с таким мелким шагом потребуют больших вычислительных затрат.

y 0 y0 2, y 0.001 y1 1.9, y 0.002 y2 1.81, ...

Воспользуемся неявным методом Эйлера:

yi 1

 

100h yi

, i 0, 1,..., n 1, y0

2

 

 

 

1 100h

 

с шагом h = 0.1. Получим последовательность

y 0 2, y 0.1 1.091, y 0.2 1.008, y 0.3 1.0007, ...

113

Даже при очень крупном шаге h = 0.99 приближенное решение, полученное неявным методом Эйлера, получается качест-

венно правильным. y0 2, y1 1.01, y2 1.0001, ...

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

В приведенном выше примере коэффициенты уравнения различаются на порядки, причем коэффициент при старшей производной меньше остальных. Рассмотрим уравнение

dy

 

 

 

 

 

y, 0,

 

1, x 0, y(0) y

0

,

(6.12)

 

dx

 

 

 

 

 

с точным решением y y0e x . Поскольку при <0 точное реше-

ние является убывающим, для численного решения должна выполнятся цепочка неравенств

yi 1

 

 

 

yi

 

 

 

yi 1

 

...

 

y0

 

,

 

 

 

 

 

 

 

известных из теории разностных схем как принцип максимума. Методы, решения которых удовлетворяют этим условиям, называются А-устойчивыми методами.

Запишем для уравнения (6.12) явный метод Эйлера и двухэтапный метод Рунге-Кутты.

yi 1 yi h yi 1 h yi 1 yi

yi 1 yi h yi yi h2 1 h 2h2 2 yi 2 yi .

Используя эти формулы, можно выразить последовательно каждое yi через предыдущее, тогда

y

i 1 y , i 0,1, 2,...,

k 1, 2

i 1

k 0

 

Для выполнения принципа максимума yi 1 ik 1 y0 необходимо

и достаточно, чтобы выполнялось условие 0 k 1. Отсюда сразу следуют ограничения на шаги интегрирования для явных методов. Например, для явного метода Эйлера h 1 , для

двухэтапного метода Рунге-Кутты h 2 .

Рассмотрим теперь простейший неявный метод Эйлера для решения уравнения (6.12):

114

yi 1 yi h yi 1 yi 1 h yi .

Можно видеть, что условие 0 1 выполняется для любых , следовательно, имеет место принцип максимума, т.е. неявный метод Эйлера не имеет ограничения по на шаг интегрирования и является A–устойчивым. Неявный метод Эйлера может быть обобщен на систему жестких ОДУ.

6.1.9. Решение жестких ОДУ в пакете MathCAD

Решение жестких систем ОДУ в пакете MathCAD можно

осуществить

с

помощью

встроенной

функции

Stiffb (y0, t0, t1, M, F, J)

 

 

где y0 — вектор начальных значений в точке t0; t0, t1 — начальная и конечная точка расчета; M — число шагов численного метода; F — векторная функция F(t, y) размера 1×N (N — размерность системы), задающая правую часть системы ОДУ; J — матричная функция J(t, y) размера N×(N+1), составленная из вектора производных функции F(t, y) по t (правый столбец) и ее якобиана (N левых столбцов). Решение выдается в виде матрицы.

Далее показано решение жесткой системы ОДУ в MathCAD. Пусть задана система ОДУ первого порядка с начальными условиями

dy0

 

0.1y

 

10

2 y y

 

 

 

 

 

 

 

 

 

 

 

dx

 

 

0

 

 

 

1

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dy1

 

0.1y0 10

2

y1 y2 10

3

 

,

 

0

 

 

 

при x0=0

(6.13)

 

 

 

 

 

y1

y

 

 

0

 

dx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dy2

 

103 y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dx

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Видно, что коэффициенты при слагаемых в правой части данной системы имеют сильно различающиеся порядки. Жесткость системы характеризуется матрицей Якоби (якобианом) данной системы, т.е. матрицей, составленной из частных производных правой части по y0, y1 и y2. Чем ближе определитель матрицы Якоби к нулю, тем жестче система. Используя функ-

115

ции MathCAD, найдем якобиан системы ОДУ с начальными данными (6.13) при помощи средств пакета:

 

 

0.1 y

0

 

100 y

1

y

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F(x y)

 

0.1 y

 

100 y

 

y

 

 

1000 y

 

 

1

 

 

0

1

2

1

 

y0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1000 y1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

J(x y)

 

 

 

 

y0

 

 

y

 

 

F t

 

1 0

 

 

 

 

 

t

 

y

 

 

 

 

 

 

 

2

 

 

 

 

 

y0

 

 

y

 

 

F t

 

1 1

 

 

 

 

 

t

 

y

 

 

 

 

 

 

 

2

 

 

 

 

 

y0

 

 

y

 

 

F t

 

1 2

 

 

 

 

 

t

 

y

 

 

 

 

 

 

 

2

 

 

 

 

t

 

 

 

y

 

 

 

 

F x

 

1

0

 

 

 

t

y

 

 

 

 

 

 

 

2

 

 

 

 

 

t

 

 

 

y

 

 

 

 

F x

 

1

1

 

 

 

t

y

 

 

 

 

 

 

 

2

 

 

 

 

 

t

 

 

 

y

 

 

 

 

F x

 

1

2

 

 

 

t

y

 

 

 

 

 

 

 

2

 

 

 

 

y0

 

 

 

 

 

 

 

F x

t

0

 

 

t

y

 

 

 

 

 

 

 

2

 

 

 

 

y0

 

 

 

 

 

 

 

F x

t

1

 

 

t

y

 

 

 

 

 

 

 

2

 

 

 

 

y0

 

 

 

 

 

 

 

F x

t

2

 

 

t

y

 

 

 

 

 

 

 

2

 

 

 

 

y0

 

 

 

 

 

 

 

 

 

F x y

 

0

 

 

 

1

t

 

 

 

 

 

 

 

 

t

 

 

 

 

 

y0

 

 

 

 

 

 

 

 

 

 

 

 

F x y1

1

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y0

 

 

 

 

 

 

 

 

 

F x y

 

2

 

 

 

1

t

 

 

 

 

 

 

 

 

t

 

 

Получим Якобиан вида

 

0

0.1

100 y2

100 y1

 

 

 

 

 

 

 

J(x y) 0

0.1

100 y2 1000

100 y1

 

 

 

 

 

 

 

 

0

0

1000

0

 

 

 

 

 

 

.

Первый столбец матрицы J – это вектор производных функции

F(x,

 

 

 

 

 

y ) по x, а три правых столбца - якобиан системы (6.13).

Теперь воспользуемся функцией Stiffb для получения решения:

D:=Stiffb(y0,0,50,200,F,J).

Графики функций y0(x), y1(x) и y2(x), составляющих вектор полученного решения, представлен на рис. 6.11.

116

Для решения этого же примера с помощью методов РунгеКутты потребовался бы шаг на два порядка меньше, чем при использовании функции Stiffb.

1

1

 

 

 

 

 

 

 

 

 

 

 

y0

 

 

 

 

 

 

103 y1 0.5

 

 

 

 

 

y2

 

 

 

 

 

 

0

0 0

 

 

 

 

 

 

10

20

30

40

50

 

0

 

 

x

 

47.5

Рис 6.11 Приближенное решение жесткой системы ОДУ

6.2. Краевая задача для ОДУ второго порядка 6.2.1. Постановка краевой задачи

Дано дифференциального уравнения второго порядка

u p(t)u g(t)u f (t), t [a, b] . (6.14)

Здесь p(t), g(t), f (t) заданные функции коэффициентов. Уравнение можно свести к системе двух ОДУ первого порядка:

u f (t,u,v) v

.

(6.15)

 

v g(t,u,v) p(t)v g(t)u f (t)

 

 

Для определения единственного решения необходимо задать два дополнительных условия на искомую функцию u(t). Если оба условия заданы в одной точке t=t0, то мы имеем задачу Коши, которая может быть решена методами, описанными в предыдущем разделе. Допустим теперь, что два дополнительных условия поставлены в разных точках: x=a и x=b:

k u(a) k

 

 

 

 

 

u (a) A

 

 

1

2

 

,

(6.16)

m1u(b) m2u (b) B

 

 

117

где A, B, k1, k2, l1, l2 – заданные константы. Задача (6.14), (6.16) называется краевой, для приближенного решения которой используют методы:

конечных разностей;

сведение краевой задачи к задаче Коши (стрельбы, дифференциальной прогонки, редукции);

балансов (конечных объемов);

коллокации;

проекционные (Галеркина);

вариационные (наименьших квадратов, Ритца);

проекционно-сеточные (конечных элементов).

Ниже рассмотрим некоторые из перечисленных методов.

6.2.2. Конечно–разностный метод

Введем на отрезке [a, b] разностную сетку (t0, t1, t2, ..., tM), ti=a+ i, i=0, 1,..., M, =(b–a)/M, M – число точек разностной сетки (параметр задачи). Вместо точного решения u(t) будем отыскивать приближенное решение в узлах разностной сетки: yi=y(ti). Используя формулы приближенного дифференцирова-

ния:

u (t )

yi 1 2 yi yi 1

,

u (t )

yi 1 yi 1

, заменим исходное

2

2

 

i

 

i

 

уравнение и краевые условия разностной схемой:

yi 1

2 yi

yi 1

 

p(t

)

yi 1 yi 1

g(t

) y

i

f (t

), i 1,..., M ,

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

i

 

 

2

i

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k y

0

k

2

y1 yo

A,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m y

M

m

2

yM yM 1

 

B.

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В итоге получили следующую систему M+1 линейных алгебраических уравнений на вектор неизвестных (y0, y1, y2, ..., yM):

–С0y0 +B0 y1 =F0

Ai yi–1 – Ciyi + Biyi+1= Fi, i=1, 2,..., M–1 AMyM–1–CM yM = FM

118

где Ci=2–g(ti) 2, Ai= 1–p(ti) Bi=1+p(ti) Fi = 2f(ti), C0 =k2– k1, B0= k2, F0=A CM =m2+ m1, AM= m2, FM=–B

Выпишем систему в матричном виде:

C0

B0

0

 

0

 

...

 

A1

C1

B1

 

0

 

...

 

 

 

 

0

A

C

 

B

 

...

 

 

2

 

2

2

 

 

 

 

 

 

 

...

...

...

 

...

...

 

0

0

...

 

A

1

C

M 1

 

 

 

 

 

M

 

 

0

0

....

0

 

AM

 

 

0

 

 

y0

 

 

F0

 

0

 

 

 

y1

 

 

F1

 

 

 

 

 

 

 

0

 

 

y

 

 

 

F

 

 

 

 

 

 

 

2

 

 

2

.

...

...

 

...

 

B

1

y

M 1

 

F

 

M

 

 

 

 

M 1

 

C

M

 

y

M

 

 

F

 

 

 

 

 

 

 

M

 

Поскольку матрица СЛАУ имеет трехдиагональный вид, то система решается методом прогонки, описанным в главе 2.

Метод прогонки является точным методом решения СЛАУ, следовательно, погрешность в приближенное решение вносится только на этапе замены исходных уравнений и краевых условий конечно-разностными соотношениями. Оценку погрешности метода можно провести, если вспомнить, что используемые формулы приближенного дифференцирования (центральная разность для первой производной и симметричная аппроксимация для второй производной) имеют второй порядок точности. В то же время при замене краевых условий (6.15) на разностные соотношения в приближенное решение вносится погрешность порядка (именно такую погрешность имеют формулы разность «вперед» и разность «назад»). Следовательно, суммарная погрешность аппроксимации уравнения и краевых условий будет пропорциональна . Однако в тех случаях, когда в краевые условия не входит производная, т.е. k2=0, l2=0, то краевые условия для приближенного решения выполняются точно, и тогда метод имеет погрешность порядка τ2

6.2.3. Метод стрельбы

Этот метод основан на сведении краевой задачи к задаче Коши для системы (6.14). Пусть краевые условия имеют вид:

119

u(a)=u0, u(b)=u1.

Для того чтобы свести исходную краевую задачу к задаче Коши, необходимо в точке t=a задать дополнительное краевое

u

 

 

 

условие u (a)=v0. Вели-

 

 

 

чина v0 имеет геомет-

B1

 

 

 

 

1

u(t, 1)

 

рический

смысл

тан-

 

 

генса — угла наклона

 

 

 

 

 

 

 

u1

 

u(t, )

 

касательной к решению

 

 

 

в начальной

точке.

 

 

 

 

u0

 

u(t, 2)

 

Графическая

иллюст-

 

 

 

 

 

 

рация метода стрельбы

B2

 

2

 

 

 

приведена на рис. 6.11.

 

 

 

x

 

 

 

Задачу Коши

для

a

 

b

 

 

 

системы

(6.14)

можно

Рис. 6.12. Иллюстрация метода

 

 

решить, например, ме-

 

стрельбы

 

 

 

тодом

Рунге-Кутты.

 

 

 

 

Поскольку решение задачи Коши зависит от выбора , можно записать: u=u(t, ). Требуется подобрать значение , обеспечивающее «попадание», т.е. выполнение условия u(t, )=u1. Понятно, что при произвольном выборе полученное решение может не удовлетворять краевому условию на правом конце отрезка

t=b. Может быть получено, что u(t, 1) t=b=B1>u1 («перелет») или u(t, 1) t=b=B2<u1 («недолет») (рис. 6.11). Задачу подбора нужного угла можно рассматривать как решение нелинейного алгеб-

раического уравнения u(t, ) t=b=u1, особенностью которого является то, что F(x), определяющая нелинейное уравнение, не задана явно, а определен только способ нахождения u(t, ) t=b.

6.2.4. Решение краевой задачи конечно-разностным методом в пакете MathCAD

Рассмотрим реализацию метода конечных разностей в среде MathCAD на примере ОДУ 2-го порядка вида (6.14):

u tg(t)u u cos2 t 0,

x [0,1]

 

с краевыми условиями

,

.

120

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