求高手编写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矩阵的逆矩阵! 具体数值在问题补充里!的主要内容,如果未能解决你的问题,请参考以下文章