#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 255void MatrixMul(a,b,m,n,k,c)  /*实矩阵相乘*/
int m,n,k; /*m:矩阵A的行数, n:矩阵B的行数, k:矩阵B的列数*/
double a[],b[],c[]; /*a为A矩阵, b为B矩阵, c为结果,即c = AB */
{int i,j,l,u;/*逐行逐列计算乘积*/for (i=0; i<=m-1; i++)for (j=0; j<=k-1; j++){u=i*k+j; c[u]=0.0;for (l=0; l<=n-1; l++)c[u]=c[u]+a[i*n+l]*b[l*k+j];}return;
}
int brinv(a,n) /*求矩阵的逆矩阵*/
int n; /*矩阵的阶数*/
double a[]; /*矩阵A*/
{int *is,*js,i,j,k,l,u,v;double d,p;is=malloc(n*sizeof(int));js=malloc(n*sizeof(int));for (k=0; k<=n-1; k++){d=0.0;for (i=k; i<=n-1; i++)/*全选主元,即选取绝对值最大的元素*/for (j=k; j<=n-1; j++){l=i*n+j; p=fabs(a[l]);if (p>d) { d=p; is[k]=i; js[k]=j;}}/*全部为0,此时为奇异矩阵*/if (d+1.0==1.0){free(is); free(js); printf(" >> This is a singular matrix, can't be inversed!\n");return(0);}/*行交换*/if (is[k]!=k)for (j=0; j<=n-1; j++){u=k*n+j; v=is[k]*n+j;p=a[u]; a[u]=a[v]; a[v]=p;}/*列交换*/if (js[k]!=k)for (i=0; i<=n-1; i++){u=i*n+k; v=i*n+js[k];p=a[u]; a[u]=a[v]; a[v]=p;}l=k*n+k;a[l]=1.0/a[l]; /*求主元的倒数*//* a[kj]a[kk] -> a[kj] */for (j=0; j<=n-1; j++)if (j!=k){u=k*n+j; a[u]=a[u]*a[l];}/* a[ij] - a[ik]a[kj] -> a[ij] */for (i=0; i<=n-1; i++)if (i!=k)for (j=0; j<=n-1; j++)if (j!=k){u=i*n+j;a[u]=a[u]-a[i*n+k]*a[k*n+j];}/* -a[ik]a[kk] -> a[ik] */for (i=0; i<=n-1; i++)if (i!=k){u=i*n+k; a[u]=-a[u]*a[l];}}for (k=n-1; k>=0; k--){/*恢复列*/if (js[k]!=k)for (j=0; j<=n-1; j++){u=k*n+j; v=js[k]*n+j;p=a[u]; a[u]=a[v]; a[v]=p;}/*恢复行*/if (is[k]!=k)for (i=0; i<=n-1; i++){u=i*n+k; v=i*n+is[k];p=a[u]; a[u]=a[v]; a[v]=p;}}free(is); free(js);return(1);
}
print_matrix(a,n)/*打印的方阵a的元素*/
int n; /*矩阵的阶数*/
double a[]; /*矩阵a*/
{int i,j;for (i=0; i<n; i++){for (j=0; j<n; j++)printf("%13.7f\t",a[i*n+j]);printf("\n");}
}
main()
{int i,j,n=0;double A[MAX],B[MAX],C[MAX];static double a[4][4]={ {0.2368,0.2471,0.2568,1.2671},{1.1161,0.1254,0.1397,0.1490},{0.1582,1.1675,0.1768,0.1871},{0.1968,0.2071,1.2168,0.2271}};static double b[4][4],c[4][4];clrscr();puts("**********************************************************");puts("*    This program is to inverse a square matrix A(nxn).  *");puts("**********************************************************");while(n<=0){printf(" >> Please input the order n of the matrix (n>0): ");scanf("%d",&n);}printf(" >> Please input the elements of the matrix one by one:\n >> ");for(i=0;i<n*n;i++){scanf("%lf",&A[i]);B[i]=A[i];}for(i=0;i<4;i++)for(j=0;j<4;j++)b[i][j]=a[i][j];i=brinv(A,n);if (i!=0){printf("    Matrix A:\n");print_matrix(B,n);printf("\n");printf("    A's Inverse Matrix A-:\n");print_matrix(A,n);printf("\n");printf("    Product of A and A- :\n");MatrixMul(B,A,n,n,n,C);print_matrix(C,n);}printf("\n Press any key to quit...");getch();
}

115.n阶方阵求逆相关推荐

  1. n阶方程求逆c语言,n阶方阵求逆

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 { j ++; if (j == n) break; } if (j == n) break; gauss (matrix, matrix, k, j, ...

  2. n阶方阵求逆c语言报告,n阶方阵求逆

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 { j ++; if (j == n) break; } if (j == n) break; gauss (matrix, matrix, k, j, ...

  3. matlab矩阵非方阵求逆,python – 从numpy或matlab中的满秩非矩形矩阵中获取可逆方阵...

    假设您具有满秩的NxM矩阵A,其中M> N.如果我们用C_i表示列(尺寸为Nx1),那么我们可以将矩阵写为 A = [C_1, C_2, ..., C_M] 如何获得原始矩阵A的第一个线性独立列 ...

  4. Matlab 小笔纪之求逆和取余

    笔记一: 求逆: 写在前:奇异方阵VS非奇异方阵 若方阵:,为非奇异方阵,满足,反之为奇异方阵. Matlab求逆方式如下:   ,A是mxm方阵,b是mx1列向量 ,针对非奇异方阵求逆 ,可用于一切 ...

  5. MATLAB----矩阵求逆的123!

    方阵求逆 奇异矩阵:行列式为0的矩阵 非奇异矩阵:行列式不为0的矩阵,即可逆矩阵 对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A) 对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A ...

  6. 题目3 求n阶方阵的和(ok)

    给出n阶方阵里所有数         求方阵里所有数的和         输入描述:           输入有多个测试用例           每个测试用例第一个第一个整数n   n<=100 ...

  7. 求一个给定的n阶方阵的鞍点

    一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小.本题要求编写程序,求一个给定的n阶方阵的鞍点. 输入格式: 输入第一行给出一个正整数n(1≤n≤6).随后n行 ...

  8. 求一个n阶方阵对角线元素之和

    求一个n阶方阵对角线元素之和 import java.util.Scanner; public class Lesson4{public static void main(String args[]) ...

  9. 小题目——给出n阶方阵里所有的数,求方阵里所有数的和

    给出n阶方阵里所有的数,求方阵里所有数的和 import java.util.Scanner; //给出n阶方阵里所有的数,求方阵里所有数的和 public class Main {public st ...

最新文章

  1. Hooq 登陆新加坡,“亚洲版 Netflix ”要与对标公司抢夺东南亚视频市场
  2. 数据库之字段数据类型
  3. Python实现图片压缩
  4. The constructor BASE64Decoder() is not accessible due to restriction on required library
  5. 前端 ---JS中的面向对象
  6. 实现文件拖放的一种简洁方法
  7. jenkins 运行 shell脚本报错,Failed to restart tomcat.service: Interactive authentication required
  8. 重识JavaScript 之 数据类型的相互转换
  9. c语言链表的数据结构,c语言实现通用数据结构(一):通用链表
  10. 实战:第十七章:xlsx文件导入数据入库
  11. web前端学习(总结/心得)
  12. html图片自适应屏幕大小
  13. js拆字分图程序 _拆分字帖_使用方法
  14. C语言简单实现世界协调时UTC与北京时间BJT转换
  15. 超兔指纹浏览器(TO12345)是什么?
  16. 将视频转换成一帧帧的图片
  17. Prism学习笔记(四):Commanding
  18. oracle怎么判断逻辑读,如何查看Oracle数据库物理读、逻辑读前10的sql?
  19. 数学故事在小学数学课堂教学中的应用研究
  20. spring security 整合sso全记录

热门文章

  1. pandas数据分析读书笔记(三)
  2. python3:小练习
  3. AXI总线详解完结篇
  4. 安装Microsoft.UI.Xaml.2.6(WSA安卓子系统安装缺失)
  5. 二手交易平台毕业设计,校园二手物品交易平台毕业设计,二手交易网站设计与实现毕业设计分析
  6. 29 WebGL绘制立方体并为立方体每个表面指定颜色
  7. C语言函数大全--f开头的函数(下)
  8. 成都地铁线路图高清大图
  9. vue 微信公众号 使用weixin-java-mp、JSSDK自定义分享
  10. 一文详解IT运维大会精华 网络安全等保2.0时代掌控万物互联