Другие языки программирования и технологии
программа в паскале, составить обратную матрицу
Задача: дана матрица 5*5. элементы задаются случайным образом и являются целыми числами. построить обратную матрциу.я понимаю что нужно сначала найти произведение обычной матрицы на транспонированную и разделить на определитель, с определителем смогу разобраться, а вот с транспонированной-никак... помогите плиииз
Транспонированная матрица-это когда строки менются местами со столбцами:
for i:=1 to n do
for j:=1 to n do
matrix1[j]:=matrix2[j];
на паскале как-то так наверное
на С++ вот так
//Функция вычисления алгебраического дополнения
//элемента a[i,j] квадратной матрицы A размерностью n*n
double alg_add(matrix A, int n, int i, int j)
{
matrix A1;
double M;
int k,h;
for (k = 0; k < i; k++){
for (h = 0; h < j; h++)
A1[k][h] = A[k][h];
for (h = j+1; h < n; h++)
A1[k][h-1] = A[k][h];
}
for (k = i+1; k < n; k++){
for (h = 0; h < j; h++)
A1[k-1][h] = A[k][h];
for (h = j+1; h < n; h++)
A1[k-1][h-1] = A[k][h];
}
M = det(A1,n-1);
if ((i+j)%2 != 0) M = -M;
return M;
}
//---------------------------------------------------------------------------
//Функция вычисления определителя матрицы A размерностью n*n
double det(matrix A, int n)
{
double d;
if (n != 1){
d = 0;
for (int j = 0; j < n; j++)
d += A[0][j] * alg_add(A,n,0,j);
}
else d = A[0][0];
return d;
}
//---------------------------------------------------------------------------
//Функция вычисления матрицы, обратной матрице A размерностью n*n
void inv_matr(matrix A, matrix B, int n)
{
double d = det(A,n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
B[j] = alg_add(A,n,j,i)/d;
}
//---------------------------------------------------------------------------
//Функция транспонирования матрицы A размерностью n*m
void trans_matr(matrix A, matrix B, int n, int m)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
B[j] = A[j];
}
for i:=1 to n do
for j:=1 to n do
matrix1[j]:=matrix2[j];
на паскале как-то так наверное
на С++ вот так
//Функция вычисления алгебраического дополнения
//элемента a[i,j] квадратной матрицы A размерностью n*n
double alg_add(matrix A, int n, int i, int j)
{
matrix A1;
double M;
int k,h;
for (k = 0; k < i; k++){
for (h = 0; h < j; h++)
A1[k][h] = A[k][h];
for (h = j+1; h < n; h++)
A1[k][h-1] = A[k][h];
}
for (k = i+1; k < n; k++){
for (h = 0; h < j; h++)
A1[k-1][h] = A[k][h];
for (h = j+1; h < n; h++)
A1[k-1][h-1] = A[k][h];
}
M = det(A1,n-1);
if ((i+j)%2 != 0) M = -M;
return M;
}
//---------------------------------------------------------------------------
//Функция вычисления определителя матрицы A размерностью n*n
double det(matrix A, int n)
{
double d;
if (n != 1){
d = 0;
for (int j = 0; j < n; j++)
d += A[0][j] * alg_add(A,n,0,j);
}
else d = A[0][0];
return d;
}
//---------------------------------------------------------------------------
//Функция вычисления матрицы, обратной матрице A размерностью n*n
void inv_matr(matrix A, matrix B, int n)
{
double d = det(A,n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
B[j] = alg_add(A,n,j,i)/d;
}
//---------------------------------------------------------------------------
//Функция транспонирования матрицы A размерностью n*m
void trans_matr(matrix A, matrix B, int n, int m)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
B[j] = A[j];
}
Похожие вопросы
- программа в Паскале. осуществить поворот матрицы против часовой стрелки на 90 градусов
- Написать программу в Паскале для построения графика функций. К программе желательно составить алгоритм.
- Помогите составить программу на паскале!
- найти все семизначные числа, которые делятся на 15 и записываются только цифрами 0 и 1. Составить программу на паскале
- помогите пожалуйста составить программу в паскале
- Составить программу в паскаль
- Пожалуйста, будтье так добры, помочь решить задчаку в Паскале: Составьте программу, печатающую последнее слово в ...
- Помогите пожалуйста составить программу на Паскале, используя оператор case
- Программа на паскале! Помогите(бесплатно)
- помогите составить программу в паскаль, плиз