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

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

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

, где 

կամ

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

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

Այդ դեպքում լուծման գտնելու ընթացակարգը ունիայսպիսի տեսք՝
 
կամ ըստ էլեմենտային բանաձևի տեսքով՝
 
որտեղ -ն իտերացիայի հաշվիչն է։

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

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

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

Դադարեցման պայմանը 
Իտերացիոն գործընթացի ավարտի պայմանը անհրաժեշտ   ճշգրտության դեպքում ունի այսպիսի տեսք՝
 ։
 (երբ ) մատրիցի համար առավել լավ այն կատարվում է, երբ
 ։
Այս չափանիշը չի պահանջում մատրիցի նորմայի հաշվարկ և գործնականում հաճախ է օգտագործվում։ Այդ դեպքում կրկնվող գործընթացի ավարտի ճշգրիտ պայմանը ունի այսպիսի տեսք՝
 
և պահանջում է լրացուցիչ բազմապատկում մատրիցն վեկտորին յուրաքանչյուր իտերացիայում, որը մոտավորապես երկու անգամ մեծացնում է ալգորիթմի հաշվարկային բարդությունը։

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

#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;
}

Տես նաև 
 Գաուս-Զեյդելի մեթոդ

Ծանոթագրություններ 

Մաթեմատիկա
Թվային մեթոդներ
Գծային հանրահաշիվ
Գիտություն