115.n阶方阵求逆
#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阶方阵求逆相关推荐
- n阶方程求逆c语言,n阶方阵求逆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 { j ++; if (j == n) break; } if (j == n) break; gauss (matrix, matrix, k, j, ...
- n阶方阵求逆c语言报告,n阶方阵求逆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 { j ++; if (j == n) break; } if (j == n) break; gauss (matrix, matrix, k, j, ...
- matlab矩阵非方阵求逆,python – 从numpy或matlab中的满秩非矩形矩阵中获取可逆方阵...
假设您具有满秩的NxM矩阵A,其中M> N.如果我们用C_i表示列(尺寸为Nx1),那么我们可以将矩阵写为 A = [C_1, C_2, ..., C_M] 如何获得原始矩阵A的第一个线性独立列 ...
- Matlab 小笔纪之求逆和取余
笔记一: 求逆: 写在前:奇异方阵VS非奇异方阵 若方阵:,为非奇异方阵,满足,反之为奇异方阵. Matlab求逆方式如下: ,A是mxm方阵,b是mx1列向量 ,针对非奇异方阵求逆 ,可用于一切 ...
- MATLAB----矩阵求逆的123!
方阵求逆 奇异矩阵:行列式为0的矩阵 非奇异矩阵:行列式不为0的矩阵,即可逆矩阵 对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A) 对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A ...
- 题目3 求n阶方阵的和(ok)
给出n阶方阵里所有数 求方阵里所有数的和 输入描述: 输入有多个测试用例 每个测试用例第一个第一个整数n n<=100 ...
- 求一个给定的n阶方阵的鞍点
一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小.本题要求编写程序,求一个给定的n阶方阵的鞍点. 输入格式: 输入第一行给出一个正整数n(1≤n≤6).随后n行 ...
- 求一个n阶方阵对角线元素之和
求一个n阶方阵对角线元素之和 import java.util.Scanner; public class Lesson4{public static void main(String args[]) ...
- 小题目——给出n阶方阵里所有的数,求方阵里所有数的和
给出n阶方阵里所有的数,求方阵里所有数的和 import java.util.Scanner; //给出n阶方阵里所有的数,求方阵里所有数的和 public class Main {public st ...
最新文章
- Hooq 登陆新加坡,“亚洲版 Netflix ”要与对标公司抢夺东南亚视频市场
- 数据库之字段数据类型
- Python实现图片压缩
- The constructor BASE64Decoder() is not accessible due to restriction on required library
- 前端 ---JS中的面向对象
- 实现文件拖放的一种简洁方法
- jenkins 运行 shell脚本报错,Failed to restart tomcat.service: Interactive authentication required
- 重识JavaScript 之 数据类型的相互转换
- c语言链表的数据结构,c语言实现通用数据结构(一):通用链表
- 实战:第十七章:xlsx文件导入数据入库
- web前端学习(总结/心得)
- html图片自适应屏幕大小
- js拆字分图程序 _拆分字帖_使用方法
- C语言简单实现世界协调时UTC与北京时间BJT转换
- 超兔指纹浏览器(TO12345)是什么?
- 将视频转换成一帧帧的图片
- Prism学习笔记(四):Commanding
- oracle怎么判断逻辑读,如何查看Oracle数据库物理读、逻辑读前10的sql?
- 数学故事在小学数学课堂教学中的应用研究
- spring security 整合sso全记录