
编一个程序分别求出图中A , B 矩阵的逆矩阵
#include
using namespace std;
#define TYPE int
#define NUM 唯宽拦3
TYPE matrix1[NUM][NUM], matrix2[NUM][NUM];
void Fun()
{
int i,j;
for(i = 0; i < NUM; i ++)
{
for(j = 0; j <= NUM; j++)
{
matrix2[j][i] = matrix1[i][j];
}
}
}
void Init()
{
int i,j;
for(i = 0; i < NUM; i ++)
{
for(j = 0; j < NUM; j++)
{
cout <指胡<巧纯 "请输入第" << i + 1 << "行,第" < cin >> matrix1[i][j]; } } } void Output(int matrix[][NUM]) { int i,j; for(i = 0; i < NUM; i ++) { for(j = 0; j < NUM; j++) { cout << matrix[i][j] << " "; } cout << endl; } } void main() { //求3*3矩阵的逆矩阵 Init(); cout << "matrix1为:" << endl; Output(matrix1); Fun(); cout << "matrix2为:" << endl; Output(matrix2); }
不多说了。楼主要求的是矩阵的逆矩阵,不是转置矩阵。
思路如败改下:
对于矩阵A
先求|A|
再求A*
最后根据A^(-1)=(1/|A|)×A* 即可得出。
DevC++编译测试通过,且正确结果如下;
原来矩阵如下:贺慧
1 0 1
2 1 0
-3 2 -5
|A|= 2.00
|A*|矩阵如下:
-5.00 2.00 -1.00
10.00 -2.00 2.00
7.00 -2.00 1.00
|A^-1|矩阵如下:
-2.50 1.00 -0.50
5.00 -1.00 1.00
3.50 -1.00 0.50
请按任意键继续. . .
正确的代码如下;
#include "stdio.h"
#include "stdlib.h"
void printArrayDouble3(double a[][3],int m,int n)
{
for(int i=0;i
for(int j=0;j
printf("%6.2lf"禅枯答,a[i][j]);
}
printf("\n");
}
printf("\n");
}
void printArray3(int a[][3],int m,int n)
{
for(int i=0;i
for(int j=0;j
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n");
}
void printArray2(int a[][2],int m,int n)
{
for(int i=0;i
for(int j=0;j
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n");
}
double towFac(int b[][2])
{
return b[0][0]*b[1][1]-b[0][1]*b[1][0];
}
void copy3To2(int a[][3],int b[][2],int i,int j)
{
int m=0,n=0;
int count=0;
for(m=0;m<3;m++)
{
for(n=0;n<3;n++)
{
if(m!=i&&n!=j)
{
count++;
b[(count-1)/2][(count-1)%2]=a[m][n];
}
}
}
}
double threeSum(int a[][3],int b[][2])
{
double sum=0;
for(int i=0;i<3;i++)
{
copy3To2(a,b,0,i);
if(i%2==0)
{
sum+=a[0][i]*towFac(b);
}
else
{
sum-=a[0][i]*towFac(b);
}
}
return sum;
}
void calCArray(int a[][3],int b[][2],double c[][3])
{
int i=0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
copy3To2(a,b,i,j);
if((i+j)%2==0)
{
c[j][i]= towFac(b);
}
else
{
c[j][i]=-towFac(b);
}
}
}
printf("\n|A*|矩阵如下:\n");
printArrayDouble3(c,3,3);
}
void niArray(double c[][3],double A)
{
int i=0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
c[i][j]/=A;
}
}
printf("\n|A^-1|矩阵如下:\n");
printArrayDouble3(c,3,3);
}
main()
{
int i,n=0;
long sum=0;
int a[3][3]=
{
{1,0,1},
{2,1,0},
{-3,2,-5}
};
printf("原来矩阵如下:\n");
printArray3(a,3,3);
int b[2][2];
double c[3][3];
double t=threeSum(a,b);//求|A|
printf("|A|=%6.2lf\n",t);
calCArray(a,b,c);//求A*
niArray(c,t);//求逆矩阵
system("pause");
}
楼主你吧代码中的矩阵换成你图中的A和B就可以了。好运!
【PS:Negamax原创:2012-04-22 21:16,转载请说明!】
不是很懂你这道题的意思 你可以将它说得更明白些吗?
我也没看懂你的意思 这种题目C语言参考书 上都会有的,多看看课外的相关书籍