Решение систем линейных уравнений методом прогонки
Решение систем алгебраических линейных уравнений методом Крамера. Сущность метода прогонки. Программная реализация метода: блок-схема алгоритма, листинг программы. Проверка применимости данного способа решения для конкретной системы линейных уравнений.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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
Подобные документы
Алгоритм решения систем линейных уравнений методом Гаусса, его этапы. Система уравнений для определения коэффициентов сплайна, представляющая собой частный случай систем линейных алгебраических уравнений. Программная реализация, тестовый пример.
курсовая работа [431,8 K], добавлен 15.06.2013Системы линейных алгебраических уравнений. Матричный метод решения систем линейных уравнений. Решение задачи математическим методом. Блок-схема алгоритма и листинг программы. Расчет трудоемкости разработки программы. Расчет себестоимости и цены программы.
дипломная работа [144,8 K], добавлен 25.04.2012Сущность матричного метода. Разработка программы решения системы уравнений линейных алгебраических уравнений методом решения через обратную матрицу на языке программирования Delphi. Представление блок-схемы и графического интерфейса программного продукта.
курсовая работа [1,0 M], добавлен 27.09.2014Требования к языкам программирования, их эффективность, лаконичность, ясность, реальные возможности. Создание языка С#. Применение систем линейных алгебраических уравнений для практических задач, сущность и особенности метода Крамера для их решения.
курсовая работа [118,1 K], добавлен 13.11.2009Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы решения задачи методом Гаусса. Программная реализация решения. Алгоритмы запоминания коэффициентов.
лабораторная работа [23,5 K], добавлен 23.09.2014Приведение системы линейных алгебраических уравнений к треугольному виду прямым ходом метода Гаусса. Применение обратного хода метода вращений. Создание алгоритма, блок-схемы и кода программы. Тестовый пример решения уравнения и его проверка в MathCad.
лабораторная работа [164,3 K], добавлен 02.10.2013Общее понятие о линейных уравнениях и их системах. Разработка программного продукта в среде Delphi 7 для решения методом Крамера квадратных систем линейных алгебраических уравнений с ненулевым определителем основной матрицы. Описание конкретных примеров.
курсовая работа [193,7 K], добавлен 07.07.2013Использование метода Зейделя для нахождения корней системы линейных алгебраических уравнений. Суть метода простых итераций. Оценка погрешности нормальной системы. Составление алгоритма, блок-схемы и кода программы. Тестовый пример и проверка в MathCad.
лабораторная работа [174,8 K], добавлен 02.10.2013Преобразование матрицы системы линейных алгебраических уравнений (СЛАУ) с помощью алгоритма Гаусса. Решение задачи методом простой итерации. Создание блок-схемы и текста программы для решения СЛАУ, реализованной на языке программирования Turbo Pascal.
курсовая работа [1,2 M], добавлен 15.06.2013Методы решения систем линейных уравнений трехдигонального вида: прогонки, встречных прогонок, циклической редукции. Параллельные алгоритмы решения. Метод декомпозиции области. Основные возможности и особенности технологии CUDA. Анализ ускорения алгоритма.
дипломная работа [1,4 M], добавлен 21.06.2013