Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМ_2012 / Лекции / Численные_методы.pdf
Скачиваний:
392
Добавлен:
09.06.2015
Размер:
1.99 Mб
Скачать

99

Рис. 2. Результат работы Листинга_7.2

3) Метод прогонки

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

A(x) y"+B(x) y'+C(x) y = f (x), x [a,b],

 

 

 

 

 

 

 

 

 

 

 

 

 

y(a) =α, y(b) = β.

 

 

 

 

 

Подставляя y'=

yi+1

yi1

 

 

для точности h2

и y'=

yi+1 yi1

 

для точности h , а

 

2h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h

 

 

 

также y"=

yi+1 2yi

+ yi1

 

, получим разностное уравнение:

 

 

 

 

 

 

 

 

 

 

 

 

h2

 

 

 

 

ai yi1 + bi yi + ci yi+1 = di ,

 

 

 

где:

 

 

 

 

 

 

 

 

 

 

 

 

 

A(xi )

 

B(xi )

 

 

 

 

 

 

2A(xi )

 

A(xi )

 

 

B(xi )

 

 

 

 

 

ai =

, bi = C(xi )

, ci =

 

+

, di =

fi -

для точности h2 и

h2

 

 

h2

h2

2h

 

 

 

2h

 

 

 

 

 

 

 

 

 

 

 

 

ai =

A(xi )

, bi = C(xi )

2A(xi )

B(xi )

, ci =

A(xi )

 

+

B(xi )

, di =

fi - для точности h .

h2

 

h

h2

h

 

 

 

 

 

 

h2

 

 

 

 

 

 

 

 

 

 

 

100

Решение данной краевой задачи запишется в виде

 

 

 

 

 

 

 

yi+1 = Li yi + Ki ,

где Li =

 

ci

, Ki =

di

ai Ki1

- прогоночные коэффициенты.

a L

+b

a L

+b

 

 

 

 

i

i1

i

 

i

i1

i

 

Итак, вычисления по методу прогонки проводятся в два этапа:

-осуществляется прямой ход прогонки, по которому находятся

прогоночные коэффициенты Ki и Li , с учетом того, что L0 = 0, K0 = α ;

- осуществляется обратная прогонка, в которой вычисляются значения yi .

Пример 7. 1. Решить краевую задачу методом прогонки.

(0.34x2 +1.5)0.4 y" + [cos(0.7 + x) +1.3] y' ( 2x +1.1) y = lg(2x) 0.7 cos x2 ,

y(0.5) = −0.4, y(1.5) = 0.9.

Отрезок [0.5; 1.5] разобьем на 15 равных частей. Вычисления удобно располагать в виде следующей таблицы:

xi

ai

bi

ci

fi

li

ki

yi

0,500000

258,049106

-542,383579

282,984473

-0,678239

0,000000

-0,400000

-0,400000

0,566667

260,163923

-545,703123

284,155867

-0,539057

0,520715

-0,189712

-0,273561

0,633333

262,476497

-549,398225

285,505061

-0,408051

0,691760

-0,119661

-0,161027

0,700000

264,979051

-553,457610

287,028558

-0,281161

0,775427

-0,084901

-0,059798

0,766667

267,663433

-557,869323

288,722557

-0,155078

0,824177

-0,064427

0,032373

0,833333

270,521194

-562,620868

290,583007

-0,027061

0,855503

-0,051232

0,117450

0,900000

273,543663

-567,699333

292,605670

0,105138

0,876900

-0,042314

0,197174

0,966667

276,722022

-573,091523

294,786168

0,243260

0,892118

-0,036172

0,273108

1,033333

280,047372

-578,784076

297,120037

0,388486

0,903241

-0,031976

0,346680

1,100000

283,510799

-584,763568

299,602768

0,541344

0,911520

-0,029228

0,419219

1,166667

287,103434

-591,016613

302,229846

0,701591

0,917750

-0,027612

0,491978

1,233333

290,816499

-597,529953

304,996787

0,868102

0,922463

-0,026912

0,566156

1,300000

294,641365

-604,290527

307,899162

1,038757

0,926027

-0,026973

0,642919

1,366667

298,569583

-611,285539

310,932623

1,210366

0,928706

-0,027669

0,723404

1,433333

302,592927

-618,502511

314,092917

1,378658

0,930693

-0,028893

0,808731

1,500000

306,703422

-625,929327

317,375905

1,538334

0,932136

-0,030545

0,900000

Приведем реализацию данного метода в системе Scilab.

Листинг 7.3.

//Метод прогонки

 

function [A]=A(x)

 

A = (0.34*x^2+1.5)^0.4;

//задаем коэффициенты A, B, C нашего ОДУ

endfunction

 

function [B]=B(x)

 

B = cos(0.7+x)+1.3;

//задаем коэффициенты A, B, C нашего ОДУ

endfunction

 

function [C]=C(x)

 

C = -x/2-1.1;

// задаем коэффициенты A, B, C нашего ОДУ

101

endfunction function [f]=f(x)

f = log(2*x)-0.7*cos(x*x); //задаем правую часть – функцию f(x) endfunction

left=0.5;

//задаем отрезок [a;b]

right=1.5;

//задаем отрезок [a;b]

n=15;

 

h = (right - left)/n;

 

y(1) = -0.4;

 

y(n+1) = 0.9;

 

l(1) = 0;

 

k(1) = -0.4;

 

x(1) = left;

 

x(n+1) = right;

 

for i = 1: n

x(i+1) = left + i*h;

c(i+1) = A(x(i+1))/(h*h) + B(x(i+1))/(2*h); b(i+1) = C(x(i+1)) - 2*A(x(i+1))/(h*h); a(i+1) = A(x(i+1))/(h*h) - B(x(i+1))/(2*h); d(i+1) = f(x(i+1));

l(i+1) = -c(i+1)/(a(i+1)*l(i)+b(i+1)); k(i+1)=(d(i+1)-a(i+1)*k(i))/(a(i+1)*l(i)+b(i+1));

end

for i = n:-1:1

y(i) = y(i+1)*l(i) + k(i);

end

for i=1:n+1 plot2d(x,y); end

//результат работы данной программы представляется в виде графика (смотри //ниже)

102

Рис. 3. Результат работы Листинга_7.3

4) Метод Пикара

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

Пусть поставлена задача Коши:

x xi ,

 

v (x) =ϕ(x,v(x)), x0

 

v(x0 ) = v0 .

 

(1)

Проинтегрируем выписанное уравнение

 

v( x) = v0 + x ϕ(t, v(t ))dt .

(2)

x0

 

 

Процедура последовательных приближений метода Пикара реализуется согласно следующей схеме