Введение
Данная курсовая работа включает в себя три итерационных метода решения систем линейных алгебраических уравнений (СЛАУ):
1. Метод Якоби (метод итераций).
2. Метод Холецкого.
3. Метод верхней релаксации.
Также данная курсовая работа включает в себя: описание метода, применение метода к конкретной задаче (анализ), код программы решения вышеперечисленных методов на языке программирования BorlandC++ Builder 6.
Описание метода
Метод решения задачи называют итерационным, если в результате получают бесконечную последовательность приближений к решению. Основное достоинство итерационных методов состоит в том, что точность искомого решения задается. Число итераций, которое необходимо выполнить для получения заданной точности
, является основной оценкой качества метода. По этому числу проводится сравнение различных методов.Главным недостатком этих методов является то, что вопрос сходимости итерационного процесса требует отдельного исследования. Примером обычных итерационных методов служат: метод итераций (метод Якоби), метод Зейделя, метод верхних релаксаций.
Начнем с метода итераций или как его ещё называют метода Якоби.
Существует сиcтема A·x = f (1), где матрица A = [aij] (i, j = 1, 2, …m) имеет обратную матрицу; x = (x1, x2, x3,… xm) – вектор неизвестных, f – вектор свободных членов. Систему (1) нужно преобразовать к следующему виду:
(2) i=1, 2,…, m, где , , при этом aii 0.Значение суммы считается равным 0, если верхний предел суммирования меньше нижнего. Тогда при i=1 уравнение имеет вид:
(3). В методе Якоби исходят из записи системы в виде (2), итерации при этом определяют следующим образом: , (n=0, 1, …, n0, i=1, 2, …, m) (4).Начальные значения
– (i=0, 1, …, m) задаются произвольно (в программе мы это проделываем, вводя функцию по генерации случайных чисел – «random»). Окончание итерационного процесса определяют либо заданием максимального числа итераций n0, либо следующим условием: , где >0. В качестве нулевого приближения в системе (4) примем .Если последовательность приближений x1(0), x2(0),…, xm(0), x1(1), x2(1),…, xm(1),…, x1(k), x2(k),…, xm(k) имеет предел
, , то этот предел является решением системы (2).Достаточным условием сходимости решения системы (1) является то, что матрица A является матрицей с преобладающими диагональными элементами, то есть
, i=1, 2, …, m.Теперь рассмотрим второй итерационный метод – метод Зейделя, который является модификацией метода Якоби. Основная его идея заключается в том, что при вычислении (k+1) – го приближения неизвестной xi учитываются уже вычисленные ранее (k+1) – е приближения (x1 x2,…, xi-1).
Пусть дана приведенная линейная система:
(i = 1, 2, …n) (5). Выбираются произвольно начальные приближения корней x1(0), x2(0),…, xn(0), чтобы они в какой-то мере соответствовали неизвестным x1, x2, x3,…, xn.Предполагается, что k-е приближение
корней известно, тогда в соответствии с идеей метода строится (k+1) – е приближение по следующим формулам:w | 0.1 | 0.4 | 0.8 | 0.9 | 1 | 1.1 | 1.2 | 1.3 | 1.7 | 1.9 |
k | 16 | 15 | 14 | 13 | 9 | 13 | 14 | 15 | 16 | 16 |
Из всего этого можно сделать вывод, что итерационные методы сходятся быстрее, чем точные методы, о чем свидетельствуют как быстрое уменьшение невязок, так и уменьшение изменений неизвестных.
Листинг программы
// –
#include <vcl.h>
#pragma hdrstop
#include «Unit1.h»
// –
#pragma package (smart_init)
#pragma resource «*.dfm»
#include<math.h>
#include<stdlib.h>
TForm1 *Form1;
int n=0, prov=0, k=0;
const x=100;
float A[x] [x], B[x] [x];
float C[x], Y[x];
float *X;
bool fl1=false;
float e;
float v_sh;
// –
__fastcall TForm1:TForm1 (TComponent* Owner)
: TForm(Owner)
{
}
// –
void __fastcall TForm1: ButtonOkClick (TObject *Sender)
{
Memo1->Lines->Clear();
k=0;
TryStrToInt (Edit1->Text, n);
if (n>1)
{
StringGrid1->Enabled=true;
StringGrid1->RowCount=n;
StringGrid1->ColCount=n+1;
ButtonClear->Enabled=true;
ButtonOk->Enabled=false;
StringGrid1->Color=clWindow;
ButtonYakobi->Enabled=true;
ButtonZeydel->Enabled=true;
ButtonRelax->Enabled=true;
X=new float[n];
for (int i=0; i<n; i++)
{
for (int j=0; j<n+1; j++)
{
A[i] [j]=NULL;
}
X[i]=NULL;
}
}
else