Решение систем линейных уравнений методом прогонки

Решение систем алгебраических линейных уравнений методом Крамера. Сущность метода прогонки. Программная реализация метода: блок-схема алгоритма, листинг программы. Проверка применимости данного способа решения для конкретной системы линейных уравнений.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 15.06.2013
Размер файла 581,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Курсовая работа

Решение систем линейных уравнений методом прогонки

по дисциплине Численные методы

Введение

Численные методы являются одним из мощных математических средств решения задачи. Простейшие численные методы мы используем всюду, например, извлекая квадратный корень на листке бумаги. Есть задачи, где без достаточно сложных численных методов не удалось бы получить ответа; классический пример - открытие Нептуна по аномалиям движения Урана.

Системы линейных алгебраических уравнений возникают как промежуточный или окончательный этап при решении ряда прикладных задач, описываемых дифференциальными, интегральными или системами нелинейных (трансцендентных) уравнений. Они могут появляться как этап в задачах математического программирования, статистической обработки данных, аппроксимации функций, при дискретизации краевых дифференциальных задач методом конечных разностей, методом конечных элементов, проекционными методами, в методе граничных элементов, дискретных особенностей, панельном методе аэродинамической компоновки летательного аппарата и т.д.

Матрицы возникающих систем могут иметь различные структуры и свойства. Уже сейчас имеется потребность в решении систем линейных алгебраических уравнений с матрицами полного заполнения порядка нескольких тысяч. При решении ряда прикладных задач методом конечных элементов в ряде случаев появляются системы, обладающие симметричными положительно определёнными ленточными матрицами порядка несколько десятков тысяч с половиной ширины ленты до тысячи. И, наконец, при использовании в ряде задач метода конечных разностей необходимо решить системы разностных уравнений с разрежёнными матрицами порядка миллион.

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

Цель работы: научиться решать системы линейных уравнений методом прогонки.

1. Теоретическая часть

1.1 Метод Крамера

Пусть дана система линейных уравнений:

Коэффициенты a11,12,..., a1n, ... , an1 , b2 , ... , bn считаются заданными. Вектор- строка x1 , x2 , ... , xn - называется решением системы (1), если при подстановке этих чисел вместо переменных все уравнения системы (1) обращаются в верное равенство.

Определитель т-го порядка a ij , составленный из коэффициентов при неизвестных, называется определителем системы (1). В зависимости от определителя системы (1) различают следующие случаи: .

a). Если , то система (1) имеет единственное решение, которое может быть найдено по формулам Крамера: x1=, где

определитель n-го порядка i ( i=1,2,...,n) получается из определителя системы петём замены i-го столбца свободными членами b1 , b2 ,..., bn.

б). Если , то система (1) либо имеет бесконечное множество решений, либо несовместна, т.е. решений нет.

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

Для решения систем A x = b с трехдиагональной матрицей наиболее часто применяется метод прогонки, являющийся адаптацией метода Гаусса к этому случаю.

Запишем систему уравнений

d1x1 + e1x2 = b1

c2x1 + d2x2 + e2x3 = b2

c3x2 + d3x3 + e3x4 = b3

... ... ...

cn-1xn-2 + dn-1xn-1 + en-1xn = bn-1

cnxn-1 + dnxn = bn

в матричном виде: A x = b где A=

Выпишем формулы метода прогонки в порядке их применения.

Прямой ход метода прогонки (вычисление вспомогательных величин):

Обратный ход метода прогонки (нахождение решения):

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

| di | ? | c i | + | ei |

причем хотя бы одно неравенство должно быть строгим.

2. Постановка задачи

2.1 Решение систем линейных уравнений методом Крамера

Нам дано уравнение вида:

Преобразуем его в матрицу

Затем подставим значения в формулы для нахождения ?

=0.71*0.34*0.56+0.1*(-0.1)*(-0.04)+0.1*0.64*(-0.12)-0.34*(-0.12)*(-0.1)-0.71*0.64*(-0.04)-0.1*(-0.56)*(-0.1)=0.135184+0.0004-0.00768-0.00408+0.018176-0.0056=0.1364

0.29*0.34*0.56+0.32*0.64*(-0.12)+0.1*(-0.04)*(-0.1)-(-0.1)*0.34*(-0.12)-0.64*0.29*(-0.04)-0.32*0.1*0.56=0.055216-0.024576+0.0004-0.00408+0.007424-0.01792=0.016464

0.71*0.32*0.56+0.1*(-0.1)*(-0.12)+0.29*(-0.04)*(-0.1)-(-0.1)*0.32*(-0.12)-0.1*0.29*0.56-(-0.1)*(-0.04)*0.71= =0.127232+0.0012+0.00116-0.00384-0.01624-0.00284=0.106672

0.71*0.34*(-0.1)+0.1*0.64*0.29+0.1*0.32*(-0.1)-(-0.1)*0.32*0.29-0.64*0.32*0.71-0.1*0.1*(-0.1)=

=-0.02414+0.01856-0.0032+0.00928-0.145408+0.001=-0.143908

Подсчитаем чему равны корни уравнения

Выполним проверку:

0,71*0,12070381+0,1*0,78205279-0,12*(-1,055044) =0,0856997051+0,078205279+0,12660528=0,2905102641

2.2 Решение систем алгебраических линейных уравнений методом прогонки

линейный уравнение программный прогонка

1ур*0.1 2ур*(-0.71)

1ур+2ур

2ур*(-0,56 3ур*0,0284)

2ур+3ур

б= - в=

б1= - =-0.07087295

б2= - =0.11764706

б3= - =0

в1==-0.8565255

в2==0.94117647

в3==0.81111111

Xn=

X1= = =0,856526

X2= = =1,2617

X3 = =0,615844

3. Программная реализация

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

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

edtB1: TEdit;

lbl2: TLabel;

edtE1: TEdit;

lbl3: TLabel;

edtD1: TEdit;

edtE2: TEdit;

lbl4: TLabel;

edtB2: TEdit;

lbl5: TLabel;

edtD2: TEdit;

edtC2: TEdit;

lbl6: TLabel;

lbl7: TLabel;

edtD3: TEdit;

lbl8: TLabel;

edtB3: TEdit;

lbl9: TLabel;

edtC3: TEdit;

btn1: TButton;

lbl1: TLabel;

lbx: TLabel;

lby: TLabel;

lbz: TLabel;

procedure btn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

// нажатие на "вычислить"

procedure TForm1.btn1Click(Sender: TObject);

const

n=3; // размерность массивов и матриц

var

C, D, E : array of Real; //матрица уравнений

B : array of Real; // чему равны уравнения (первая часть)

Y : array of Real; // результат

I,k : Integer; // для циклов, перебора

ALF, BET : array of Real; // Alpha и Beta для предв. вычислений

znam : Real;

begin

{установим длины массивов}

SetLength(C,n);

SetLength(D,n);

SetLength(E,n);

SetLength(B,n);

SetLength(Y,n);

SetLength(ALF,n);

SetLength(BET,n);

{заполним массивы}

//главная диагональ (d):

d[0]:=strtofloat(edtD1.text);

d[1]:=strtofloat(edtD2.text);

d[2]:=strtofloat(edtD3.text);

//диагональ c (та что пониже d)

c[0]:=0;

c[1]:=strtofloat(edtC2.text);

c[2]:=strtofloat(edtC3.text);

//диагональ e (та что повыше d)

e[0]:=strtofloat(edtE1.text);

e[1]:=strtofloat(edtE2.text);

e[2]:=0;

//заполняем чему равны наши выражения

b[0]:=strtofloat(edtB1.text);

b[1]:=strtofloat(edtB2.text);

b[2]:=strtofloat(edtB3.text);

//прорверим, можно ли считать этим способом:

k:=0;

for i:=0 to n-1 do

if Abs(d[i])>Abs(c[i])+abs(e[i]) then k:=k+1;

if k=0 then begin

ShowMessage('Данный способ не применим, т.к. условие диагонального преобладания матрицы не выполняется :( ');

Exit;

end;

{вычисление вспомогательных величин}

ALF[0]:= -(E[0]/D[0]);

BET[0]:= B[0]/D[0];

{прямой ход}

for I:= 1 to n - 1 do

begin

znam := d[i] + c[i]*ALF[i-1];

ALF[i]:= -(e[i]/znam);

BET[i]:= (-c[i]*BET[i-1]+b[i])/znam;

end;

{обратный ход, нахождение корней}

Y[n-1]:=(b[n-1]-c[n-1]*BET[n-2])/(d[n-1]+c[n-1]*ALF[n-2]);

for I:= n - 2 downto 0 do

Y[i]:=Y[i+1]*ALF[i]+BET[i];

//вывод результата

lbx.Caption:='X = ' + floattostr(Y[0]);

lby.Caption:='Y = ' + floattostr(Y[1]);

lbz.Caption:='Z = ' + floattostr(Y[2]);

end;

end.

3.2 Тестовый пример

Рассмотрим работу программы на простейшем примере

Все корни данной системы равны 1. Результат показан на рисунке 1.

Рисунок 1. Результат работы программы на тестовом примере

3.3 Решение задачи с помощью ЭВМ

Рассмотрим работу программы на примере

По итогам вычислений проделанных выше корни данного примера равны

X=0,856526 Y=1,2617 Z= - 0,6158

Результат работы программы показан на рисунке 2.

Рисунок 2. Вычисление систем линейных уравнений методом прогонки

Заключение

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

В ходе выполнения курсовой работы мы проделали ручной расчет заданного уравнения, написали программу на языке программирования Delphi. Также мы выполнили тестовый пример для проверки метода прогонки

Список литературы

1. Л.И.Турчак П.В.Плотников Основы численных методов

2. http://www.gasu.ru/resour/eposobia/metody/R_1_3.html

3. http://ru.wikipedia.org/wiki/Метод_прогонки

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.