矩阵求逆

有小数版


#include<stdio.h>
const int N=110;
double mat[N][N*2];
double a[N][N],b[N][N],c[N][N];
int n;void mul(int k,double x){for(int i=1;i<=n*2;i++){mat[k][i]*=x;}
}void add(int k,int u,double x){for(int i=1;i<=n*2;i++){mat[k][i]+=mat[u][i]*x;}
}double calc(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){for(int u=1;u<=n;u++){c[i][j]+=a[i][u]*b[u][j];}}}
}int main(){scanf("%d",&n);for(int i=1;i<=n;i++){mat[i][n+i]=1; for(int j=1;j<=n;j++){scanf("%lf",&a[i][j]);mat[i][j]=a[i][j];}} //	for(int i=1;i<=n;i++){
//		for(int j=1;j<=n*2;j++){
//			printf("%lf ",mat[i][j]);
//		}
//		putchar('\n');
//	} for(int i=1;i<=n;i++){mul(i,1/mat[i][i]);for(int j=i+1;j<=n;j++){add(j,i,-mat[j][i]);}}for(int i=n;i>1;i--){for(int j=i-1;j>=1;j--){add(j,i,-mat[j][i]);}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){b[i][j]=mat[i][j+n];}}for(int i=1;i<=n;i++){for(int j=1;j<=n*2;j++){printf("%lf ",mat[i][j]);}putchar('\n');} calc();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%lf ",c[i][j]);}putchar('\n');} return 0;
}

无小数版


#include<stdio.h>
const int N=110,MOD=1e9+7;
typedef long long LL; 
LL mat[N][N*2];
LL a[N][N],b[N][N],c[N][N];
int n;LL qmi(LL x,LL y){LL res=1;while(y){if(y&1) res=res*x%MOD;x=x*x%MOD;y>>=1;}return res;
}void mul(int k,LL x){for(int i=1;i<=n*2;i++){mat[k][i]=(mat[k][i]*x%MOD+MOD)%MOD;}
}void add(int k,int u,LL x){for(int i=1;i<=n*2;i++){mat[k][i]=((mat[k][i]+mat[u][i]*x)%MOD+MOD)%MOD;}
}void calc(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){for(int u=1;u<=n;u++){c[i][j]=((c[i][j]+a[i][u]*b[u][j])%MOD+MOD)%MOD;}}}
}int main(){scanf("%d",&n);for(int i=1;i<=n;i++){mat[i][n+i]=1; for(int j=1;j<=n;j++){scanf("%lld",&a[i][j]);mat[i][j]=a[i][j];}} for(int i=1;i<=n;i++){for(int j=1;j<=n*2;j++){printf("%lld ",mat[i][j]);}putchar('\n');} for(int i=1;i<=n;i++){mul(i,qmi(mat[i][i],MOD-2));for(int j=i+1;j<=n;j++){add(j,i,-mat[j][i]);}}for(int i=1;i<=n;i++){for(int j=1;j<=n*2;j++){printf("%lld ",mat[i][j]);}putchar('\n');} for(int i=n;i>1;i--){for(int j=i-1;j>=1;j--){add(j,i,-mat[j][i]);}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){b[i][j]=mat[i][j+n];}}for(int i=1;i<=n;i++){for(int j=1;j<=n*2;j++){printf("%lld ",mat[i][j]);}putchar('\n');} calc();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%lld ",c[i][j]);}putchar('\n');} return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/829117.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lab2

lab 2: Memory Manage(working) 新的环境好像不支持arm架构了,总是会在make build触发错误 exec chbuild not found. 我们于是只能使用utm平台+qemu模拟amd64架构的ubuntu系统来进行运行。 首先我们还是先进行make build来获得我们想要的环境。 1 Buddy System练习题1: 完成 k…

开源 - Ideal库 - 常用时间转换扩展方法(二)

分享时间转换的扩展方法,包括TimeOnly、DateOnly与DateTime间的转换,并介绍代码结构设计与组织、单元测试、文档的重要性,以partial类、功能分类优化代码结构,后续将上传至Nuget。书接上回,我们继续来分享一些关于时间转换的常用扩展方法。01、时间转日期时间 TimeOnly 该…

杂题部分

杂题部分3131. 找出与数组相加的整数 I思路 快排+直接找差值。 void quickSort(int *arr,int low,int high) {if(high<=low) return;int i=low;int j=high;int pivot=arr[low];while(1){// 1. 自左到右搜索,直到比pivot大后停止。while(arr[i]<=pivot){i++;if(i==high) …

20222312 2024-2025-2 《网络与系统攻防技术》实验四报告

一、恶意代码文件类型标识、脱壳与字符串提取对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者 (1).通过kali中的file命令查看文件格式和可运行平台,即exe文件,Win32平台 通过PEID查壳文件发现使用UPX壳二、使用IDA Pro静态或…

点阵LED电路分析

以点阵的左上角LED为例,即 A1 LED为例,进行电路分析 9号脚接着LED的阳极,所以9号脚需是高电平,13号脚连着LED的阴极,所以13号脚需是低电平 9号脚连接着Q10的集电极,欲使9号脚为高电平,则需要Q10导通 Q10的发射极连接着+5V电压,欲使Q10导通,则基极需为低电平,即LEDC0为…

苹果手机和电脑数据互传

利用共享的文件夹 这个方法简单来说就是iPhone通过远程连接到Windows服务器,利用共享的文件夹来进行照片中转。 注意:iPhone和Windows必须要连接到同一个局域网内! ● Windows设置 第一步,获取Windows电脑的IP地址。 具体操作是先打开“Windows设置-网络和Internet-网络和共…

由一个业务需求引发的对 ASP.NET 全局变量的调研及结果

在单机模式下,使用哪种技术来存储身份状态信息比较安全可靠呢?前言 前段时间使用 ASP.NET MVC + Form Auth 做了一个单机小项目,当时对于采用什么方式来存储登录状态有些纠结,通常的做法是使用 Cookie 或者 Session,但是我想有没有更好的方式来存储登录状态呢?于是花了点…

苹果手机数据传输

利用共享的文件夹 这个方法简单来说就是iPhone通过远程连接到Windows服务器,利用共享的文件夹来进行照片中转。 注意:iPhone和Windows必须要连接到同一个局域网内! ● Windows设置 第一步,获取Windows电脑的IP地址。 具体操作是先打开“Windows设置-网络和Internet-网络和共…

c语言中返回整数值的长度

001、方法1 while循环[root@PC1 test]# ls test.c [root@PC1 test]# cat test.c ## 测试c程序 #include <stdio.h>int get_length(int a) {int length = 0;while(a > 0){length++;a /= 10;}return length; }int main(void) {int a;printf("a = "…

Blender 常用建模操作

常用简单介绍 挤出 快捷键:E 挤出是2个动作,生成加移动,所以右键撤销只能撤销移动内插 快捷键:I 内插仅是一个动作倒角 快捷键:Ctrl+B 滚动滚轮可以增加倒角的段数环切 快捷键:Ctrl+R 滚动滚轮可以增加倒角的段数挤出详细介绍 沿轴线挤出或者自动挤出挤出流形可以向内挤出…

Stack模块的设置

TEAM: Topological Evolution-aware Framework for Traffic Forecasting–Extended Version Motivation 为了捕捉复杂的时空动态,许多基于深度学习的方法最近被提出,并由于其学习非线性动力学[35,59]的能力,在挑战数据集上显示出了有希望的结果。这些方法通常建立在图神经网…