#3 29.09.09 01:40
Re: Обратная матрица
Вот тебе из какой то моей лабы, если подумаешь сможешь применить
Код::
// Функция Faddeev() для обратной матрицы по методу Фаддеева.
bool Faddeev( double** R, double** A, int n )
{ int i, j, k, m;
double** B = new double* [n];
for( i = 0; i < n; i++)
B[i] = new double[n];
for( i = 0; i < n; i++ )
{
for( j = 0; j < n; j++ )
B[i][j] = 0.0;
B[i][i] = 1.0;
}
double** U = new double* [n];
for( i = 0; i < n; i++)
U[i] = new double[n];
double p, s;
for( k = 1; k <= n; k++ ) // общий цикл вычислений
{
for( i = 0; i < n; i++ ) // U = A * B
for( j = 0; j < n; j++ )
{
s = 0.0;
for( m = 0; m < n; m++ ) s += A[i][m] * B[m][j];
U[i][j] = s;
}
s = 0;
for( i = 0; i < n; i++ )
s += U[i][i]; // след матрицы U
p = s / k; // характеристический коэффициент
if( k == n ) break; // на последней итерации не вычислять
for( i = 0; i < n; i++ ) // B = U - pE
for( j = 0; j < n; j++ )
i != j ? B[i][j] = U[i][j] : B[i][j] = U[i][j]-p;
}
bool z = true;// предположим, что обратная матрица существует
if( p == 0.0 ) z = false; // обратная матрица не существует
for( i = 0; i < n; i++ ) // обратная матрица
for( j = 0; j < n; j++ ) R[i][j] = B[i][j] / p;
for( i = 0; i < n; i++ ) delete [] U[i]; // удалить строки U
delete [] U; // удалить указатели строк матрицы U
for( i = 0; i < n; i++ ) delete [] B[i]; // удалить строки B
delete [] B; // удалить указатели строк матрицы B
return z;
}Offline

