Автор работы: Пользователь скрыл имя, 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
Отсюда согласно условиям (2), получим
                              
Линейная система (10), (12) состоит из n+1 уравнений первой степени относительно неизвестных y0, у1 ,... , уп. Для решения этой системы воспользуемся методом прогонки. Разрешая уравнение (10) относительно yi ,будем иметь:
                              
Предположим, что с помощью полной системы (10), (12) из уравнения (13) исключена неизвестная уi-1. Тогда это уравнение примет вид
                              
где сi, di (i= 1,2,..., п - 1) — некоторые коэффициенты. Отсюда
yi-1= ci-1(di-1 — yi)
Подставляя это выражение в уравнение (10), получим
и, следовательно
                              
Приравнивая левые части формулы (14) и (15) и сравнивая коэффициенты при yi+1 и свободные члены, получим для определения сi и di рекуррентные формулы:
Определим теперь с0 и d0. Из первого краевого условия (5) получаем
С другой стороны, из формулы (14) при i=0 имеем
                              
Приравнивая левые части двух последних выражений и сравнивая коэффициенты при y1 и свободные члены, находим
                              
На основании формул (16), (18) последовательно определяются коэффициенты ci , di (i = 1, 2 ,…,n-1) до cn-1 и dn-1 включительно (прямой ход).
Обратный ход начинается с определения уп. Используя второе краевое условие (12) и формулу (14) при i=n-1, получим систему двух уравнений
Решим ее относительно уп :
                              
Теперь по формуле (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.
Отсюда
                              
Причем
                              
Заметим, что метод прогонки обладает устойчивым вычислительным алгоритмом , т. е. ошибки округления не вызывают неограниченного возрастания погрешности решения.
Пример 1. Методом прогонки решить краевую задачу
                              
                              
Решение. Примем 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 из этих двух уравнений, находим
                              
где . С другой стороны, из формулы (14) при i = 0 имеем
y0=c0(d0-y1).
Сравнивая последнее равенство с (28), получаем
По известным значениям с0 и d0 последовательно определяются коэффициенты ci , di (i = 0, 1, …, п—1) до сп-1 и dn-1 включительно (см. формулы (16)).
Обратный ход начинается с определения уп.
Используя второе краевое условие (27) и формулы (14), взятые при
i=n - 2 и i=n-1, получим систему трех уравнений
                              
Решая эту систему относительно уп, будем иметь
                              
Теперь по формулам (14) последовательно находим yn-1, yп-2,…,y0
Вычисления и в этом случае располагаем в виде таблицы 1. [1]
 
2.1Алгоритм
1)Вывод на экран исходных данных и вычисление шага;
2)Получение системы при помощи конечно-разностных уравнений и вывод этой системы на экран;
3)Осуществление метода прогонки;
4)Вывод конечного решения системы на экран;
 
2.2Блок – схема
Рис 6. Блок-схема программы
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)
    l[i]:=(1-p(x[i])*h/2)/(1+p(x[
    m[i]:=(-1)*(2-q(x[i])*h*h)/(1+
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)            
else c[0]:=0;
  if (k1<>0) then d[0]:= k2*h/k1                       
else d[0]:=0;
for i:=1 to (n-1) do
begin
    c[i]:=1/(m[i]- l[i]*c[i-1]);                 
    d[i]:=fi[i]*h*h - l[i]*c[i-1]*d[i-1];           
if (k1=0) then d[1]:=fi[1]*h*h - l[1]*k2/k0;