Решение краевой задачи для линейного дифференциального уравнения второго порядка с использованием конечно-разностных уравнений

Автор работы: Пользователь скрыл имя, 14 Октября 2013 в 13:17, курсовая работа

Краткое описание

В данной курсовой работе описывается метод решения краевой задачи линейного дифференциального уравнения второго порядка с использованием конечно-разностных уравнений, а также метод прогонки, использующийся для решения «трехчленной системы» линейных алгебраических уравнений, полученной при применении конечно-разностных уравнений.

Содержание

Аннотация……………………………………………………………………………………………….…3
1.Обзор литературы…………………………………...………………………………...………………...4
1.1 Общая постановка краевой задачи………………..……………………………...………………4
1.2 Метод конечных разностей……..……………………………………...………………………….6
1.3 Метод прогонки………………… …... ……………...…………………………………………...9
2. Разработка блок – схемы…………………………...…………………………………………………16
2.1 Алгоритм…………………………………………………………...……………………………..16
2.2 Блок – схема………………………………………………………..…………………………….17
3. Отладка программы……………………………..………………………………………………….....18
3.1 Код программы………………………………………………………...…………………………18
3.2 Решение контрольного примера……………………………………….……………………….. 20
3.3 Результат программы…………………………………………………….……………………….21
Список литературы………………………………………………………………………………………22

Вложенные файлы: 1 файл

Kursovaya_rabota_Dippel.docx

— 438.18 Кб (Скачать файл)

 

Отсюда согласно условиям (2), получим

                                 (12)

 

Линейная система (10), (12) состоит  из n+1 уравнений первой степени относительно неизвестных y0, у1 ,... , уп. Для решения этой системы воспользуемся методом прогонки. Разрешая уравнение (10) относительно yi ,будем иметь:

 

                                                     (13)

 

Предположим, что с помощью  полной системы (10), (12) из уравнения (13) исключена неизвестная уi-1. Тогда это уравнение примет вид

 

                                       yi= ci(di — yi+1)                                                                   (14)

 

где сi, di (i= 1,2,..., п - 1) — некоторые коэффициенты. Отсюда

 

yi-1= ci-1(di-1 — yi)

 

Подставляя это выражение  в уравнение (10), получим

 

 

и,  следовательно

                                       

                          (15)

 

Приравнивая левые части  формулы (14) и (15) и сравнивая коэффициенты при yi+1 и свободные члены, получим для определения сi и di рекуррентные формулы:

 

                   (16)

 

Определим теперь с0 и d0. Из первого краевого условия (5) получаем

С другой стороны, из формулы (14) при i=0 имеем

 

                                                    y0= c0(d0 — y1)                                                          (17)

 

Приравнивая левые части  двух последних выражений  и сравнивая коэффициенты при y1 и свободные члены, находим

 

                               

                                       (18)

 

На основании формул (16), (18) последовательно определяются коэффициенты ci , di (i = 1, 2 ,…,n-1) до cn-1 и dn-1 включительно (прямой ход).

 

Обратный ход начинается с определения уп. Используя второе краевое условие (12) и формулу (14) при i=n-1, получим систему двух уравнений

 

                            (19)

 

Решим ее относительно уп :

 

 

 

 

                                            

                                        (20)

 

Теперь по формуле (14) последовательно  находим yn-1 , yn-2, yn-3, …,y0.

Для контроля можно проверить  выполнение первого краевого условия. Вычисления удобно расположить в  виде таблицы 1.

 

Таблица 1                                                                                        Схема метода прогонки

i

0

1

2

n-2

n-1

n

ci

c0 (18)

c1

c2

cn-2

cn-1

 

di

d0 (18)

d1

d2

dn-2

dn-1

 

xi

x0=a

x1

x2

xn-2

xn-1

xn=b

yi

y0

y1

y2

yn-2

yn-1

yn (20)


 

 

Замечание.   Для простейших краевых условий у(а)=А, у(b) = В формулы для с0, d0, у0 и уn упрощаются. А именно, полагая α0 = 1, α1=0 и β0 = 1, β1 = 0, из формул (18) будем иметь: с0= 0, d0 = ∞, c0d0 = A.

 

 

Отсюда

 

                                                          (21)

 

Причем

 

                                            yn=B,     y0=A                                                                        (22)

 

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

 

 

 

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

 

                                                     

                                                        (23)

 

                                                               y(0)=0, y(1)=0                                                 (24)

 

Решение. Примем h = 0,1 и от уравнения (23) и краевых условий (24) перейдем к соответствующим конечно-разностным уравнениям

 

y0=0,  y10=0.

 

где mi=-2-h2,    ni=1,     . Cогласно формулам (21) имеем

c1 = - 0,498,  d1= - 0,001. Формулы (16)  в нашем случае дают

 

 

Найденные значения сi и di (i = 1, 2, ... , 9) записываем в первых двух строках таблицы 62. Затем, используя формулу (14) и известное значение y10 = 0, вычисляем y9,  y8, …,  y1.

Для сравнения в последней строке таблицы 2 даны значения точного

решения

 

Таблица 2                                 Решение краевой задачи (23) — (24) методом прогонки

i

0

1

2

3

4

5

6

7

8

9

10

ci

0

-0,498

-0,662

-0,878

-0,890

-0,900

-0,908

-0,915

-0,921

-0,926

 

di

 

0,001

0,002

0,004

0,008

0,012

0,016

0,022

0,028

0,035

 

yi

0

-0,025

-0,049

-0,072

-0,078

-0,081

-0,078

-0,070

-0,055

-0,032

0

 

0

-0,015

-0,029

-0,041

-0,050

-0,057

-0,058

-0,054

-0,044

-0,026

0


 

 

При требовании повышенной точности приходится применять более  громоздкие приемы или вводить соответствующие  поправки.  В частности, этот метод дает более точные результаты, если при переходе от краевых условий (2) к конечно-разностным соотношениям воспользоваться трехчленными формулами для производных в точках х = а и х =b

 

 

Тогда из краевых условий (2) будем иметь

 

(27)

 

Для вычисления с0 и d0 берем первое краевое условие (27) и уравнение

 

 

взятое из системы (3) при  i=1.

Исключая у2 из этих двух уравнений, находим

 

                                                                              (28)

 

где . С другой стороны, из формулы (14) при i = 0 имеем

 

y0=c0(d0-y1).

 

Сравнивая последнее равенство  с (28), получаем

  •                                        (29)

По известным значениям  с0 и d0 последовательно определяются коэффициенты ci , di (i = 0, 1, …, п—1) до сп-1 и dn-1 включительно (см. формулы (16)).

Обратный ход начинается с определения уп.

Используя второе краевое  условие (27) и формулы (14), взятые при

i=n - 2 и i=n-1, получим систему трех уравнений

 

                                                               (30)

 

Решая эту систему относительно уп, будем иметь

 

                                   (31)

 

Теперь по формулам (14) последовательно  находим yn-1, yп-2,…,y0

Вычисления и в этом случае располагаем в виде таблицы 1.              [1]

 

  1. Разработка блок- схемы

2.1Алгоритм

1)Вывод на экран исходных данных и вычисление шага;

 

2)Получение системы  при помощи конечно-разностных  уравнений и вывод  этой системы на экран;

 

3)Осуществление метода  прогонки;

 

4)Вывод  конечного   решения  системы на экран; 

 

 

 

2.2Блок – схема

 

Рис 6. Блок-схема программы

  1. Отладка программы

3.1Код программы

program Project1;

 

{$APPTYPE CONSOLE}

 

uses

  SysUtils,

  Math;

 

const n=9;                // количество отрезков разбиения (отсчет начинается с нуля)

const a=0.7;             // начало отрезка 

const b=1;                // конец отрезка

const k0=1;              // α0 формула (2)

const k1=0;              //α1 формула (2)

const k2=0.5;        // А формула (2)

const q0=2;             // β0 формула (2)

const q1=3;             // β1 формула (2)

const q2=1.2;          // B формула (2)

 

var h:real;

var c:array[0..n] of real;

var d:array[0..n] of real;

var x:array[0..n] of real;

var y:array[0..n] of real;

var m:array[0..n] of real;

var l:array[0..n] of real;

var fi:array[0..n] of real;

var i:integer;

 

function p(x:real):real;

begin

  p:=1/x;                   // p(x) формула (1)

end;

 

function q(x:real):real;

begin

 q:=2;                      // q(x) формула (1)

end;

 

function f(x:real):real;

begin

 f:=x;                       // f(x) формула (1)

end;

 

begin

  h:=(b-a)/n;             // вычисление шага

  writeln('Differencial`noie uravnenie imeet vid: y"+p(x)*y`+q(x)*y=f(x)');    // вывод начальных условий на экран

  writeln('p(x) = 1/x , q(x)=2, f(x)=x');

  writeln;

  writeln('',k0,'*y(',a:2:1,') + ',k1,'*y`(',a:2:1,') = ',k2:1:1);

  writeln('',q0,'*y(',b,') + ',q1,'*y`(',b,') = ',q2:1:1);

  writeln;

  writeln('*******************************************************************"');

   // Получение системы конечно-разностных  уравнений        

  for i:=0 to n do

  begin

    x[i]:=a+i*h; // разбиение [a;b] на отрезки длиной h

    fi[i]:=f(x[i])/(1+p(x[i])*h/2);                                         // вычисление      формула (11)

    l[i]:=(1-p(x[i])*h/2)/(1+p(x[i])*h/2);                           // вычисление ni формула  (11)

    m[i]:=(-1)*(2-q(x[i])*h*h)/(1+p(x[i]*h)/2);               // вычисление mi формула (11)

  end;

  writeln('Sistema imeet vid:');                                       // Вывод системы на экран

  for i:=1 to (n-1) do writeln('y[',i+1,'] + (',m[i]:2:4,')*y[',i,'] + ',l[i]:2:4,'*y[',i-1,'] = ',fi[i]*h*h:2:4);

  writeln('',k0,'*y[0] + ',(k1/h):2:2,'*(y[1]-y[0]) = ',k2:1:1);

  writeln('',q0,'*y[0] + (',(q1/-h):2:2,')*(y[',n-1,'] - y[',n,']) = ',q2:1:1);

  writeln;

 

                                                // Осуществление метода прогонки        

     // прямой ход

 

  if ((k0*h-k1)<>0) then c[0]:=k1/(k0*h-k1)                      // вычисление с0 формула (18)

  else c[0]:=0;

  if (k1<>0) then d[0]:= k2*h/k1                                          // вычисление d0 формула (18)

  else d[0]:=0;

  for i:=1 to (n-1) do

  begin

    c[i]:=1/(m[i]- l[i]*c[i-1]);                                                  // вычисление сi формула  (16)

    d[i]:=fi[i]*h*h - l[i]*c[i-1]*d[i-1];                                   //  вычисление di формула  (16)

    if (k1=0) then d[1]:=fi[1]*h*h - l[1]*k2/k0;

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