求高手编写C语言求3*3矩阵的逆矩阵! 具体数值在问题补充里!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求高手编写C语言求3*3矩阵的逆矩阵! 具体数值在问题补充里!相关的知识,希望对你有一定的参考价值。

编一个程序分别求出图中A , B 矩阵的逆矩阵

#include <iostream>

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 << "行,第" <<j + 1<< "列的元素" << endl;

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*
最后根据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<m;i++)

for(int j=0;j<n;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<m;i++)

for(int j=0;j<n;j++)

printf("%4d",a[i][j]);

printf("\n");

printf("\n");


void printArray2(int a[][2],int m,int n)

for(int i=0;i<m;i++)

for(int j=0;j<n;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,转载请说明!】本回答被提问者和网友采纳
参考技术B 不是很懂你这道题的意思 你可以将它说得更明白些吗?追问

就是编一个C语言程序分别求A,B矩阵的逆矩阵

参考技术C 我也没看懂你的意思 这种题目C语言参考书 上都会有的,多看看课外的相关书籍

以上是关于求高手编写C语言求3*3矩阵的逆矩阵! 具体数值在问题补充里!的主要内容,如果未能解决你的问题,请参考以下文章

numpy求两个矩阵中不同元素的个数

c语言编写程序,对5x5矩阵的下半三角形各元素中的值乘以2,要求数组a的每行每列元素值由随机函数

怎么利用矩阵MATLAB计算?

matlab求AX=B

matlab中用左除和逆矩阵法 求方程 为啥答案不一样?

初等矩阵的行列式怎么求?