Յակոբիի մեթոդ

Գծային հանրահաշվում հավասարումների համակարգերի լուծման պարզ իտերացիայի տարատեսակներից

Յակոբիի մեթոդը գծային հանրահաշվում հավասարումների համակարգերի լուծման պարզ իտերացիայի տարատեսակներից է։ Այն անվանվել է ի պատիվ Կարլ Գուստավ Յակոբիի[1]։

Խնդրի դրվածքը խմբագրել

Վերցնենք գծային հավասարումների համակարգը.

 , где  

կամ

 

Մեթոդի նկարագրությունը խմբագրել

Որպեսզի կառուցենք Յակոբիի մեթոդի իտերատիվ ընթացակարգը, անհրաժեշտ է իրականացնել   հավասարումների համակարգի նախնական ձևափոխում   իտերացիոն տեսքին։ Այն կարող է կատարվել հետևյալ կանոններից որևէ մեկի համաձայն՝

  •  
     
     

որտեղ ըստ ընդունված նշանակումների  -ն մատրից է, որի գլխավոր անկյունագծի վրա գտնվում են   մատրիցի համապատասխան էլեմենտները, իսկ մնացած բոլոր էլեմենտները զրոներ են, այնինչ   և   մատրիցները պարունակում են   մատրիցի վերևի և ներքևի եռանկյունային մասերը, որոնց գլխավոր անկյունագծի վրա զրոներ են, իսկ  միավոր մատրից է։

Այդ դեպքում լուծման գտնելու ընթացակարգը ունիայսպիսի տեսք՝

 

կամ ըստ էլեմենտային բանաձևի տեսքով՝

 

որտեղ  -ն իտերացիայի հաշվիչն է։

Ի տարբերություն Զեյդելի մեթոդի մենք չենք կարող փոխարինել   -ի իտերացիայի գործընթացի ընթացքում, քանի որ այդ արժեքները անհրաժեշտ են մյուս հաշվարկների համար։

Սա ամենաէական տարբերությունն է գծային հանրահաշվական հավասարումների համակարգի լուծման Յակոբիի և Գաուս-Զեյդել մեթոդների միջև։ Այսպիսով, յուրաքանչյուր իտերացիայի ժամանակ անհրաժեշտություն է առաջանում մոտարկումների երկու վեկտորները՝ հին և նոր, պահպանել։

Զուգամիտության պայման խմբագրել

Բերենք զուգամիտության մեթոդի բավարար պայման։

  Թեորեմ.
Դիցուկ  ։ Այդ դեպքում ցանկացած   սկզբնական մոտարկման ընտրության դեպքում՝
  1. Գաուս-Զեյդելի մեթոդը զուգամիտում է,
  2. մեթոդի զուգամիտության արագությունը հավասար է երկրաչափական պրոգրեսիայի զուգամիտության արագությանը   հայտարարով,
  3. ճիշտ է   գնահատման սխալը։

Դադարեցման պայմանը խմբագրել

Իտերացիոն գործընթացի ավարտի պայմանը անհրաժեշտ   ճշգրտության դեպքում ունի այսպիսի տեսք՝

 ։

  (երբ  ) մատրիցի համար առավել լավ այն կատարվում է, երբ

 ։

Այս չափանիշը չի պահանջում մատրիցի նորմայի հաշվարկ և գործնականում հաճախ է օգտագործվում։ Այդ դեպքում կրկնվող գործընթացի ավարտի ճշգրիտ պայմանը ունի այսպիսի տեսք՝

 

և պահանջում է լրացուցիչ բազմապատկում մատրիցն վեկտորին յուրաքանչյուր իտերացիայում, որը մոտավորապես երկու անգամ մեծացնում է ալգորիթմի հաշվարկային բարդությունը։

Ալգորիթմ խմբագրել

Ներքևում բերենք ալգորիթմի իրականացումը С++ -ում։

#include <math.h>
const double eps = 0.001; ///< ցանկալի ճշտությունը

..........................

/// N - մատրիցի չափը; A[N][N] - գործակիցների մատրիցն, F[N] - ազատ անդամների սյունը,
/// X[N] - սկզբնական մոտարկումը, պատասխանը նույնպես գրվում է X[N]-ում;
void Jacobi (int N, double** A, double* F, double* X)
{
	double* TempX = new double[N];
	double norm; // նորման, որոշված որպես ամենամեծ տարբերությունը հարևան իտերացիաների սյուների միջև

	do {
		for (int i = 0; i < N; i++) {
			TempX[i] = F[i];
			for (int g = 0; g < N; g++) {
				if (i != g)
					TempX[i] -= A[i][g] * X[g];
			}
			TempX[i] /= A[i][i];
		}
        norm = fabs(X[0] - TempX[0]);
		for (int h = 0; h < N; h++) {
			if (fabs(X[h] - TempX[h]) > norm)
				norm = fabs(X[h] - TempX[h]);
			X[h] = TempX[h];
		}
	} while (norm > eps);
	delete[] TempX;
}

Տես նաև խմբագրել

Ծանոթագրություններ խմբագրել