logo search
ООП для Заоч / Пинчук Лозовская Программир на С

Void Minv(double** a, double** b, unsigned n )

{ int i, j, k;

double R;

for (i=0; i<N; i++) for (j=0; j<N; j++) B[i][j]=A[i][j];

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

{ R = 1./B[i][i];

for (j=0; j<N; j++) B[i][j] = B[i][j]*R;

B[i][i] = R;

for (k=0; k<N; k++)

{ if (k!=i)

{ for (j=0; j<N; j++)

if (j!=i) B[k][j]=B[k][j]-B[i][j]*B[k][i];

B[k][i] = -R*B[k][i];

}

}

}

}

Задача розв’язування системи лінійних рівнянь

Надана система лінійних рівнянь:

. (10)

Треба знайти значення x1, x2, ... , xn , які задовольняють системі рівнянь.

Алгоритм

Розглянемо один з класичних методів розв’язання систем лінійних рівнянь - метод Гауса з вибором головного елемента в стовпці. Він заснований на приведенні матриці коефіцієнтів до трикутного виду.

У матричній формі система лінійних рівнянь (10) приймає такий вид:

А*Х=В , (11)

де

, ,.

У методі Гауса використаються наступні фундаментальні властивості лінійних систем:

- перестановка рядків матриці А і відповідних елементів вектору B (тобто перестановка рівнянь у системі (10)) не змінює розв’язку системи;

- додаток до рядка елементів іншого рядка або лінійної комбінації рядків не змінює розв’язку системи.

При чисельному розв’язуванні над системою виконуються перетворення, метою яких є отримання системи з трикутною матрицею А. Після вказаного приведення виконується другий етап алгоритму - зворотній хід. Обчислення виконується по формулі:

.

Реалізація методу Гауса у вигляді функції Gauss наведена нижче. Параметрами функції є: A - матриця системи, B - вектор правих частин, X - вектор-розв’язок системи, N - кількість рівнянь.

// Приклад 6