当前位置:文档之家› 稀疏矩阵乘法的运算

稀疏矩阵乘法的运算

稀疏矩阵乘法的运算
稀疏矩阵乘法的运算

课程设计任务书

学生姓名:专业班级:

指导教师:夏红霞工作单位:计算机科学与技术学院题目: 稀疏矩阵乘法的运算

课程设计要求:

1、熟练掌握基本的数据结构;

2、熟练掌握各种算法;

3、运用高级语言编写质量高、风格好的应用程序。

课程设计任务:

1、系统应具备的功能:

(1)设计稀疏矩阵的存储结构

(2)建立稀疏矩阵

(3)实现稀疏矩阵的乘法

2、数据结构设计;

3、主要算法设计;

4、编程及上机实现;

5、撰写课程设计报告,包括:

(1)设计题目;

(2)摘要和关键字;

(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、不足之处、设计体会等;

(4)结束语;

(5)参考文献。

时间安排:2010年7月5日-9日(第19周)

7月5日查阅资料

7月6日系统设计,数据结构设计,算法设计

7月7日 -8日编程并上机调试

7月9日撰写报告

7月10日验收程序,提交设计报告书。

指导教师签名: 2010年7月4日系主任(或责任教师)签名: 2010年7月4日

目录

1.摘要 (1)

2.关键字 (1)

3.引言 (1)

4. 问题描述 (1)

5. 系统设计 (1)

6. 数据结构 (3)

7. 算法描述 (3)

8. 测试结果与分析 (4)

9. 源代码 (12)

10. 总结 (29)

11.参考文献 (29)

稀疏矩阵乘法的运算

1.摘要:在一些数值计算中,一些二维矩阵的乘法运算很常见,我们经常采用线性代数中的知识进行运算,然而对一些含有非零元很少的二维矩阵也采用相同的方法时,就会发现那样的方法不仅需要很多的空间来存储0,造成空间复杂度比较大,而且算法的时间复杂度也较大。因此需要采取其他的方法来解决这个问题,由于0在乘法中其结果总是0,所以可以考虑采用三元组的方式去存储稀疏矩阵中的非零元,这样在计算过程中不仅需要的内存空间减少了,而且运算的速率也提高了。

2.关键字:稀疏矩阵乘法二维矩阵算法复杂度

3.引言:随着科学技术的发展,人们对矩阵的运算的几率越来越大,特别是高新科技研究中对矩阵的运算更是常见。但是如何高效的并占内存少的进行矩阵运算就是一个急需解决的问题。本文主要对稀疏矩阵的存储以及稀疏矩阵的乘法运算进行了研究和探讨。

4.问题描述:在一些数值计算中,一些二维矩阵的乘法运算很常见,我们经常采用线性代数中的知识进行运算,然而对一些含有非零元很少的二维矩阵也采用相同的方法时,就会发现那样的方法不仅需要很多的空间来存储0,造成空间复杂度比较大,而且算法的时间复杂度也较大。为了减少空间和时间复杂度,可以根据给定的二维数组的数据设计稀疏矩阵的存储结构,然后根据设计的稀疏矩阵存储结构建立一个稀疏矩阵,最后获得两个二维数组得到他们各自的稀疏矩阵,计算这两个稀疏矩阵的乘积。

5.系统设计:

5.1 设计目标:通过一定的数据结构,存储含有少量数据的矩阵,把他们存入一个稀疏矩阵中,然后实现稀疏矩阵的乘法运算。[基本要求]设计稀疏矩阵的存储结构;建立稀疏矩阵;实现稀疏矩阵的乘法

5.2 系统实现的操作和功能:

5.2.1初始化:初始化一些数据

5.2.2获得数据:根据客户的要求可以采用人工输入和从文件中读取数

据两种方式获得二维矩阵的中的数据。然后根据相应的数据建立稀疏矩阵。

5.2.3检查数据的合法性:当这两个二维矩阵不满足矩阵相乘的条件时,系统将报错,并退出系统。

5.2.4稀疏矩阵的乘法:当两个二维矩阵合法时将对其进行乘法运算,

然后将结果输出并按用户的要求保存到相应的文件中。

5.3设计思想:在操作的过程中采用三元组建立稀疏矩阵。用户可以通

过输入数据或者文件名以后,系统会自动建立一个三元组的稀疏矩阵,然后对其进行乘法运算。在里面主要包含两个函数文件:获得数据并建立稀疏矩阵,对稀疏矩阵进行合法性的检查并进行乘法运算。

5.4系统模块划分:

6.数据结构:

采用结构体存储每行每列的元素:

typedef struct DataNode {

int row ;//存储所在二维矩阵的行数 int col ;//存储所在二维矩阵的列数

稀疏矩阵乘法的运算

获得数据并建立稀疏矩

检查矩阵合法性并进行乘法运算

输出结果并存到指定文件中

数据初

始化

ElemType data;//存储row行col列的元素的值

}DataNode;

采用结构体存储稀疏二维数组:

typedef struct SparseMatrix

DataType *matrix;//用数组存储非零元

int row;//二维数组的行数

int col;//二维数组的列数

int *rpos;//每行第一个非零元在matrix中的位置

int num;//非零元的个数

int con;//指定常数

};

注:在第二个结构体中num和con这两个变量,在本此系统中con默认为0,num的功能是检验数据是否完整。当二维数组中出现很多非零元素值一样的时候,也可以采用三元组的方法存储,只要让con等于那个非零元素值即可。7.算法描述:

本系统的主要算法为稀疏矩阵的乘法运算。

算法如下:

Q初始化;

if (Q是非零矩阵)

{//逐行求积

for(arow=1;arow<=M.row;++arow)

{//处理M的每一行

ctemp[]=0;//累加器清零

计算Q中第arow行的积并存入ctemp[]中;

将ctemp[]中的非零元压缩存储到Q.matrix中;

}

}

8.测试结果与分析:

测试1:两个文件数据完全正确

Input the method of getting data(1 is from file,2 is from inputting):1 Input two names of the data file:data1.txt data2.txt

Read the first file successfully!

Read the second file successfully!

The first matrix is:

1 1 3

1 4 5

2 2 -1

3 1 2

The second matrix is:

1 2 2

2 1 1

3 1 -2

3 2 4

The result is:

3 0 3 2

1 2 6

2 1 -1

3 2 4

Input one name of the data file:data5.txt

测试2:一个文件数据完全正确,另一个文件数据不正确Input the method of getting data(1 is from file,2 is from inputting):1 Input two names of the data file:data1.txt data4.txt

Read the first file successfully!

The data is wrong!

The first data is wrong!

Please check it carefully,then input it again:

1 2 2

The data is wrong!

The 4th data is wrong!

Please check it carefully,then input it again:

3 2 4

Read the second file successfully!

The first matrix is:

1 1 3

1 4 5

2 2 -1

3 1 2

The second matrix is:

1 2 2

2 1 1

3 1 -2

3 2 4

The result is:

3 0 3 2

1 2 6

2 1 -1

3 2 4

Input one name of the data file:data6.txt

测试3:两个数据文件都错误

Input the method of getting data(1 is from file,2 is from inputting):1 Input two names of the data file:data3.txt data4.txt

The data is wrong!

The second data is wrong!

Please check it carefully,then input it again:

The data is wrong!

The 4th data is wrong!

Please check it carefully,then input it again: 3 1 2

Read the first file successfully!

The data is wrong!

The first data is wrong!

Please check it carefully,then input it again: 1 2 2

The data is wrong!

The 4th data is wrong!

Please check it carefully,then input it again: 3 2 4

Read the second file successfully!

The first matrix is:

1 1 3

1 4 5

2 2 -1

3 1 2

The second matrix is:

1 2 2

2 1 1

3 1 -2

3 2 4

The result is:

3 0 3 2

1 2 6

2 1 -1

Input one name of the data file:data7.txt

测试4:不符合矩阵乘法运算条件

Input the method of getting data(1 is from file,2 is from inputting):1

Input two names of the data file:data.txt data1.txt

Read the first file successfully!

Read the second file successfully!

The first matrix is:

1 2 12

1 3 9

3 1 -3

3 6 14

4 3 24

5 2 18

6 1 15

6 4 -7

The second matrix is:

1 1 3

1 4 5

2 2 -1

3 1 2

The matrix multiply is illegal!

测试5:输入数据完全正确

Input the method of getting data(1 is from file,2 is from inputting):2

Input the first matrix:

With the order of a specified number of constant,specified constant and rows and columns number:

4 0 3 4

Enter each element of a two-dimensional arrays in the number of rows and columns and the location of the element value:

1 1 3

1 4 5

2 2 -1

3 1 2

Input the second matrix:

With the order of a specified number of constant,specified constant and rows and columns number:

4 0 4 2

Enter each element of a two-dimensional arrays in the number of rows and columns and the location of the element value:

1 2 2

2 1 1

3 1 -2

3 2 4

The first matrix is:

1 1 3

1 4 5

2 2 -1

3 1 2

The second matrix is:

1 2 2

2 1 1

3 1 -2

3 2 4

The result is:

3 0 3 2

2 1 -1

3 2 4

Input one name of the data file:data8.txt

测试6:输入数据时有错误

Input the method of getting data(1 is from file,2 is from inputting):2

Input the first matrix:

With the order of a specified number of constant,specified constant and rows and columns number:

4 0 3 4

Enter each element of a two-dimensional arrays in the number of rows and columns and the location of the element value:

1 1 3

1 4 5

2 2 -1

3 1 2

Input the second matrix:

With the order of a specified number of constant,specified constant and rows and columns number:

4 0 4 2

Enter each element of a two-dimensional arrays in the number of rows and columns and the location of the element value:

1 2 2

2 1 1

3 1 -2

3 3 4

The data is wrong!

Input again:3 2 4

The first matrix is:

1 4 5

2 2 -1

3 1 2

The second matrix is:

1 2 2

2 1 1

3 1 -2

3 2 4

The result is:

3 0 3 2

1 2 6

2 1 -1

3 2 4

Input one name of the data file:data9.txt

测试7:输入数据不满足矩阵相乘的条件

Input the method of getting data(1 is from file,2 is from inputting):2

Input the first matrix:

With the order of a specified number of constant,specified constant and rows and columns number:

4 0 3 4

Enter each element of a two-dimensional arrays in the number of rows and columns and the location of the element value:

1 1 3

1 4 5

2 2 -1

3 1 2

Input the second matrix:

With the order of a specified number of constant,specified constant and rows and columns number:

8 0 6 7

Enter each element of a two-dimensional arrays in the number of rows and columns and the location of the element value:

1 2 12

1 3 9

3 1 -3

3 6 14

4 3 24

5 2 18

6 1 15

6 4 -7

The first matrix is:

1 1 3

1 4 5

2 2 -1

3 1 2

The second matrix is:

1 2 12

1 3 9

3 1 -3

3 6 14

4 3 24

5 2 18

6 1 15

6 4 -7

The matrix multiply is illegal!

9.源代码:

----------------------------Makefile------------------------------- CC=gcc

CLFAGS=-g -Wall -O2 -lm

OBJECTS=main.o getdata.o init.o matrixmulti.o print.o main:$(OBJECTS)

$(CC) $(CLFAGS) -o $@ $^

.c.o:

$(CC) -c $<

.PHONY:clean

clean:

rm -f $(OBJECTS) main

-------------------------------main.c------------------------------- /*---------------------------基本信息------------------------------- 作者:方金卫

日期:2010年7月8日

系统名称:稀疏矩阵乘法

系统功能:稀疏矩阵的乘法

-------------------------------------------------------------------*/ #include

#include"data.h"

int main(void)

{

SparseMatrix sparsematrix1;

SparseMatrix sparsematrix2;

SparseMatrix sparsematrix3;

char filename1[32];

char filename2[32];

char filename3[32];

int tag;

int sign;

printf("Input the method of getting data(1 is from file,2 is from inputting):"); scanf("%d",&tag);

InitSparseMatrix(&sparsematrix1);

InitSparseMatrix(&sparsematrix2);/*初始化*/

/*获取数据*/

if(tag==1)

{

printf("Input two names of the data file:");

scanf("%s %s",filename1,filename2);

sign=GetData(&sparsematrix1,filename1);

if(sign==1)

printf("Read the first file successfully!\n");

if(sign==-1)

return 0;

sign=GetData(&sparsematrix2,filename2);

if(sign==1)

printf("Read the second file successfully!\n");

if(sign==-1)

return 0;

if(tag==2)

{

printf("Input the first matrix:\n");

InputData(&sparsematrix1);

printf("Input the second matrix:\n");

InputData(&sparsematrix2);

}

/*输出稀疏矩阵*/

printf("The first matrix is:\n");

PrintMatrix(sparsematrix1);

printf("The second matrix is:\n");

PrintMatrix(sparsematrix1);

sparsematrix3=MatrixMulti(sparsematrix1,sparsematrix2);/*稀疏矩阵的乘法运算*/

/*输出结果*/

printf("The result is:\n");

printf("%d %d %d %d\n",sparsematrix3.num,sparsematrix3.con,sparsematrix3.row,sp arsematrix3.col);

PrintMatrix(sparsematrix3);

/*输出到指定的文件中*/

printf("Input one name of the data file:");

scanf("%s",filename3);

PrintToFile(sparsematrix3,filename3);

return 1;

}

--------------------------------data.h------------------------------

#ifndef DATA_H_

#define DATA_H_

#include

#include

#define INT

#ifdef FLOAT

typedef float DataType;

#endif

#ifdef INT

typedef int DataType;

#endif

#define MAXSIZE 30

#define INITMAX 65535

typedef int Status;

/*-----------------定义数据结构-----------------*/

/*定义数据节点:每个节点存放所在的行数与列数,以及该处的值*/ typedef struct DataNode

{

int row,col;/*该元素所在的行数和列数*/

DataType data;

}DataNode;

/*数组的行列数*/

typedef struct SparseMatrix

{

int num;/*非指定元素的个数*/

int con;/*指定常数*/

int row,col;/*矩阵的行数和列数*/

DataNode *matrix;

int *rpos;/*各行第一个非指定元素的位置表,若不含某行时其值为-1*/

}SparseMatrix;

/*-----------------一些基本操作-----------------*/

/*In the getdata.c file*/

Status InputData(SparseMatrix *sparsematrix);/*人工输入数据*/

Status GetData(SparseMatrix *sparsematrix,char filename[]);/*从指定的文件中获得数据*/

/*In the init.c file*/

Status InitSparseMatrix(SparseMatrix *sparsematrix);/*初始化稀疏矩阵的数据*/

/*In the matrixmulti.c file*/

SparseMatrix MatrixMulti(SparseMatrix sparsematrix1,SparseMatrix sparsematrix2);/*稀疏矩阵相乘*/

/*In the print.c file*/

void PrintMatrix(SparseMatrix sparsematrix);/*输出系数矩阵里的值*/

void PrintToFile(SparseMatrix sparsematrix,char filename[]);/*将矩阵输入指定的文件中*/

#endif

--------------------------------init.c------------------------------

#include"data.h"

/*初始化数据*/

Status InitSparseMatrix(SparseMatrix *sparsematrix)

{

int i;

(*sparsematrix).num=0;

(*sparsematrix).con=0;

(*sparsematrix).row=0;

(*sparsematrix).col=0;

(*sparsematrix).matrix=(DataNode*)malloc(sizeof(DataNode));

if(!(*sparsematrix).matrix)

{

printf("Memory allocation failed in init.c!\n");

exit(1);

}

(*sparsematrix).matrix=NULL;

(*sparsematrix).rpos=(int *)malloc(sizeof(int));

if(!(*sparsematrix).rpos)

{

printf("Memory allocation failed in init.c!\n");

exit(1);

}

(*sparsematrix).rpos=NULL;

return 1;

}

-----------------------------getdata.c-------------------------------

#include"data.h"

/*-----------------------检验数据的合法性--------------------------*/

Status IsRight(SparseMatrix sparsematrix,int i)

{

if(sparsematrix.matrix[i].row>sparsematrix.row||sparsematrix.matrix[i].col>sparsemat rix.col)

{

printf("The data is wrong!\n");

return 0;

}

}

/*---------------------从文件中读取数据-------------------------*/

Status GetData(SparseMatrix *sparsematrix,char filename[])

{

FILE *fp;

int i;

int *count;/*辅助确定每行第一个元素的位置*/

InitSparseMatrix(sparsematrix);

if((fp=fopen(filename,"r+"))==NULL)

{

printf("Can't open this file!\n");

exit(1);

}

/*分别获得二维矩阵非指定常数的个数,指定常数,以及它的行数和列数*/ fscanf(fp,"%d%d%d%d",&(*sparsematrix).num,&(*sparsematrix).con,&(*sparsematr ix).row,&(*sparsematrix).col);

(*sparsematrix).matrix=(DataNode*)malloc(((*sparsematrix).num+1)*sizeof(DataNo de));

if(!(*sparsematrix).matrix)

{

printf("Memory allocation failed in getdata.c!\n");

exit(1);

}

(*sparsematrix).rpos=(int *)malloc(((*sparsematrix).row+1)*sizeof(int));

if(!(*sparsematrix).rpos)

{

printf("Memory allocation failed in getdata.c!\n");

实现稀疏矩阵(采用三元组表示)的基本运算实验报告

实现稀疏矩阵(采用三元组表示)的基本运算实验报告 一实验题目: 实现稀疏矩阵(采用三元组表示)的基本运算二实验要求: (1)生成如下两个稀疏矩阵的三元组 a 和 b;(上机实验指导 P92 )(2)输出 a 转置矩阵的三元组; (3)输出a + b 的三元组; (4)输出 a * b 的三元组; 三实验内容: 稀疏矩阵的抽象数据类型: ADT SparseMatrix { 数据对象:D={aij| i = 1,2,3,….,m; j =1,2,3,……,n; ai,j∈ElemSet,m和n分别称为矩阵的行数和列数} 数据关系: R={ Row , Col } Row ={ | 1≤i≤m , 1≤j ≤n-1} Col ={| 1≤i≤m-1,1≤j ≤n} 基本操作:

CreateSMatrix(&M) 操作结果:创建稀疏矩阵 M PrintSMatrix(M) 初始条件:稀疏矩阵M已经存在 操作结果:打印矩阵M DestroySMatrix(&M) 初始条件:稀疏矩阵M已经存在 操作结果:销毁矩阵M CopySMatrix(M, &T) 初始条件:稀疏矩阵M已经存在 操作结果:复制矩阵M到T AddSMatrix(M, N, &Q) 初始条件:稀疏矩阵M、N已经存在 操作结果:求矩阵的和Q=M+N SubSMatrix(M, N, &Q) 初始条件:稀疏矩阵M、N已经存在 操作结果:求矩阵的差Q=M-N TransposeSMatrix(M, & T) 初始条件:稀疏矩阵M已经存在 操作结果:求矩阵M的转置T MultSMatrix(M, N, &Q) 初始条件:稀疏矩阵M已经存在

矩阵的运算及其运算规则

矩阵基本运算及应用 牛晨晖 在数学中,矩阵是一个按照长方阵列排列的或集合。矩阵是高等代中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、、光学和中都有应用;中,制作也需要用到矩阵。矩阵的运算是领域的重要问题。将为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。在电力系统方面,矩阵知识已有广泛深入的应用,本文将在介绍矩阵基本运算和运算规则的基础上,简要介绍其在电力系统新能源领域建模方面的应用情况,并展望随机矩阵理论等相关知识与人工智能电力系统的紧密结合。 1矩阵的运算及其运算规则 1.1矩阵的加法与减法 1.1.1运算规则 设矩阵,, 则 简言之,两个矩阵相加减,即它们相同位置的元素相加减! 注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的.

1.1.2运算性质 满足交换律和结合律 交换律; 结合律. 1.2矩阵与数的乘法 1.2.1运算规则 数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或.特别地,称称为的负矩阵. 1.2.2运算性质 满足结合律和分配律 结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA. 分配律:λ(A+B)=λA+λB. 1.2.3典型举例 已知两个矩阵 满足矩阵方程,求未知矩阵. 解由已知条件知

? 1.3矩阵与矩阵的乘法 1.3.1运算规则 设,,则A与B的乘积是这样一个矩阵: (1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即. (2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和. 1.3.2典型例题 设矩阵 计算 解是的矩阵.设它为

矩阵的运算及其运算规则

矩阵基本运算及应用 201700060牛晨晖 在数学中,矩阵是一个按照长方阵列排列的复数或实数集合。矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。在电力系统方面,矩阵知识已有广泛深入的应用,本文将在介绍矩阵基本运算和运算规则的基础上,简要介绍其在电力系统新能源领域建模方面的应用情况,并展望随机矩阵理论等相关知识与人工智能电力系统的紧密结合。 1矩阵的运算及其运算规则 1.1矩阵的加法与减法 1.1.1运算规则 设矩阵,, 则

简言之,两个矩阵相加减,即它们相同位置的元素相加减! 注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的. 1.1.2运算性质 满足交换律和结合律 交换律; 结合律. 1.2矩阵与数的乘法 1.2.1运算规则 数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或. 特别地,称称为的负矩阵. 1.2.2运算性质 满足结合律和分配律 结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA. 分配律:λ(A+B)=λA+λB.

已知两个矩阵 满足矩阵方程,求未知矩阵. 解由已知条件知 1.3矩阵与矩阵的乘法 1.3.1运算规则 设,,则A与B的乘积是这样一个矩阵: (1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即 . (2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和.

稀疏矩阵的运算(完美版)

专业课程设计I报告(2011 / 2012 学年第二学期) 题目稀疏矩阵的转换 专业软件工程 学生姓名张鹏宇 班级学号 09003018 指导教师张卫丰 指导单位计算机学院软件工程系 日期 2012年6月18号

指导教师成绩评定表

附件: 稀疏矩阵的转换 一、课题内容和要求 1.问题描述 设计程序用十字链表实现稀疏矩阵的加、减、乘、转置。 2.需求分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 二、设计思路分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 三、概要设计 为了实现以上功能,可以从3个方面着手设计。 1.主界面设计 为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主

控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。本系统主控菜单运行界面如图所示。 2.存储结构设计 本系统采用单链表结构存储稀疏矩阵的具体信息。其中:全部结点的信息用头结点为指针数组的单链表存储。 3.系统功能设计 本系统除了要完成稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的初始化由函数i typedef int ElemType 实现。建立稀疏矩阵用void Creat()实现,依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。 (1)稀疏矩阵的加法: 此功能由函数void Xiangjia( )实现,当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。 (2)稀疏矩阵的乘法: 此功能由函数void Xiangcheng( )实现。当用户选择该功能,系统提示输

【线性代数】之矩阵的乘法运算

Born T o Win 考研数学线性代数之矩阵的乘法运算 任意两个矩阵不一定能够相乘,即两个矩阵要相乘必须满足的条件是:只有当第一个矩阵A 的列数与第二个矩阵B 的行数相等时A ×B 才有意义。一个m ×n 的矩阵A 左乘一个n ×p 的矩阵B ,会得到一个m ×p 的矩阵C 。左乘:又称前乘,就是乘在左边(即乘号前),比如说,A 左乘E 即AE 。 一个m 行n 列的矩阵与一个n 行p 列的矩阵可以相乘,得到的结果是一个m 行p 列的矩阵,其中的第i 行第j 列位置上的数为第一个矩阵第i 行上的n 个数与第二个矩阵第j 列上的n 个数对应相乘后所得的n 个乘积之和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。其中,结果矩阵的那个4(结果矩阵中第二(i )行第二(j)列)= 2(第一个矩阵第二(i)行第一列)*2(第二个矩阵中第一行第二(j)列) + 0(第一个矩阵第二(i)行第二列)*1(第二个矩阵中第二行第二(j)列): 矩阵乘法的两个重要性质:一,矩阵乘法满足结合律; 二,矩阵乘法不满足交换律。为什么矩阵乘法不满足交换律呢?这是由矩阵乘法定义决定的。因为矩阵AB=C ,C 的结果是由A 的行与B 的列相乘和的结果;而BA=D ,D 的结果是由B 的行与A 的列相乘和的结果。显然,得到的结果C 和D 不一定相等。同时,交换后两个矩阵有可能不能相乘。 因为矩阵乘法不满足交换律,所以矩阵乘法也不满足消去律。即由AB=AC 是得不到B=C 的,这是因为()AB AC A B C O =?-=是得不到A=O 或B-C=O 即B=C.例 111000010A B ????=≠=≠ ? ?-????0, 但0000AB O ??== ??? 那么由AB=O 一定得不到A=O 或B=O 吗?回答是否定的。比如A 是m ×n 阶矩阵,B 是n ×s 阶矩阵,若A 的秩为n ,则AB=O ,得B=O ;若B 的秩为m ,则AO ,得A=O.为什么吗?原因会在有关齐次线性方程组的文章里进行讲解.

矩阵乘法的法则

第六节.矩阵乘法的法则 教学目标: (1)通过几何变换,使学生理解矩阵乘法不满足交换律(但并不是绝对的)。 (2)通过实例,了解矩阵的乘法满足结合律。 教学重点:理解矩阵乘法不满足交换律。 教学难点:从图形变换的角度理解矩阵的乘法不满足交换律。 教学过程: 一、引入:对上节课的练习的讨论: 已知三角形ABC 的三个顶点的坐标分别为:A (0,0),B (2,0),C (2, 2),先将三角形作以原点为中心的反射变换(变换矩阵为?? ?? ??--1001),再以x 轴为基准,将所得图形压缩到原来的一半(变换矩阵为????????21001),试求:(1)这连续两次变换所对应的变换矩阵U ; 问:U=??????--1001??????? ?21001=????????--21001 U=????????21001??????--1001=??? ?????--21001 问题:矩阵的乘法是否满足交换律呢? 2、例题 例1.已知矩阵A 、B ,计算AB 及BA ,并比较他们是否相同,能否从几何变换的角度给予解释? (1)A=??????2001,B=????? ?-0110; (2)A=??? ?????21001,B=??????1003。 解:(1)AB=??????2001??????-01 10=??????-0210,BA=??????-0110??????2001=?? ????-0120 显然,AB ≠BA 。 从几何变换的角度,AB 表示先作反射变换(变换矩阵为B ),后作伸缩变换(变换矩阵为A );而BA 表示先作伸缩变换(变换矩阵为A ),后作反射变换(变换矩阵为B )。当连续进行一系列变换时,交换变换次序得到的结果,一般说会不相同。仍以正方形(顶点分别为A(0,0),B(1,0),C(1,1),D(0,1))为例,如下图:

矩阵的各种运算详细讲解

一、矩阵的线性运算 定义1 设有两个矩阵和,矩阵与的和记作, 规定为 注:只有两个矩阵是同型矩阵时,才能进行矩阵的加法运算. 两个同型矩阵的和,即为两个矩阵对应位置元素相加得到的矩阵. 设矩阵记 , 称为矩阵的负矩阵, 显然有 . 由此规定矩阵的减法为 . 定义2 数与矩阵A的乘积记作或, 规定为 数与矩阵的乘积运算称为数乘运算. 矩阵的加法与矩阵的数乘两种运算统称为矩阵的线性运算. 它满足下列运算规律:设都是同型矩阵,是常数,则 (1) (2) ; (3) (4) (5) (6) (7) (8) 注:在数学中,把满足上述八条规律的运算称为线性运算. 二、矩阵的相乘 定义3设

矩阵与矩阵的乘积记作, 规定为 其中,( 记号常读作左乘或右乘. 注: 只有当左边矩阵的列数等于右边矩阵的行数时, 两个矩阵才能进行乘法运算. 若,则矩阵的元素即为矩阵的第行元素与矩阵的第列对应元素乘积的和. 即 . 矩阵的乘法满足下列运算规律(假定运算都是可行的): (1) (2) (3) (4) 注: 矩阵的乘法一般不满足交换律, 即 例如, 设则 而 于是且 从上例还可看出: 两个非零矩阵相乘, 可能是零矩阵, 故不能从必然推出 或 此外, 矩阵乘法一般也不满足消去律,即不能从必然推出例如, 设 则 但 定义4如果两矩阵相乘, 有

则称矩阵A与矩阵B可交换.简称A与B可换. 注:对于单位矩阵, 容易证明 或简写成 可见单位矩阵在矩阵的乘法中的作用类似于数1. 更进一步我们有 命题1设是一个n阶矩阵,则是一个数量矩阵的充分必要条件是与任何n阶矩阵可换。 命题2设均为n阶矩阵,则下列命题等价: (1) (2) (3) (4) 三、线性方程组的矩阵表示 设有线性方程组 若记 则利用矩阵的乘法, 线性方程组(1)可表示为矩阵形式: (2) 其中矩阵称为线性方程组(1)的系数矩阵. 方程(2)又称为矩阵方程. 如果是方程组(1)的解, 记列矩阵 则 ,

苏教版高中数学高二选修4-2 矩阵乘法的概念

选修4-2矩阵与变换 2.3.1 矩阵乘法的概念 编写人: 编号:008 学习目标 1、 熟练掌握二阶矩阵与二阶矩阵的乘法。 2、 理解两个二阶矩阵相乘的结果仍然是一个二阶矩阵,从几何变换的角度来看,它表 示的是原来两个矩阵对应的连续两次变换。 学习过程: 一、预习: (一)阅读教材,解决下列问题: 问题:如果我们对一个平面向量连续实施两次几何变换,结果会是怎样?举例说明。 归纳1:矩阵乘法法则: 归纳2:矩阵乘法的几何意义: (二)初等变换:在数学中,一一对应的平面几何变换都可看做是伸压、反射、旋转、切变变换的一次或多次复合,而伸压、反射、切变变换通常叫做初等变换,对应的矩阵叫做初等变换矩阵。 练习 、.?? ??????????10110110=( ) A 、???? ??1110 B 、??????1011 C 、? ? ? ???0111 D 、??????0110 、已知矩阵X 、M 、N,若M =?? ? ???--1111, N =??????--3322,则下列X 中不满足:XM=N ,的一个 是( ) A 、X =???? ??--2120 B 、X =??????--1211 C 、X =??????--3031 D 、X =? ? ? ???-3053

二、课堂训练: 例1.(1)已知A= 11 22 11 22 ?? ? ? ? ? ?? ,B= 11 22 11 22 ?? - ? ? ? - ? ?? ,计算AB (2)已知A= 10 02 ?? ? ?? ,B= 14 23 ?? ? - ?? ,计算AB,BA (3)已知A= 10 00 ?? ? ?? ,B= 10 01 ?? ? ?? ,C= 10 02 ?? ? ?? 计算AB,AC 例2、已知梯形ABCD,其中A(0,0),B(3,0),C(2,2),D(1,2),先将梯形作关于x轴的反射变换,再将所得图形绕原点逆时针旋转0 90 (1)求连续两次变换所对应的变换矩阵M (2)求点A,B,C,D在 M T作用下所得到的结果 (3)在平面直角坐标系内画出两次变换对应的几何图形,并验证(2)中的结论。

稀疏矩阵的运算(完美版)

专业课程设计I报告( 2011 / 2012 学年第二学期) 题目稀疏矩阵的转换 专业软件工程 学生姓名张鹏宇 班级学号 09003018 指导教师张卫丰 指导单位计算机学院软件工程系 日期 2012年6月18号

指导教师成绩评定表

附件: 稀疏矩阵的转换 一、课题内容和要求 1.问题描述 设计程序用十字链表实现稀疏矩阵的加、减、乘、转置。 2.需求分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 二、设计思路分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 三、概要设计 为了实现以上功能,可以从3个方面着手设计。 1.主界面设计 为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。本系统主控菜单运行界面如图所示。

2.存储结构设计 本系统采用单链表结构存储稀疏矩阵的具体信息。其中:全部结点的信息用头结点为指针数组的单链表存储。 3.系统功能设计 本系统除了要完成稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的初始化由函数i typedef int ElemType 实现。建立稀疏矩阵用void Creat()实现,依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。 (1)稀疏矩阵的加法: 此功能由函数void Xiangjia( )实现,当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。 (2)稀疏矩阵的乘法: 此功能由函数void Xiangcheng( )实现。当用户选择该功能,系统提示输入要进行相乘的两个矩阵的详细信息。然后进行相乘,最后得到结果。 (3)稀疏矩阵的转置: 此功能由函数void Zhuanzhi( )实现。当用户选择该功能,系统提示用户初始

矩阵的乘法运算

沈阳航空航天大学课程设计 学号2009040603045 班级94060302 姓名崔建国 指导教师刘学平 2011年7 月 6 日

沈阳航空航天大学 课程设计任务书 学院:机电工程学院专业:车辆工程班级:94060302 学号:2009040603045 题目:矩阵的乘法运算 一、课程设计时间 2011年6月27日~7月1日(第17周),共计1周。 二、课程设计内容 在“file05_矩阵相乘.txt”文件中存放了两个矩阵,请读取这两个矩阵进行乘法运算,并显示结果矩阵。 三、课程设计要求 程序质量: ?贯彻事件驱动的程序设计思想。 ?用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。 ?用户界面中的菜单至少应包括“读取矩阵”、“开始计算”、“显示结果”、“退 出”4项。 ?代码应适当缩进,并给出必要的注释,以增强程序的可读性。 课程设计说明书: ?课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提 供的模板。 四、指导教师和学生签字 指导教师:刘学平学生签名:崔建国 五、成绩 六、教师评语

目录 一、需求分析 (4) 二、设计分析 (4) 三、关键技术 (6) 四、总结 (10) 五、完整的源程序 (11) 六、参考文献 (13)

一、需求分析 矩阵乘法运算是通过读取文本文件的资料,将两个矩阵进 行乘法运算,并显示结果。要求: ①学生会编程读取文本文会运open ②会运用Do while loop 的循环语句 ③懂得矩阵运算的法则. 二、设计分析 (1) 基本原理:运用打开顺序文件 open 文件名For Input/ output/ As # 文件号, 在文本文件中读取数据矩阵相乘采用二维数组For 循环 结构。矩阵相乘是将每个数字赋予一个字符,然后把字符 用公式写出来,进而进行计算,将得出的结果按矩阵的形 式打印在窗体上。

稀疏矩阵乘法的运算

课程设计任务书 学生姓名:专业班级: 指导教师:夏红霞工作单位:计算机科学与技术学院题目: 稀疏矩阵乘法的运算 课程设计要求: 1、熟练掌握基本的数据结构; 2、熟练掌握各种算法; 3、运用高级语言编写质量高、风格好的应用程序。 课程设计任务: 1、系统应具备的功能: (1)设计稀疏矩阵的存储结构 (2)建立稀疏矩阵 (3)实现稀疏矩阵的乘法 2、数据结构设计; 3、主要算法设计; 4、编程及上机实现; 5、撰写课程设计报告,包括: (1)设计题目; (2)摘要和关键字; (3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、不足之处、设计体会等; (4)结束语; (5)参考文献。 时间安排:2010年7月5日-9日(第19周) 7月5日查阅资料 7月6日系统设计,数据结构设计,算法设计 7月7日 -8日编程并上机调试 7月9日撰写报告 7月10日验收程序,提交设计报告书。 指导教师签名: 2010年7月4日系主任(或责任教师)签名: 2010年7月4日

目录 1.摘要 (1) 2.关键字 (1) 3.引言 (1) 4. 问题描述 (1) 5. 系统设计 (1) 6. 数据结构 (3) 7. 算法描述 (3) 8. 测试结果与分析 (4) 9. 源代码 (12) 10. 总结 (29) 11.参考文献 (29)

稀疏矩阵乘法的运算 1.摘要:在一些数值计算中,一些二维矩阵的乘法运算很常见,我们经常采用线性代数中的知识进行运算,然而对一些含有非零元很少的二维矩阵也采用相同的方法时,就会发现那样的方法不仅需要很多的空间来存储0,造成空间复杂度比较大,而且算法的时间复杂度也较大。因此需要采取其他的方法来解决这个问题,由于0在乘法中其结果总是0,所以可以考虑采用三元组的方式去存储稀疏矩阵中的非零元,这样在计算过程中不仅需要的内存空间减少了,而且运算的速率也提高了。 2.关键字:稀疏矩阵乘法二维矩阵算法复杂度 3.引言:随着科学技术的发展,人们对矩阵的运算的几率越来越大,特别是高新科技研究中对矩阵的运算更是常见。但是如何高效的并占内存少的进行矩阵运算就是一个急需解决的问题。本文主要对稀疏矩阵的存储以及稀疏矩阵的乘法运算进行了研究和探讨。 4.问题描述:在一些数值计算中,一些二维矩阵的乘法运算很常见,我们经常采用线性代数中的知识进行运算,然而对一些含有非零元很少的二维矩阵也采用相同的方法时,就会发现那样的方法不仅需要很多的空间来存储0,造成空间复杂度比较大,而且算法的时间复杂度也较大。为了减少空间和时间复杂度,可以根据给定的二维数组的数据设计稀疏矩阵的存储结构,然后根据设计的稀疏矩阵存储结构建立一个稀疏矩阵,最后获得两个二维数组得到他们各自的稀疏矩阵,计算这两个稀疏矩阵的乘积。 5.系统设计: 5.1 设计目标:通过一定的数据结构,存储含有少量数据的矩阵,把他们存入一个稀疏矩阵中,然后实现稀疏矩阵的乘法运算。[基本要求]设计稀疏矩阵的存储结构;建立稀疏矩阵;实现稀疏矩阵的乘法

n维矩阵的乘法AB-1_

《数据结构》课程设计 题目____n维矩阵的乘法AB-1______ 学号_________________ 姓名______________________ 专业_____________________ 指导老师___________________

第一章:课程设计的目的 (3) 第二章:课程设计的内容和要求 (3) 课程设计的内容 (3) 运行环境 (3) 第三章:课程设计分析 (4) 矩阵的存储 (4) 矩阵的输入与输出 (4) 矩阵的乘法运算 (4) 矩阵的求逆运算 (4) 第四章:课程设计的算法描述 (4) 矩阵的存储 (4) 矩阵的输出 (5) 矩阵的乘法 (5) 矩阵的求逆运算 (5) 第五章:源代码 (7) 第六章:结束语 (11)

第一章:课程设计的目的 本学期我们对《数据结构》这门课程进行了学习。这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。这次课程设计不但要求实习者掌握《数据结构》中的各方面知识,还要求实习者具备一定的C语言基础和编程能力。 具体说来,这次课程设计主要有两大方面目的。 一是让实习者通过实习掌握《数据结构》中的知识。对于矩阵乘法这一课题来说,所要求掌握的数据结构知识主要是数组的相关概念和数组用来存储矩阵的相关便利性。 二是通过实习巩固并提高实习者的C语言知识,并初步了解Visual C++的知识,提高其编程能力与专业水平。 第二章:课程设计的内容和要求 课程设计的内容 设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab-1结果。 要求 要求 1)界面友好,函数功能要划分好 2)总体设计应画一流程图 3)程序要加必要的注释 4)要提供程序测试方案 5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。 运行环境 该程序的运行环境为Windows xp系统,Microsoft Visual C++6.0版本。

矩阵n次方的几种求法的归纳

矩阵n 次方的几种求法 1.利用定义法 () () ,,ij kj s n n m A a B b ??==则() ,ij s m C c ?=其1122...ij i j i j in nj c a b a b a b =+++ 1 n ik kj k a b ==∑称为A 与B 的乘积,记为C=AB ,则由定义可以看出矩阵A 与B 的乘积C 的第i 行第j 列的元素等于第一个矩阵A 的第i 行与第二个矩阵B 的第j 列的对应元素乘积之和,且由定义知:第一个矩阵的列数与第二个矩阵的行数要相[]1 同。 例1:已知矩阵34 125310210134A ??? ?=- ? ???,44 5 130621034510200B ??? ? ? = ? ? ??,求AB 解:设C AB ==() 34 ij c ?,其中1,2,3i =;1,2,3,4j = 由矩阵乘积的定义知: 111526533032c =?+?+?+?=121122543231c =?+?+?+?= 131321553030 c =?+?+?+?=14102051305 c =?+?+?+?= 21150623101c =-?+?+?+?= 22110224129c =-?+?+?+?= 23130125107c =-?+?+?+?= 24100021102c =-?+?+?+?= 310516334015c =?+?+?+?= 320112344222c =?+?+?+?= 330311354016c =?+?+?+?= 34001031403c =?+?+?+?= 将这些值代入矩阵C 中得:

C AB ==34 323130519721522163??? ? ? ??? 则矩阵A 的n 次方也可利用定义的方法来求解。 2.利用矩阵的分块来求解 这类方法主要是把一个大矩阵看成是由一些小矩阵组成,就如矩阵 由数组成的一样在运算中将这些小矩阵当做数一样来处理,再由矩阵乘法的定义来求解这些小矩阵的乘积所构成的矩阵。即设 () () ,,ij kj s n n m A a B b ??==把A ,B 分解成一些小矩阵: 1111l t tl A A A A A ?? ?= ? ???K M O M L ,1111 r l lr B B B B B ?? ? = ? ??? K M O M L ,其中ij A 是i j s n ?小矩阵且1,2...i t =,1,2...j l =,且12...t s s s s +++= ,12...l n n n n +++=;ij B 是j k n m ?小矩阵且1,2...j l =,1,2...k r =;且12...l n n n n +++=, 12...r m m m m +++=;令C AB ==1111r t tr C C C C ?? ? ? ??? K M O M L ,其中ij C 是i j s m ?小矩阵且1,2...i t =,1,2,...,j r =,且12...t s s s s +++=, 12...r m m m m +++=;其中1122...ij i j i j il lj C A B A B A B =+++。这里我们应注意:矩阵A 列的分法必须与矩阵B 行的分法一[]1 致。

稀疏矩阵乘法运算

稀疏矩阵的乘法运算 程序代码: #include #include #include #include #include #include #define Ture 1 #define Overflow -1 typedef struct OLnode { int i,j; int e; struct OLnode *right,*down; }OLnode,*Olink; typedef struct { Olink *rhead,*chead; int mu,nu,tu; }Crosslist; //在十字链表M.rhead[row]中插入一个t结点

void insert_row(Crosslist &M,OLnode *t,int row) { OLnode *p; int col=t->j; if(M.rhead[row]==NULL||M.rhead[row]->j>col) { t->right=M.rhead[row]; M.rhead[row]=t; } else { for(p=M.rhead[row];p->right&&p->right->jright);//寻找在行表中的插入位置 t->right=p->right; p->right=t; } } //在十字链表M.chead[col]中插入一个结点t void insert_col(Crosslist &M,OLnode *t,int col) { OLnode *p; int row=t->i; if(M.chead[col]==NULL||M.chead[col]->i>row) { t->down=M.chead[col];

矩阵的运算及其运算规则

矩阵的运算及其运算规则 一、矩阵的加法与减法 1、运算规则 设矩阵,, 则 简言之,两个矩阵相加减,即它们相同位置的元素相加减! 注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的. 2、运算性质(假设运算都是可行的) 满足交换律和结合律 交换律; 结合律. 二、矩阵与数的乘法 1、运算规则

数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或.特别地,称称为的负矩阵. 2、运算性质 满足结合律和分配律 结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA. 分配律:λ(A+B)=λA+λB. 典型例题 例6.5.1已知两个矩阵 满足矩阵方程,求未知矩阵. 解由已知条件知 三、矩阵与矩阵的乘法 1、运算规则

设,,则A与B的乘积是这样一个矩阵: (1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即. (2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和. 典型例题 例6.5.2设矩阵 计算 解是的矩阵.设它为 想一想:设列矩阵,行矩阵,和的行数和列数分别是多少呢 是3×3的矩阵,是1×1的矩阵,即只有一个元素. 课堂练习

1、设,,求. 2、在第1道练习题中,两个矩阵相乘的顺序是A在左边,B在右边,称为A左乘B 或B右乘A.如果交换顺序,让B在左边,A在右边,即A右乘B,运算还能进行吗?请算算试试看.并由此思考:两个矩阵应当满足什么条件,才能够做乘法运算. 3、设列矩阵,行矩阵,求和,比较两个计算结果,能得出什么结论吗? 4、设三阶方阵,三阶单位阵为,试求和,并将计算结果与A比较,看有什么样的结论. 解: 第1题 . 第2题 对于

矩阵乘法的概念

矩阵乘法的概念 The latest revision on November 22, 2020

2006-2007后塍高中高二下学期数学教案(矩阵乘法的概念) 命题人:瞿蕴雅 教学目标: 1.熟练掌握二阶矩阵与二阶矩阵的乘法。 2.理解两个二阶矩阵相乘的结果仍然是一个二阶矩阵,从几何变换的角度来看,它表示的是原来两个矩阵的连续两次变换。 教学重点: 矩阵乘法的概念。 教学过程: 一、问题情境 问题:如果我们对一个平面向量连续实施两次几何变换,结果会是怎样 二、建构数学 1.矩阵乘法法则: 2.矩阵乘法的几何意义: 3.初等变换:在数学中,一一对应的平面几何变换都可看做是伸压、反射、旋转、切变变换的一次或多次复合,而伸压、反射、切变变换通常叫做初等变换,对应的矩阵叫做初等变换矩阵。 三、数学应用 1.例题 例1:(1)已知A= 11 22 11 22 ?? ? ? ? ? ?? ,B= 11 22 11 22 ?? - ? ? ? - ? ?? ,计算AB (2)已知A= 10 02 ?? ? ?? ,B= 14 23 ?? ? - ?? ,计算AB,BA (3)已知A= 10 00 ?? ? ?? ,B= 10 01 ?? ? ?? ,C= 10 02 ?? ? ?? 计算AB,AC 例2:已知梯形ABCD,其中A(0,0),B(3,0),C(2,2),D(1,2),先将梯形作关于x 轴的反射变换,再将所得图形绕原点逆时针旋转0 90 (1)求连续两次变换所对应的变换矩阵M

(2)求点A,B,C,D在 M T作用下所得到的结果 (3)在平面直角坐标系内画出两次变换对应的几何图形,并验证(2)中的结论。 例3: 已知A= cos sin sin cos αα αα - ?? ? ?? ,B= cos sin sin cos ββ ββ - ?? ? ?? ,试求AB,并对其几何意 义给予解释。 2.课堂练习 P46 1,2 四、回顾小结 1. 二阶矩阵乘法运算法则 2. 二阶矩阵乘法的几何意义 五、课外作业 同步导学

稀疏矩阵相乘

稀疏矩阵相乘 1问题描述 1.1稀疏矩阵的三元组及十字链表表示 (1)稀疏矩阵及其三元组表示 稀疏矩阵 (2)稀疏矩阵的十字链表表示 1.2基本要求 (1)以“带行逻辑链接信息”的三元组表示稀疏矩阵; (2)输入矩阵用三元组顺序输入; (2)稀疏矩阵采用十字链表表示; (3)实现两个矩阵相乘的运算,而运算结果的矩阵则以通常的阵列形式列出。 行(row) 列(col) 值(value) [0] 0 3 22 [1] 0 6 15 [2] 1 1 11 [3] 1 5 17 [4] 2 3 -6 [5] 3 5 39 [6] 4 0 39 [7] 5 2 28 0000280 000000091039000000006000017000110150022000?????? ? ? ? ? ? ?-

2设计思路 2.1存储结构设计 2.1.1三元组表示稀疏矩阵 只存储矩阵中极少的非零元素,采用来唯一地确定每一个非零元素,其中row、col、value分别表示非零元素在矩阵中的的行下标、列下表和值。各数组元素的三元组按在原矩阵中的位置以行优先的顺序依次存放。 struct triple { //三元组结构定义 int row, col; //非零元素行号,列号 Float value; //非零元素的值 triple& operator=(triple &x) {row=x.row;col=x.col;value=x.value;} }; 2.1.2十字链表表示稀疏矩阵 struct element{ int row,col;float value;}; class Matrix; class node { // 矩阵节点类的定义 friend class Matrix; public: node():head(true){ right=down=this;} //建立附加头结点 node(element *t) // 建立非零元素结点 { triple.col=t->col; triple.row=t->row; triple.value=t->value; right=down=this; head=false;

矩阵乘积的运算法则的证明

矩阵乘积的运算法则的证明 矩阵乘积的运算法则 1 乘法结合律:若n m C A ?∈,p n C B ?∈ , q p C C ?∈,则C AB BC A )()(=. 2 乘法左分配律:若A 和B 是两个n m ?矩阵,且C 是一个p n ?矩阵,则 BC AC C B A +=+)(. 3 乘法右分配律:若A 是一个n m ?矩阵,并且B 和C 是两个p n ?矩阵,则BC AC C B A +=+)(. 4 若α是一个标量,并且A 和B 是两个m n ?矩阵,则B A B A ααα+=+)(. 证明 1 ①先设n 阶矩阵为)(ij a A =,)(ij b B =, )(ij c C =,)(ij d AB =,)(ij e BC = )(ij f ABC =,)()(ij g BC A =,有矩阵的乘法得: n j i b a b a b a d nj in j i j i ij 2,1,.2211=+++= n j i c b c b c b e nj in j i j i ij 2,1,.2211=+++= n j i c d c d c d f nj in j i j i ij 2,1,.2211=+++= n j i e a e a e a g nj in j i j i ij 2,1,.2211=+++= 故对任意n j i 2,1,=有: nj in j i j i ij c d c d c d f +++= 2211 ++++=j n in i i c b a b a b a 11212111)( ++++j n in i i c b a b a b a 22222121)( nj nn in n i n i c b a b a b a )(2211++++ ++++=)(12121111nj n j j i c b c b c b a

矩阵的基本运算法则

矩阵的基本运算法则 1、矩阵的加法 矩阵加法满足下列运算规律(设A 、B 、C 都是m n ?矩阵,其中m 和n 均为已知的正整数): (1)交换律:+=+A B B A (2)结合律:()()++++A B C =A B C 注意:只有当两个矩阵为同型矩阵(两个矩阵的行数和列数分别相等)时,这两个矩阵才能进行加法运算。 2、数与矩阵相乘 数乘矩阵满足下列运算规律(设A 、B 是m n ?矩阵,λ和μ为数): (1)结合律:()λμλμ=A A (2)分配律:()λμλμ+=+A A A (3)分配律:()λλλ+=+A B A B 注意:矩阵相加与数乘矩阵合起来,统称为矩阵的线性运算。 3、矩阵与矩阵相乘 矩阵与矩阵的乘法不满足交换律、但是满足结合律和分配率(假设运算都是可行的): (1)交换律:≠AB BA (不满足) (2)结合律:()()=AB C A BC (3)结合律:()()()λλλλ==其中为数AB A B A B (4)分配律:()(),+=++=+A B C AB AC B C A BA CA 4、矩阵的转置 矩阵的转置满足下述运算规律(假设运算都是可行的,符号()T g 表示转置): (1)()T T =A A

(2)()T T T +=+A B A B (3)()T T λλ=A A (4)()T T T =AB B A 5、方阵的行列式 由A 确定A 这个运算满足下述运算法则(设A 、B 是n 阶方阵,λ为数): (1)T =A A (2)n λλ=A A (3)=AB A B 6、共轭矩阵 共轭矩阵满足下述运算法则(设A 、B 是复矩阵,λ为复数,且运算都是可行的): (1)+=+A B A B (2)λλ=A A (3)=AB AB 7、逆矩阵 方阵的逆矩阵满足下述运算规律: (1)若A 可逆,则1-A 亦可逆,且()11--=A A (2)若A 可逆,数0λ≠,则λA 可逆,且()111 λλ--=A A (3)若A 、B 为同阶矩阵且均可逆,则AB 亦可逆,且()111---=AB B A 参考文献: 【1】线性代数(第五版),同济大学

稀疏矩阵的乘法实现

稀疏矩阵的乘法实现 程序: 1# include 2# include 3# define NULL 0 4# define OK 1 5# define ERROR 0 6# define MAXSIZE 100 /* 矩阵中非零元的最大值 */ 7# define MAXRC 10 /* 矩阵的最大行值 */ 8 9typedef int status ; 10 11 /********** 稀疏矩阵的行逻辑链接的顺序表存储表示 **********/ 12 13typedef struct /* 非零元的三元组 */ 14{ 15int i, j ; /* 非零元的行下标和列下标 */ 16int e ; 17}Triple; 18 19typedef struct /* 稀疏矩阵的行逻辑链接的顺序表 */ 20{ 21 Triple data[MAXSIZE+1]; /* 非零三元组表,data[0] 未用,以下定义的数组都是从1开始 */ 22int rpos[MAXRC+1]; /* 代表各行第一个非零元的序号表,其值为data的下标 */ 23int mu,nu,tu; /* 矩阵的行数、列数、非零元的个数 */

24}RLSMatrix; /* R:row L:logic S:sequence */ 25 26 27 /********* 基本操作的函数原型的声明 *********/ 28 29status CreateSMatrix_RL(RLSMatrix * matrix); 30// 创建一个稀疏矩阵; 31// 输入行数、列数,支持乱序输入三元组,并计数; 32// 以行为主序进行重新排列,并记录每行起始位置于 matrix->rpos[row]; 33// 若非零元超过 MAXSIZE或行数超过MAXRC,则返回ERROR,否则OK; 34 35void PrintSMatrix_RL(RLSMatrix * matrix); 36// 输入矩阵,打印出矩阵的行数、列数、非零元个数,以及整个矩阵; 37 38status MultSMatrix_RL(RLSMatrix * M,RLSMatrix * N,RLSMatrix * Q); 39// 输入两个稀疏矩阵M和N,并初始化Q,然后计算M*N的值赋给Q; 40// 如果M->mu!=N->nu或列数大于MAXRC或者计算出的非零元个数大于MAXSIZE,都返回ERROR,否则OK; 41// 计算过程如下: 42// 1. 由于矩阵M和Q的行数相等并且C语言以行为主序进行存储,所以以M进行逐行的扫描。 43// 2. 使Q的此行逻辑表的序号等于其非零元个数Q.tu+1,以表示其行的首个元素的序号。

相关主题
文本预览
相关文档 最新文档