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

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Jump to navigation Jump to search

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

Խնդրի դրվածքը[խմբագրել | խմբագրել կոդը]

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

, где

կամ

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

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

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

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

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

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

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

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

Զուգամիտության պայման[խմբագրել | խմբագրել կոդը]

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

Logo arte.jpg Թեորեմ.
Դիցուկ ։ Այդ դեպքում ցանկացած սկզբնական մոտարկման ընտրության դեպքում՝
  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;
}

Տես նաև[խմբագրել | խմբագրել կոդը]

Ծանոթագրություններ[խմբագրել | խմբագրել կոդը]