Метод релаксации переменных решения СЛАУ

ВВЕДЕНИЕ



Численное решение СЛАУ – одна из наиболее часто встречающихся задач в научно-технических исследованиях. Такая задача возникает в математической физике (численное решение дифференциальных и интегральных уравнений), экономике, статистике. При этом прикладные задачи часто требуют решения больших и сверхбольших СЛАУ с числом неизвестных более 1000. К таким СЛАУ, например, приводит численное решение двумерных и особенно трехмерных задач математической физики, в которых условия физической и геометрической аппроксимации двумерной и трехмерной области диктуют использование достаточно мелкой расчетной сетки с большим числом расчетных узлов по линейному размеру.

Существующие библиотеки программ на языках высокого уровня, разработаны на основе, так называемых, прямых методов решения СЛАУ, типа метода Гаусса и его модификаций. Число арифметических операций умножения для численного решения СЛАУ размерностью  с помощью прямого метода - . Кубическая зависимость числа арифметических операций от размера матрицы СЛАУ приводит при  к нереально большому времени решения даже на самых современных ЭВМ. Кроме того, время решения несоразмерно возрастает при использовании прямых методов в случае  по причине недостаточности объема оперативной памяти для хранения данных задачи.

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

В настоящее время отсутствуют библиотеки подпрограмм широкого назначения для численного решения больших и сверхбольших СЛАУ. Таким образом, разработка эффективных итерационных алгоритмов для широкого класса матриц СЛАУ большой размерности и библиотек подпрограмм на их основе является актуальной задачей.

Наиболее алгоритмически простыми среди итерационных методов являются стационарные итерационные методы, такие как оптимальный метод простой итерации и метод релаксации. В то же время показано, что можно добиться их эффективной сходимости для достаточно широкого класса вещественных и комплексных матриц СЛАУ. Для нестационарных итерационных методов, таких как метод с чебышевским набором параметров, минимальных невязок, сопряженных градиентов, сходимость доказана в узком классе матриц, например, таких как вещественные симметричные положительно определенные матрицы. И в этом узком классе матриц сходимость оптимальных стационарных методов, опирающихся на известные спектральные матричные свойства, оказывается в некоторых случаях даже лучшей. При этом число арифметических операций стационарного алгоритма минимально. Еще одним преимуществом оптимального метода простой итерации является возможность естественного распараллеливания алгоритма при постановке его на современные параллельные ЭВМ, так как алгоритм по существу сводится к одному умножению матрицы на вектор. Все эти аргументы указывают на выбор стационарных итерационных методов в качестве алгоритмической основы для библиотеки подпрограмм по решению СЛАУ с большими матрицами. В курсовой работе рассмотрен итерационный метод релаксации решения СЛАУ.


1. МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ



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



,

(1.1)



где

А  матрица размерности , 

x=(x1,x2,...,xn)T вектор решения, 

f=(f1,f2,...,fn)T  вектор правых частей.

Численные методы решения данной системы принято разделять на два класса: прямые методы и итерационные. 

Прямыми методами называются методы, позволяющие получить решение системы уравнений (1.1) за конечное число арифметических операций.

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

Суть итерационных методов состоит в том, что решение системы (1.1) находится как предел последовательных приближений x(n) при n, где n  номер итерации. Применение итерационных методов требует задания начального значения неизвестных х(0) и точности вычислений >0. Вычисления проводятся до тех пор, пока не будет выполнена оценка



.

(1.2)



Основное достоинство итерационных методов состоит в том, что точность искомого решения задается.

Число итераций n=n(), которое необходимо выполнить для получения заданной точности , является основной оценкой качества метода. По этому числу проводится сравнение различных методов.

Главным недостатком этих методов является то, что вопрос сходимости итерационного процесса требует отдельного исследования. Доказанные в настоящее время теоремы о сходимости итерационных методов имеют место для систем, на матрицы которых наложены ограничения.

Примером обычных итерационных методов могут служить метод Якоби (метод простых итераций), метод Зейделя, метод верхних релаксаций.

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

Итерационные методы также делятся на одношаговые, когда для определения решения на j+1 итерации используются значения решения, найденные на j итерации, и многошаговые, когда для определения решения на j+1 итерации используется несколько предыдущих итераций.

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



,

(1.4)



получается большим по величине, т.е. найденное решение не удовлетворяет исходной системе. В этом случае в качестве критерия достижения точности решения может быть взята величина невязки, которая оценивается по одной из норм  .

Продемонстрируем применение одношагового итерационного метода Якоби на решении системы трех уравнений. Пусть система (1.1) имеет вид




 (1.5)





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







(1.6)



Непосредственная проверка условия (1.2) связана с необходимостью знания точного решения. Поэтому на практике используется несколько упрощенное правило, т.е. проверяют, достигнута заданная точность или нет, сравнивая два итерационных значения x







(1.7)



Если точность не достигнута, то выполняется следующая итерация. В системе (1.5)  заменяем на  и находим значения . После этого вновь проверяем, достигнута точность решения или нет.

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

Запишем выражение i+1 итерации через i:







(1.8)



Если точность решения достигнута, то счет прекращается. 

Для систем m-го порядка имеем





 

(1.9)



Запишем метод простых итераций в матричной форме. Представим матрицу А в виде суммы трех матриц



А=А1+D+A2,

(1.10)



где D = diag[a11, a22, ...,amm]  диагональная матрица, 

А1=  нижняя треугольная матрица, 

А2=  верхняя треугольная матрица.

Представим систему (1.1) в матричной форме 





(1.11)


Метод Якоби в матричной записи выглядит следующим образом



,

(1.12)



Или



,

.



(1.13)



Существуют итерационные методы, обладающие лучшей скоростью сходимости, чем методы Якоби. В этих методах при вычислении i+1 итерации  компоненты вектора решения используются, найденные на i+1 итерации компоненты решения с номерами , l=1,2,...,j-1. Наиболее распространенным методом подобного типа является метод Зейделя. Продемонстрируем его применение на системе (1.3). Вновь, задавая начальное приближение, для первой итерации запишем







(1.14)



После проверки условия сходимости совершаем вторую итерацию и т.д. Для i+1 итерации запишем







(15)


Общая формула имеет вид



.

(1.16)



Запишем метод Зейделя в матричной форме



,

(1.17)



или в форме близкой к каноническому виду



,

(1.18)

.

(1.19)



Äëÿ îäíîøàãîâûõ èòåðàöèîííûõ ìåòîäîâ, ñóùåñòâóåò êàíîíè÷åñêàÿ ôîðìà çàïèñè 



.

(1.20)



Здесь  матрица, задающая тот или иной итерационный метод,  итерационный параметр. В случае метода Якоби  это матрица D, а =1, в случае метода Зейделя =D+А1, а итерационный параметр также равен единице =1.

Формируя матрицу B различным образом и задавая различные значения итерационного параметра, можно получать одношаговые итерационные методы самого разного вида. В зависимости от выбора этих параметров мы будем получать методы, которые будут обладать различной скоростью сходимости, т.е. заданная точность будет достигаться за разное число итераций.

Одним из наиболее распространенных одношаговых итерационных методов является метод верхних релаксаций*, который имеет следующий вид 



,

(1.21)



где >0  заданный числовой параметр. Этот параметр выбирается таким образом, чтобы на каждом шаге итерационного процесса уменьшалась величина, характеризующая близость полученного решения к искомому решению системы.

Для получения расчетных формул (1.21) перепишем в виде



,

(1.22)



или в покомпонентной записи получим



.

(1.23)



Приведем несколько строк покомпонентной записи



,

(1.24)

,

(1.25)



(1.26)


Практика применения итерационных методов показала, что эти методы приводят к правильному решению для систем с матрицей А имеющей специальный вид. Приведем ряд теорем о сходимости итерационных методов. Доказательства этих теорем приводятся в книге [1].

Рассмотрим итерационные методы с постоянным итерационным параметром, записанные в виде 



.

(1.27)



Теорема 1.

Пусть А  симметричная положительно определенная матрица, >0 и пусть выполнено неравенство В-0,5А>0. Тогда итерационный метод (1.27) сходится.

Следствие 1.

Пусть А  симметричная положительно определенная матрица с диагональным преобладанием, т.е. 





(1.28)



Тогда метод Якоби сходится.

Следствие 2.

Пусть А  симметричная положительно определенная матрица. Тогда метод верхних релаксаций сходится при условии 0<<2. В частности, метод Зейделя сходится (=1).

Теорема 2.

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


Теорема 3.

Пусть А и В  симметричные положительно определенные матрицы, для которых справедливы неравенства , где 1,2  положительные постоянные, 1>2. При  итерационный метод (1.27) сходится и для погрешности справедливы оценки



, i=0,1,...,

(1.29)



Где





(1.30)

,

(1.31)

,

(1.32)

.

(1.33)



Следствие 1.

Если АТ=А>0, то для метода простой итерации 





(1.34)



при 





(1.35)



справедлива оценка



,

(1.36)



где 





(1.37)



(1.38)



Следствие 2.

Для симметричной матрицы А и 





(1.39)



справедливо равенство 



,

(1.40)



где ,. В приложениях часто встречаются задачи с плохо обусловленной матрицей А, когда отношение  велико. В этом случае число 0 близко к единице, и метод простой итерации сходится медленно.

Оценим число итераций n0(), которое требуется для достижения заданной точности  в случае малых , т.е. для получения оценки



.

(1.41)



Из условия  получаем, что 



,

(1.42)



и при малых  имеем 



.

(1.43)



Заметим, что в качестве критерия сходимости итерационного метода может использоваться невязка, которая получается при подстановке найденного решения в систему (1.1).



1.1 Метод верхних релаксаций

линейный уравнение итерационный релаксация

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

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

Еще одно достоинство итерационного метода верхних релаксаций состоит в том, что при его реализации на ЭВМ алгоритм вычислений имеет простой вид и позволяет использовать всего один массив для неизвестного вектора.


Основная вычислительная формула имеет вид





(1.44)



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



.

(1.45)



Действительно, при последовательном нахождении элемента ( i+1 итерации) на каждом шаге будут использоваться найденные ранее значения, которые при k<j соответствуют i +1 итерации, а при k>j  i итерации. 

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



1.2 Âû÷èñëèòåëüíûå ïîãðåøíîñòè ìåòîäà âåðõíèõ ðåëàêñàöèé



Один из основных вопросов применения итерационных методов связан с корректностью выбора точности метода . 

Àíàëèçèðóÿ âû÷èñëèòåëüíûå ïîãðåøíîñòè âûðàæåíèÿ (1.45), ïîëó÷èì îöåíêó íàèìåíüøåãî çíà÷åíèÿ òî÷íîñòè ìåòîäà âåðõíèõ ðåëàêñàöèé. 

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

Çàïèøåì ðàçíîñòü äâóõ èòåðàöèîííûõ ïðèáëèæåíèé ðåøåíèÿ è îöåíèì å¸ ìèíèìàëüíîå çíà÷åíèå





(1.46)



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





(1.47)



бывает с ростом номера итерации k, т.е. . Оценка абсолютной погрешности правой части выражения (10) может быть представлена в следующем виде 



,

(1.48)



здесь . модуль минимального значения диагонального элемента .Отсюда следует, что задаваемая погрешность метода .


1.3 Ìåòîä áëî÷íîé ðåëàêñàöèè



Èñõîäíàÿ ìàòðèöà  ðàçáèâàåòñÿ íà áëîêè (â ðàìêàõ ëàáîðàòîðíîé ðàáîòû áóäåì ðàññìàòðèâàòü ñëó÷àé, êîãäà  ðàçáèâàåòñÿ íà êâàäðàòíûå áëîêè ðàâíîé ðàçìåðíîñòè). Âåêòîð ïðàâîé ÷àñòè è âåêòîð íåèçâåñòíûõ ðàçáèâàþòñÿ íà áëîê-âåêòîðû ñîîòâåòñòâóþùåé ðàçìåðíîñòè. Íàïðèìåð, äëÿ ðàçìåðà áëîêà ðàâíîãî äâóì, ïîëó÷àåì:







(1.49)





ãäå 





(1.50)



(1.51)



(1.52)



Çàïèøåì ôîðìóëó äëÿ áëîêîâ ìàòðèöû  è áëîê-âåêòîðîâ  è :





(1.53)



Îáîçíà÷èì 





(1.54)



(1.55)



Òîãäà, ïîäñòàâëÿÿ (1.54) è (1.55) â (1.53) è óìíîæàÿ ñëåâà íà , äëÿ êàæäîãî áëîê-âåêòîðà  ïîëó÷àåì ÑËÀÓ:





(1.56)



Ðåøåíèå ïîëó÷åííûõ ñèñòåì (1.56) ðåêîìåíäóåòñÿ âûïîëíÿòü ñ èñïîëüçîâàíèåì ôàêòîðèçàöèè ìàòðèöû , ïðè÷¸ì ôàêòîðèçàöèþ ñëåäóåò âûïîëíÿòü 1 ðàç ïåðåä ïåðâîé èòåðàöèåé.


2. ÐÀÇÁÎÐ ÌÅÒÎÄÀ ÐÅËÀÊÑÀÖÈÉ Â ÑÈÑÒÅÌÀÕ ËÈÍÅÉÍÛÕ ÓÐÀÂÍÅÍÈÉ ÍÀ ÏÐÈÌÅÐÅ



ПРИМЕР: решить методом релаксаций данную систему







(2.1)



Вычисления производить с точностью до двух знаков после запятой.

РЕШЕНИЕ: Приводим систему(4) к виду, удобному для решения методом релаксации







(2.2)



Задаем начальные приближения корней нулевыми значениями





(2.3)



Находим значения невязок

























0

0,60

0

0,70

0

0,80





0,16



0,16



-0,80





0,76



0,86



0





0,17

0,86

-0,86



0,09





0,93



0



0,09



0,93

-0,93



0,09



0,09





0



0,09

0,18

0,18





0,04



0,04



-0,18





0,04

0,13

0,13



0





0,03



-0,13



0,01



0,07

0,07



0



0,01





-0,07



0,01



0,01





0



0,01

0,02

0,02





0



0



-0,02





0













0

0,01

0,01



0





0



-0,01



0





0



0



0



1,00



1,00



1,00





Далее, решаем



И так далее. Подставляем результаты вычисленные в таблице. Подсчитав все приращения , содержащее значение корней 

Для проверки подставляем найденные значения корней в исходное уравнение; в целом система решена точно. 




Рисунок 1 – Решение системы с помощью языка Borland C++



Листинг программы решающий систему методом релаксаций переменных приведен в приложении.


ЗАКЛЮЧЕНИЕ



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

Но такие системы уравнений могут быть, во-первых, очень большого размера, например, NxN=10000х10000, и даже более; во-вторых, система уравнений может оказаться недоопределенной; в-третьих, она может оказаться с линейно зависимыми уравнениями; в-четвертых, она может оказаться переопределённой и несовместной. Кроме того, в-пятых, вычислительная техника может иметь далеко не рекордное быстродействие и объём оперативной памяти, и заведомо конечную разрядность двоичного представления чисел и связанные с этим ненулевые вычислительные погрешности. Поэтому итерационные методы получили большое применение в решении СЛАУ. Современная вычислительная техника позволяет проводить исследование устойчивости и сходимости итерационного метода в зависимости от параметров задачи.

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

Еще одно достоинство итерационного метода верхних релаксаций состоит в том, что при его реализации на ЭВМ алгоритм вычислений имеет простой вид и позволяет использовать всего один массив для неизвестного вектора.

Я научился решать систем линейных уравнений методом релаксации(ослабления) переменных, и закрепил приобретённые навыки разработкой программы на языке Borland C++ 4.5.


СПИСОК ЛИТЕРАТУРЫ



	Воеводин В.В. «Вычислительные основы линейной алгебры». Москва «Наука», 1977.

	Фаддеев Д.К., Фаддеева В.Н. «Вычислительные методы линейной алгебры». Москва «Физматгиз», 1963.

	Самарский А.А., Гулин А.В.» Численные методы». Москва «Наука», 1989.

	Самарский А.А., Николаев Е.С. «Методы решения сеточных уравнений». Москва «Наука», 1978.

	Самарский А.А. «Введение в численные методы». Москва «Наука», 1987.

	Стренг Г. «Линейная алгебра и ее применение». Москва «Мир», 1980.

	Карманов В.Г. «Математическое программирование». Москва «Наука», 1989.

	Алексеев Е.Р. «Программирование на С++». Москва «НТ Пресс», 2007.

		http://www.exponenta.ru/ - сайт посвящен решению математических задач в прикладных программных пакетах.

		Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы.  М.: Наука, 1987. 600 с. 


ПРИЛОЖЕНИЕ



Листинг программы 

#include<iostream.h>

#include<math.h>

int maximal(int n,double R0[]);

void main(){

int i,j,n,f,k,iter;

double S,det;

cout<<"Введите размерность матрицы(матрица должна быть квадратной)= ";cin>>n;

double *x=new double [n];

double **b=new double *[n];

for(i=0;i<n;i++)

 b[i]=new double[n+1];

double **a=new double *[n];

for(i=0;i<n;i++)

 a[i]=new double[n+1];

cout<<"Введите количество итераций:";

cin>>iter;

cout<<"Введите расширенную матрицу:\n";

for(i=0;i<n;i++){

for(j=0;j<=n;j++)

cin>>b[i][j];

}

cout<<"Подготавливаю матрицу к релаксации...\n";

for(i=0;i<n;i++){

for(j=0;j<n;j++)

a[i][j]=-b[i][j]/b[i][i];

a[i][n]=b[i][n]/b[i][i];

}

for(i=0;i<n;i++){

for(j=0;j<n+1;j++)

cout<<" "<<a[i][j]<<" || ";

cout<<"\n";

}

double *x0=new double [n];

for(i=0;i<n;i++)

x[i]=0.0;

double *R0=new double [n];

cout<<"Введите значения начальных приближений:\n";

for(i=0;i<n;i++)

cin>>x0[i];

S=0.0;

for(i=0;i<n;i++){

for(j=0;j<n;j++)

S=S+a[i][j]*x0[i];

}

for(i=0;i<n;i++){

R0[i]=a[i][n]-x0[i]+S;

cout<<"R("<<i<<")="<<R0[i]<<" | ";

}

f=maximal(n,R0);

det=R0[f];

for(k=0;k<iter;k++){

cout<<"det{"<<k<<"}="<<det<<"\n";

for(i=0;i<n;i++){

if(i!=f) R0[i]=R0[i]+a[i][f]*det;

else R0[i]=R0[i]-det;

}

for(i=0;i<n;i++)

cout<<"R["<<i+1<<"]="<<R0[i]<<" ";

x[f]=x[f]+det;

f=maximal(n,R0);

det=R0[f];

}

cout<<"\n";

for(i=0;i<n;i++)

cout<<"X{"<<i+1<<"}="<<x[i]<<"\n";

delete []x;

delete []R0;

delete []x0;

delete []a;

}

int maximal(int n, double R0[]){

int i,f;

f=0.0;

for(i=0;i<n-1;i++){

if(R0[i+1]>R0[i]) f=i+1;

}

return f;

}