Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВЫЧ_ПРАКТ_4,_5.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
953.34 Кб
Скачать

4. Программная реализация методов решения оду

5.4.1. Пример программы решения системы ОДУ. Дана система из двух обыкновенных дифференциальных уравнений (5.15). Для описания принципа построения программы ее решения приведем текст программы ее численного решения модифицированным методом Эйлера. Все другие методы, в частности, 4-го порядка отличаются только количеством обращений к процедуре расчета правых частей уравнений и формулами получения результатов (прогнозируемого и окончательного).

(5.15)

Текст программы

Uses Crt;

const k = 2; { Число уравнений }

type mX = array[1..k] of real;

var x, x0, xN, h : real;

y, f1, f2, yPR : mX;

j, i, N : integer;

function fAnal(x:real):real; { Аналитическое решение (чо не вставить, если есть)}

begin fAnal := 2*x – 0.5*exp(x);

end;

procedure fun(x:real; y:mX; var f:mX); { Правые части системы }

begin f[1] := –y[2] + x*x;

f[2] := y[1] + exp(x);

end;

begin ClrScr;

x0:= 0; xN:= 1; y[1]:= –0.5; y[2]:= –1.5; h:= 0.1;

N:= round( (xN – x0) / h ); { Число точек решения}

x := x0;

writeln(x:10:5, y[1]:12:5, y[2]:10:5, fAnal(x):20:5);

for i := 1 to N do

begin

fun(x, y, f1);

for j:=1 to k do yPR[j]:= y[j] + h*f1[j]; { Прогноз }

fun(x+h, yPR, f2);

for j:=1 to k do y[j]:=y[j]+0.5*h*( f1[j]+f2[j]); { Результат }

x := x0 + i*h;

writeln(x:10:5,y[1]:12:5,y[2]:10:5,fAnal(x):20:5);

readln;

end;

end.

Таблица 5.2

Решение системы (5.15)

x

y1

y2

y_Aналит

0.00000

0.10000

0.20000

0.30000

0.40000

0.50000

0.60000

0.70000

0.80000

0.90000

1.00000

-0.50000

-0.35200

-0.20954

-0.07321

0.05634

0.17839

0.29215

0.39676

0.49124

0.57453

0.64545

-1.50000

-1.43724

-1.34888

-1.23432

-1.09294

-0.92401

-0.72676

-0.50032

-0.24373

0.04407

0.36425

-0.50000

-0.35259

-0.21070

-0.07493

0.05409

0.17564

0.28894

0.39312

0.48723

0.57020

0.64086

При переходе на другой метод в строке {Прогноз} записываются формулы вычисления всех прогнозируемых точек (по Адамсу-Башфорту или Рунге-Кутте), а в строках {Результат} – итоговая квадратурная формула для вычисления уi+1 с учетом полученного прогноза. Результаты расчетов приведены в таблице 5.2.

5.4.2. Тестовые примеры для программ решения дифференциальных уравнений

1. Решим уравнение 2-го порядка

, x[ – 1, 2 ]; h = 0.375. (5.16)

Данное уравнение имеет аналитическое решение у(х) = х(х2 – 1), которое является многочленом 3-й степени, а значит, методы 4-го порядка точности должны давать истинное решение. Следовательно, независимо от применяемого метода, численное решение должно в точности совпасть с аналитическим.

Преобразуем уравнение (5.16) в систему уравнений 1-го порядка с помощью замены переменных:

. (5.17)

Начальная точка задана, следующие три точки найдем методом Рунге-Кутты 4-го порядка. Последующие точки – методами Адамса-Башфорта и Адамса-Моултона 4-го порядка (для краткости назовем их методами Адамса, т.к. для данной задачи их результаты совпадают). Функции правых частей системы (5.17) будут иметь вид:

f1 (x, z1, z2) = z2;

f2 (x, z1, z2) = 6 x.

Таблица 5.3

Вычисление начальных точек методом Рунге-Кутты

x

y

f1

y

f2

k11

k12

k21

k22

k31

k32

k41

k42

–1

0

2

2

–6

0.75000

–2.25000

0.32813

–1.82813

0.40723

–1.82813

0.06445

–1.40625

–0.625

0.38086

0.17188

0.17188

–3.75000

0.06445

–1.40625

–0.19922

–0.98438

–0.12012

–0.98438

–0.30469

–0.56205

–0.250

0.23438

–0.81250

–0.81250

–1.5000

–0.30469

–0.56250

–0.41016

–0.14063

–0.33105

–0.14063

–0.35742

0.28125

0.125

–0.12305

–0.95313

–0.95313

0.75000

Таблица 5.4

Методы Адамса

x

y

y

0.500

– 0.37500

– 0.25000

0.875

– 0.20508

1.29688

1.250

0.70313

3.68750

1.625

2.66602

6.92188

2.000

6.00000

11.00000

Результаты расчетов приведены в таблицах 5.3, 5.4.

2. Решим уравнение 2-го порядка

, . (5.18)

Данная задача имеет аналитическое решение у = – ln(cos(x)), которое можно использовать при тестировании программ.

Преобразуем уравнение (5.18) в систему уравнений 1-го порядка:

. (5.19)

Таблица 5.5

Вычисление начальных точек методом Рунге-Кутты

x

y

f1

y

f2

k11

k12

k21

k22

k31

k32

k41

k42

0.78540

0.34657

1.00000

1.00000

2.00000

0.10472

0.20944

0.11569

0.23389

0.11697

0.23389

0.12921

0.26441

0.89012

0.46311

1.23490

1.23490

2 2.52497

0.12932

0.26441

0.14316

0.30310

0.14519

0.30310

0.16106

0.35303

0.99484

0.60763

1.53988

1.53988

3.37118

1.09956

0.78967

1.96265

1.96265

4.85184

Таблица 5.6

Метод Адамса-Башфорта

x

y

у

х

y

y

1.20428

1.02434

2.58824

1.41372

1.80705

5.88182

1.30900

1.34033

3.65292

Таблица 5.7

Метод Адамса- Моултона

x

yпрогн

упрогн

укорр

у’корр

уаналит

1.20428

1.02434

2.58824

1.02581

2.60813

1.02620

1.30900

1.34657

3.67281

1.35016

3.74874

1.35163

1.41372

1.83475

5.97764

1.84735

6.44233

1.85512

В таблицах 5.5 – 5.7 приведены результаты применения численных методов Рунге-Кутты, Адамса-Башфорта и Адамса-Башфорта-Моултона при фиксированном шаге h = /30  0.1047.

С помощью правила Рунге-Ромберга подберем значение h, обеспечивающего достижение заданной точности . Для этого пересчитаем решение системы (5.18) методом Адамса-Башфорта с половинным шагом h = /60. Максимальное расхождение между yh и yh/2 получим в последней точке интервала. Имеем yh =1.807045, yh/2 =1.8450669. Отсюда =0.002535. Полагая  = 0.0001, приходим к выводу, что точность не достигнута. Повторим дробление шага. Результаты приведены в таблице 5.8.

Таблица 5.8

Применение правила Рунге- Ромберга

h

yh

yh/2

/30

1.8070453

1.8450669

0.002535

/60

1.8450669

1.8538140

0.000583

/120

1.8538140

1.8549938

0.000079

Таким образом, требуемая точность достигается при h = /120  0.02618. Окончательное решение задачи (5.18) методом Адамса-Башфорта в сочетании с методом Рунге-Кутты приведено в следующей таблице:

Таблица 5.9

Решение задачи (5.18)

x

у

у

Аналитическое

решение – у

0.89012

0.4631143

1.23489

0.4631178

0.99484

0.6076269

1.53984

0.6079320

1.09956

0.7896605

1.96251

0.7898790

1.20428

1.0261351

2.60475

1.0261950

1.30900

1.3514021

3.73048

1.3516261

1.41372

1.8538140

6.30000

1.8551181

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