У меня есть программа,которая находит обратную матрицу(используется метод жордано).Как ее дописать, чтобы при умножении исходной матрицы на обратную получилась единичная??!
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <fstream.h>
const N=8;
const M=16; void Massiv(int n,float a[N+1][2*N+1])
{
int i,j;
printf("Њ*ваЁж* A:\n");
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
printf("%4.0f",a[i][j]," ");
printf("\n");
}
}
void Read(float mas[N+1][2*N+1],int &count)
{
char name[10];
printf("\n‚ўҐ¤ЁвҐ Ё¬п д*©«*:\n");
scanf("%s",&name);
ifstream file(name);
file>>count;
for(int i=1; i<=count; i++)
for (int j=1;j<=count; j++)
file>>mas[i][j];
file.close();
for(i=1;i<=count;i++)
{
for(int j=count+1;j<=2*count;j++)
{
if (i==j-count)
mas[i][j]=1;
if (i!=j-count)
mas[i][j]=0;
}
}
}
void Jordan(float a[N+1][2*N+1],int n)
{
float s;
float t[N+1][N+1];
int i,j,k;
for (k=1;k<=n;k++)
{
for (i=1;i<=k-1;i++)
{
t[i][k]=a[i][k]/a[k][k];
a[i][k]=0;
for (j=k+1;j<=2*N;j++)
a[i][j]=a[i][j]-t[i][k]*a[k][j];
}
for (i=k+1;i<=n;i++)
{
t[i][k]=a[i][k]/a[k][k];
a[i][k]=0;
for (j=k+1;j<=2*N;j++)
a[i][j]=a[i][j]-t[i][k]*a[k][j];
}
}
for (i=1;i<=n;i++)
for (j=1;j<=2*n;j++)
a[i][j]=a[i][j]/a[i][i];
printf("ЋЎа*в**п ¬*ваЁж*:\n");
for (i=1;i<=n;i++)
{
for (j=n+1;j<=2*n;j++)
printf("%4.0f",a[i][j]," ");
printf("\n");
}
}
void main()
{
float a[N+1][2*N+1];
int n,k;
float s=0;
clrscr();
Read(a,n);
Massiv(n,a);
Jordan(a,n);
getch();
return;
}
Файл содержит:
8
1 1 1 1 1 1 1 1
1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 1
1 1 1 2 1 1 1 1
1 1 1 1 2 1 1 1
1 1 1 1 1 2 1 1
1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 2
10
9
9
9
9
9
9
9