-
2022-01-06 09:48:37
#include<stdio.h> main() { int i,j; int a[3][5]; int b[3][5]; int c[3][5]; printf("请输入矩阵a:\n"); for(i=0;i<3;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); printf("请输入矩阵b:\n"); for(i=0;i<3;i++) for(j=0;j<5;j++) scanf("%d",&b[i][j]); printf("输出结果\n"); for(i=0;i<3;i++) { for(j=0;j<5;j++) printf("%d ",a[i][j]); printf("\n"); } printf("+"); printf("\n"); for(i=0;i<3;i++) { for(j=0;j<5;j++) printf("%d ",b[i][j]); printf("\n"); } printf("="); printf("\n"); for(i=0;i<3;i++) for(j=0;j<5;j++) c[i][j]=a[i][j]+b[i][j]; for(i=0;i<3;i++) { for(j=0;j<5;j++) printf("%d ",c[i][j]); printf("\n"); } }
更多相关内容 -
矩阵相加
2019-11-13 22:26:40矩阵相加的前提是相加的两个矩阵行数与列数必须相等,而相加后的行数与列数也相同。形式如:Amn+Bmn=Cmn。 代码实现: public static void matrix_add(int[][] arrA,int[][] arrB,int[][] arrC,int dimX,int dimY)...- 矩阵相加的前提是相加的两个矩阵行数与列数必须相等,而相加后的行数与列数也相同。形式如:Amn+Bmn=Cmn。
代码实现:
public static void matrix_add(int[][] arrA,int[][] arrB,int[][] arrC,int dimX,int dimY){ int row,col; if(dimX<0 || dimY<0){ System.out.println("矩阵维数必须大于0!"); } for(row=1;row<=dimX;row++){ for(col=1;col<=dimY;col++){ arrC[(row-1)][(col-1)] = arrA[(row-1)][(col-1)]+arrB[(row-1)][(col-1)]; } } }
测试类:
public static void main(String[] args) { int i; int j; final int ROWS = 3; final int COLS = 3; int[][] A = {{1, 3, 5},{7,9,11},{13,15,17}}; int[][] B = {{9,8,7},{6,5,4},{3,2,1}}; int[][] C = new int[ROWS][COLS]; System.out.println("[矩阵A的各个元素]"); for(i=0;i<3;i++){ for(j=0;j<3;j++){ System.out.print(A[i][j]+"\t"); } System.out.println(); } System.out.println("[矩阵B中的各个元素]"); for(i=0;i<3;i++) { for (j = 0; j < 3; j++) { System.out.print(B[i][j] + "\t"); } System.out.println(); } matrix_add(A,B,C,3,3); System.out.println("[显示矩阵A和矩阵B相加的结果]"); for(i=0;i<3;i++){ for(j=0;j<3;j++){ System.out.print(C[i][j]+"\t"); } System.out.println(); } }
运行结果:
-
C++ 中重载和运算符重载加号实现矩阵相加实例代码
2021-01-21 18:20:16C++ 重载+运算符重载加号 实现矩阵相加 学习C++ 基础知识,这里实现简单的实例,记录下自己学习生活,很简单,大家一起看看吧! 实例代码: #include #include using namespace std; class Complex { private: ... -
对python中矩阵相加函数sum()的使用详解
2020-09-19 16:30:38今天小编就为大家分享一篇对python中矩阵相加函数sum()的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
java实现矩阵相加
2020-12-23 22:55:26简单程序,可提供参考 -
稀疏矩阵的运算——矩阵相加
2022-04-13 18:30:15南昌航空大学实验报告 课程名称: 数据结构A 实验名称: 实验...数组是一种常用的数据类型,本实验是有关两个稀疏矩阵进行相加的应用。 通过对本实验的学习,可以理解矩阵的相关操作方法。 二、实验内容 在本...南昌航空大学实验报告
课程名称: 数据结构A 实验名称: 实验五 稀疏矩阵运算
班 级: XXX 学生姓名: XXX 学号: XXXXX
指导教师评定: XXX 签 名: XXX
一、实验目的
数组是一种常用的数据类型,本实验是有关两个稀疏矩阵进行相加的应用。
通过对本实验的学习,可以理解矩阵的相关操作方法。
二、实验内容
在本实验的实例程序中,假设两个稀疏矩阵A和B,它们均为m行n列,要求编写求矩阵的加法即C=A+B的算法(C矩阵存放A与B相加的结果)。
三、程序分析
我们利用一维数组来存储。一维数组顺序存放非零元素的行号、列号和数值,行号-1作为结束标志。然后在进行矩阵加法运算时依次扫描矩阵A和B的行列值,并以行优先。当行列相同时,将第三个元素值相加的和以及行列号三个元素存入结果数组C中;不相同时,将A或B的三个元素直接存入结果数组中。
四、程序源代码
过程见后续,不想看过程的直接拉到底即可。
编写准备
首先,看一下稀疏矩阵的概念:
稀疏矩阵(Sparse Matrix):对于稀疏矩阵,目前还没有一个确切的定义。设矩阵A是一个n´m的矩阵中有s个非零元素,设 δ=s/(n´m),称δ为稀疏因子,如果某一矩阵的稀疏因子δ满足δ≦0.05时称为稀疏矩阵。
简单说就是一个有大量元素为ling3的数组。
以及矩阵相加:
一般是指在两个相同大小的矩阵,把其相对应元素加在一起的运算。
然后审查题目。
再程序分析中的“当行列相同时,将第三个元素值相加的和以及行列号三个元素存入结果数组C中;不相同时,将A或B的三个元素直接存入结果数组中。”这句话是编写的中心思想。
设计过程
定义部分
简单介绍一下
对于稀疏矩阵,采用压缩存储方法时,只存储非0元素。必须存储非0元素的行下标值、列下标值、元素值。因此,一个三元组(i, j, aij)唯一确定稀疏矩阵的一个非零元素。
三元组顺序表相应的数据结构定义如下:
//⑴ 三元组结点定义 #define MAX_SIZE 101 typedef struct { int row;//行下标 int col;//列下标 ElemType value;//元素值 }Triple; //⑵ 三元组顺序表定义 typedef struct { int m;//行数 int n;//列数 int t;//非0元素个数 Triple data[MAX_SIZE]; }TMatrix;
没有什么可更改的地方,直接拿来即可。
创建矩阵
直接上代码
void create_matrix(TMatrix &s,int M,int N)//矩阵创建 { s.m=M;s.n=N; printf("输入非0元素的个数:"); scanf("%d",&s.t); for(int i=1;i<=s.t;i++) { printf("输入第%d个非0元素的行数、列数以及数值:",i); scanf("%d%d%d",&s.data[i].row,&s.data[i].col,&s.data[i].value); } }
M代表矩阵行数,N代表列数。
先输入非0元素的个数,然后依次输入非0元素即可。
矩阵显示
因为输入的是非零元素组成的矩阵,这里将其变换为普通的矩阵,方便观察现象。
void disp_matrix(TMatrix s)//矩阵显示 { ElemType A[(s.m)+1][(s.n)+1]={0};//定义二维数组,并使初始值均为0 for(int temp=1;temp<=s.t;temp++)//非0元素进入数组 A[s.data[temp].row][s.data[temp].col]=s.data[temp].value; for(int i=1;i<=s.m;i++)//显示完整的矩阵 { for(int j=1;j<=s.n;j++) printf(" %d",A[i][j]); printf("\n"); } }
定义二维数组时(ElemType A[(s.m)+1][(s.n)+1]={0};)由于是从0开始计的,而创建函数是从1开始计的,为保持统一。
然后复刻非零元素即可。
最后输出。
矩阵相加函数
void add_matrix(TMatrix a,TMatrix b,TMatrix &c)//矩阵相加 { int temp=1; c.m=a.m;c.n=a.n; c.t=0; for(int i=1;i<=a.t;) for(int j=1;j<=b.t;) { if(a.data[i].row>b.data[j].row) { c.data[temp].row=b.data[j].row; c.data[temp].col=b.data[j].col; c.data[temp].value=b.data[j].value;//小的给到c c.t++;//非零元素加一 temp++;j++; } else if(a.data[i].row<b.data[j].row) { c.data[temp].row=a.data[i].row; c.data[temp].col=a.data[i].col; c.data[temp].value=a.data[i].value;//小的给到c c.t++;//非零元素加一 temp++;i++; } else //行号相等 { if(a.data[i].col>b.data[j].col) { c.data[temp].row=b.data[j].row; c.data[temp].col=b.data[j].col; c.data[temp].value=b.data[j].value;//小的给到c c.t++;//非零元素加一 temp++;j++; } else if(a.data[i].col<b.data[j].col) { c.data[temp].row=a.data[i].row; c.data[temp].col=a.data[i].col; c.data[temp].value=a.data[i].value;//小的给到c c.t++;//非零元素加一 temp++;i++; } else //列号也相等 { c.data[temp].row=a.data[i].row; c.data[temp].col=a.data[i].col; c.data[temp].value=a.data[i].value+b.data[j].value;//加和并给到c c.t++;//非零元素加一 temp++;i++;j++; } } } }
拿出程序分析中的“当行列相同时,将第三个元素值相加的和以及行列号三个元素存入结果数组C中;不相同时,将A或B的三个元素直接存入结果数组中。”。要对比行列。
如果矩阵a和b同一位置上都有非零元素,则相加。
反之则直接给到c。
实现起来的话,先判断a和b的非零元素的行数,小的那个给到c,然后跳到下一元素。(如b的非零元素的行数小,则将b的非零元素的行、列和值给到c,然后跳到b的下一非零元素)。
然后再判断列数。
如若行数和列数都相等,将a的非零元素的值和b的相加,再给到c即可。
最后是主函数
int main() { TMatrix a,b,c; int M,N;//m:行数 n:列数 printf("输入矩阵行数:");scanf("%d",&M); printf("输入矩阵列数:");scanf("%d",&N); printf("创建矩阵a:");create_matrix(a,M,N); printf("完整的矩阵a:\n");disp_matrix(a); printf("创建矩阵b:");create_matrix(b,M,N); printf("完整的矩阵b:\n");disp_matrix(b); add_matrix(a,b,c); printf("非零元素矩阵c:非零元素共有%d个\n行下标 列下标 元素值\n",c.t); for(int i=1;i<=c.t;i++) printf(" %d %d %d\n",c.data[i].row,c.data[i].col,c.data[i].value); printf("完整的矩阵c:\n");disp_matrix(c); return 0; }
源代码:
#include<stdio.h> #include<stdlib.h> #define ElemType int #define MAX_SIZE 101 typedef struct { int row;//行下标 int col;//列下标 ElemType value;//元素值 }Triple; typedef struct { int m;//行数 int n;//列数 int t;//非0元素个数 Triple data[MAX_SIZE]; }TMatrix; void create_matrix(TMatrix &s,int M,int N)//矩阵创建 { s.m=M;s.n=N; printf("输入非0元素的个数:"); scanf("%d",&s.t); for(int i=1;i<=s.t;i++) { printf("输入第%d个非0元素的行数、列数以及数值:",i); scanf("%d%d%d",&s.data[i].row,&s.data[i].col,&s.data[i].value); } } void add_matrix(TMatrix a,TMatrix b,TMatrix &c)//矩阵相加 { int temp=1; c.m=a.m;c.n=a.n; c.t=0; for(int i=1;i<=a.t;) for(int j=1;j<=b.t;) { if(a.data[i].row>b.data[j].row) { c.data[temp].row=b.data[j].row; c.data[temp].col=b.data[j].col; c.data[temp].value=b.data[j].value;//小的给到c c.t++;//非零元素加一 temp++;j++; } else if(a.data[i].row<b.data[j].row) { c.data[temp].row=a.data[i].row; c.data[temp].col=a.data[i].col; c.data[temp].value=a.data[i].value;//小的给到c c.t++;//非零元素加一 temp++;i++; } else //行号相等 { if(a.data[i].col>b.data[j].col) { c.data[temp].row=b.data[j].row; c.data[temp].col=b.data[j].col; c.data[temp].value=b.data[j].value;//小的给到c c.t++;//非零元素加一 temp++;j++; } else if(a.data[i].col<b.data[j].col) { c.data[temp].row=a.data[i].row; c.data[temp].col=a.data[i].col; c.data[temp].value=a.data[i].value;//小的给到c c.t++;//非零元素加一 temp++;i++; } else //列号也相等 { c.data[temp].row=a.data[i].row; c.data[temp].col=a.data[i].col; c.data[temp].value=a.data[i].value+b.data[j].value;//加和并给到c c.t++;//非零元素加一 temp++;i++;j++; } } } } void disp_matrix(TMatrix s)//矩阵显示 { ElemType A[(s.m)+1][(s.n)+1]={0};//定义二维数组,并使初始值均为0 for(int temp=1;temp<=s.t;temp++)//非0元素进入数组 A[s.data[temp].row][s.data[temp].col]=s.data[temp].value; for(int i=1;i<=s.m;i++)//显示完整的矩阵 { for(int j=1;j<=s.n;j++) printf(" %d",A[i][j]); printf("\n"); } } int main() { TMatrix a,b,c; int M,N;//m:行数 n:列数 printf("输入矩阵行数:");scanf("%d",&M); printf("输入矩阵列数:");scanf("%d",&N); printf("创建矩阵a:");create_matrix(a,M,N); printf("完整的矩阵a:\n");disp_matrix(a); printf("创建矩阵b:");create_matrix(b,M,N); printf("完整的矩阵b:\n");disp_matrix(b); add_matrix(a,b,c); printf("非零元素矩阵c:非零元素共有%d个\n行下标 列下标 元素值\n",c.t); for(int i=1;i<=c.t;i++) printf(" %d %d %d\n",c.data[i].row,c.data[i].col,c.data[i].value); printf("完整的矩阵c:\n");disp_matrix(c); return 0; }
运行结果:
-
十字链表实现矩阵相加
2013-12-09 11:40:53在学习《数据结构(C语言版)》中第五章稀疏矩阵时,课本提示使用十字链表实现矩阵相加,没能运行,于是自己调试实现了下,希望对大家有帮助 -
C语言数据结构两个稀疏矩阵相加
2019-04-30 18:27:20C语言数据结构之两个稀疏矩阵相加。代码中代码功能描述、输入输出说明和测试输出输入。 -
python 实现矩阵相加
2022-06-09 15:50:14# 题目:计算两个矩阵相加。 # 程序分析:创建一个新的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。 -
Java、两个矩阵相加
2022-03-08 15:35:56编写两个矩阵相加的方法:public static double[][] addMatrix(double[][] a, double[][] b) 编写一个测试程序,提示用户输入两个3 *3的矩阵,然后显示它们的和。 测试数据: Enter matrix1: 1 2 3 4 5 6 7 8 9 ...编写两个矩阵相加的方法:
public static double[][] addMatrix(double[][] a, double[][] b)
编写一个测试程序,提示用户输入两个3 * 3的矩阵,然后显示它们的和。
测试数据:
Enter matrix1: 1 2 3 4 5 6 7 8 9
Enter matrix2: 0 2 4 1 4.5 2.2 1.1 4.3 5.2
package pack2; import java.util.Scanner; public class TwoMatrixSum { public static void main(String[] args) { try(Scanner input = new Scanner(System.in);) { double[][] a = new double[3][3]; double[][] b = new double[3][3]; System.out.print("Enter matrix1: "); for (int i = 0; i < a.length; i++) for (int j = 0; j < a.length; j++) a[i][j] = input.nextDouble(); System.out.print("Enter matrix2: "); for (int i = 0; i < a.length; i++) for (int j = 0; j < a.length; j++) b[i][j] = input.nextDouble(); printMatrix(a, b, addMatrix(a, b), '+'); } } /**两个矩阵相加*/ public static double[][] addMatrix(double[][] a, double[][] b) { double[][] sum = new double[a.length][a.length]; for (int i = 0; i < sum.length; i++) for (int j = 0; j < sum.length; j++) sum[i][j] = a[i][j] + b[i][j]; return sum; } /**打印矩阵*/ public static void printMatrix(double[][] a, double[][] b, double[][] c, char op) { for (int i = 0; i < c.length; i++) { for (int j = 0; j < c.length; j++) System.out.printf("%5.1f", a[i][j]); if(i == c.length / 2) System.out.print(" "+op+" "); else System.out.print(" "); for (int j = 0; j < c.length; j++) System.out.printf("%5.1f", b[i][j]); if(i == c.length / 2) System.out.print(" = "); else System.out.print(" "); for (int j = 0; j < c.length; j++) System.out.printf("%5.1f", c[i][j]); System.out.println(); } } }
-
Python——矩阵相加(采用矩阵相加数学计算方法实现)(tkinter实现)【2021-08-10】
2021-08-10 23:29:06Python——矩阵相加(采用矩阵相加数学计算方法实现)(tkinter实现)1.addmatrix.py2.结果示例 CSDN用户(TDTX),TDTX主页 CSDN用户(philo42),philo42主页 【矩阵相乘】采用线性代数中,计算矩阵相乘的方法实现... -
Java 将两个矩阵相加
2021-03-08 16:45:04import java.util.Scanner;public class Main {//N o w J a v a . c o m - 时代Java 提 供public static int[][] mMatrixSum(int mArrayA[][], int mArrayB[][]) {int i, j;int mRows = mArrayA.length;... -
8.5(代数:两个矩阵相加)编写两个矩阵相加的方法。
2021-10-14 21:56:33方法头如下: public static double[][] addMatrix(double[][] a, double[][]...public class _016_矩阵相加 { public static void main(String[] args) { double[][] matrix1= new double[4][4]; double[][] matr -
Java程序对两个矩阵相加
2021-04-24 15:48:34Java程序对两个矩阵相加我们可以使用二进制+运算符在Java中对两个矩阵进行相加。矩阵也称为数组数组。我们可以加,减和乘矩阵。要减去两个矩阵,请使用-运算符。让我们看一个简单的示例,对两个3行3列的矩阵进行相加... -
稀疏矩阵相加(C语言)
2021-03-30 10:56:12今天整了下稀疏矩阵相加,不是很难; 题目: 话不多说,代码如下: #include<stdio.h> #include<stdlib.h> #define MAXSIZE 1000 typedef struct{ int row;//第几行 int col;//第几列 int e;//存储的... -
PYTHON练习题---矩阵相加
2022-04-21 20:29:03python 矩阵相加 正整数n,代表要输入的是n*n的矩阵,两个矩阵由用户输入,计算输出两个矩阵相加的和。 -
PYTHON--三阶矩阵相加
2022-04-17 17:44:00python对于矩阵的运算。简单的方法,快速实现。并可延申至多维矩阵的计算 -
C/C++ 实现二维数组的矩阵相乘和矩阵相加
2021-11-18 21:31:14C++实现矩阵相乘和相加运算 这里只实现了N * N矩阵的相加和相乘,如果想要实现N*M 和 M*S矩阵相乘,得到N*S矩阵,只需要将乘法的i,j改成N和S的值,k对应的是M的值 #include <iostream> #define N 3 using... -
两个矩阵相加后求逆
2019-11-12 18:02:37如何计算两个矩阵相加后求逆 Householder公式指出如果A是非奇异矩阵,x,y是向量,他们所有的阶数都是n,如果 是非奇异的,那么 -
c++使用vector实现两个矩阵相加
2021-08-10 15:57:01c++使用vector实现两个矩阵相加 直接上代码 #include <vector> vector<vector<double>> matrix_add(vector<vector<double>> m, vector<vector<double>> n) { //矩阵... -
python进阶练习之——矩阵相加❤️
2021-07-26 08:54:31**题目:**计算两个矩阵相加。 **程序分析:**创建一个新的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。 X = [[12,7,3], [4 ,5,6], [7 ,8,9]] Y = [[5,8,1], [6,7,... -
矩阵相加(运算符重载)
2021-09-25 22:43:102、用运算符重载的方法实现两个矩阵对象的相加,矩阵相加是指两个矩阵的每个位置上的两个元素相加 3、用构造函数实现对象的初始化,用输出函数实现矩阵的输出。提示:在构造函数内做输入可以减少很多麻烦 整数指针... -
C# 矩阵相加代码
2019-11-19 21:29:33两个矩阵相加的过程,并显示两个矩阵相加后的结果: using System; namespace MatrixAdd { class Program { static void MatrixAdd(int[,] arrA, int[,] arrB, int[,] arrC, int dimX, int dimY) { int... -
CUDA:并行计算实现矩阵相加
2018-10-18 21:58:29完成矩阵相加的并行程序的实现(不用share memory实现) 要求: 实现2个矩阵(32*32)的相加,M矩阵的初始值全为2,N矩阵的初始值全为5。同时用CPU代码实现,比较两个代码的运行时间 实现2个矩阵(1024*1024)的... -
Python OOP将矩阵相加(循环问题)
2020-12-15 22:48:47数据是一个二维矩阵,但是在这里你可以用一个索引来访问它。data[k]因此是一整行,使用+可以连接行(可能不是您想要的,对吗?)。可能highBandWidth的解决方案正是您所寻找的。在第二个问题更微妙,是关于陈述^{pr2}$...