typedef struct matrix
{
double mat[N][N];
uint A, B;
} matrix;
matrix minor( matrix M, uint q, uint p )
{
uint i, j;
uint l;
double *stolb, *stroka;
if( /*(M.A != M.B) ||*/ (M.A <= 2) || (M.B <= 2) )
throw error("невозможно посчитать минор");
stolb = (double*)malloc(sizeof(double) * M.A);
stroka = (double*)malloc(sizeof(double) * M.B);
for( j = 0; j < M.A; j++ )
stolb[j] = 0;
for( i = 0; i < M.B; i++ )
stroka = 0;
if( NUM == 1 )
{
q--;
p--;
}
for( i = q; i < M.A-1; i++ )
for( j = 0; j < M.B; j++ )
M.mat[j] = M.mat[i+1][j];
for( j = p; j < M.B-1; j++ )
for( i = 0; i < M.A; i++ )
M.mat[j] = M.mat[j+1];
free(stolb);
free(stroka);
M.A--;
M.B--;
return M;
}
double det( matrix M )
{
uint i;
double s;
if( M.A != M.B )
{
M.err = 1;
throw error("Матрица не квадратная. Невозможно вычислить det");
return 0;
}
if( (M.A == 1) || (M.B == 1) )
{
M.err = 1;
throw error("Неправильная размерность матрицы");
return 0;
}
if( (M.A == 2) && (M.B == 2) )
return (M.mat[0][0]*M.mat[1][1] - M.mat[1][0]*M.mat[0][1]);
s = 0;
for( i = 0; i < M.B; i++ )
s += pow(-1, i) * M.mat[0] * det(minor(M, 0, i));
return s;
}
matrix transp( matrix M )
{
matrix A;
uint i, j;
A.A = M.B;
A.B = M.A;
for( i = 0; i < M.A; i++ )
for( j = 0; j < M.B; j++ )
A.mat[j] = M.mat[j];
return A;
}
matrix obr( matrix M )
{
matrix A;
uint i, j;
double D;
D = det(M);
if( D == 0 )
{
A.err = 1;
throw error("det = 0, построение обратной матрицы невозможно");
return A;
}
A.err = 0;
A.A = M.A;
A.B = M.B;
for( i = 0; i < A.A; i++ )
for( j = 0; j < A.B; j++ )
A.mat[j] = pow(-1, i+j) * det(minor(M, i, j));
A = transp(A);
for( i = 0; i < A.A; i++ )
for( j = 0; j < A.B; j++ )
A.mat[j] /= D;
return A;
}
matrix mult( matrix A, matrix B )
{
matrix C;
uint i, j, v;
C.err = 0;
if( A.B != B.A )
{
C.err = 1;
throw error("Умножение невозможно. Количество строк в первой не равно количеству столбцов во второй.");
return C;
}
C.A = A.A;
C.B = B.B;
C = init(C);
for( i = 0; i < A.A; i++ )
for( j = 0; j < B.B; j++ )
for( v = 0; v < A.B; v++ )
C.mat[j] += A.mat[v] * B.mat[v][j];
return C;
}
Матричный метод решения систем линейных уравнений
метематическая теория
http://www.toehelp.ru/theory/math/lecture14/lecture14.html
Задачка типичная. Может у кого есть код.Желательно на Паскале или С++, или Delphi
скиньте на [email]raksha_@bigmir.net[/email]
Спасибо
мой класс для работы с матрицами