当前位置:文档之家› 数据结构实验(矩阵的运算)

数据结构实验(矩阵的运算)

数据结构实验(矩阵的运算)
数据结构实验(矩阵的运算)

数据结构报告矩阵的加减乘法

邱宙清

201113040415

数据结构习题(456章)

第四章串 一.选择题 1.若串S='software',其子串的数目是() A.8 B.37 C.36 D.9 2.设有两个串p和q,求q在p中首次出现的位置的运算称作() A.连接B.模式匹配C.求串长D.求子串 3.设字符串S1=“ABCDEFG”,S2=“PQRST”,则运算: S=CONCAT(SUBSTR(S1,2,LEN(S2));SUBSTR(S1,LEN(S2),2));后的串值为() A.A BCDEF B.BCDEFG C.BCDPQRST D. BCDEFEF 4.下面的说法中,只有()是正确的 A.串是一种特殊的线性表B.串的长度必须大于零 C.串中元素只能是字母D.空串就是空白串 5.两个字符串相等的条件是() A.两串的长度相等 B.两串包含的字符相同 C.两串的长度相等,并且两串包含的字符相同 D.两串的长度相等,并且对应位置上的字符相同 二.填空题 1.串“ababcbaababd”的next函数值为,nextval函数值为。2.子串的长度为。 第五章数组和广义表 一.选择题 1.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( ) A. BA+141 B. BA+180 C. BA+222 D. BA+225 2.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=() A. 808 B. 818 C. 1010 D. 1020 3.对稀疏矩阵进行压缩存储目的是() A.便于进行矩阵运算B.便于输入和输出C.节省存储空间D.降低运算的时间复杂度 4.假设以三元组表表示稀疏矩阵,则与如图所示三元组表对应的4×5的稀疏矩阵是(注:矩阵的行列下标均从1开始)()

(完整版)第二章矩阵及其运算作业及答案

第二部分 矩阵及其运算作业 (一)选择题(15分) 1.设,均为n 阶矩阵,且,则必有( )A B 22 ()()A B A B A B +-=-(A) (B) (C) (D) A B =A E =AB BA =B E =2.设,均为n 阶矩阵,且,则和( ) A B AB O =A B (A)至多一个等于零 (B)都不等于零 (C) 只有一个等于零 (D) 都等于零 3.设,均为n 阶对称矩阵,仍为对称矩阵的充分必要条件是( ) A B AB (A) 可逆 (B)可逆 (C) (D) A B 0AB ≠AB BA =4.设为n 阶矩阵,是的伴随矩阵,则=( ) A A *A A *(A) (B) (C) (D) 1n A -2n A -n A A 5.设,均为n 阶可逆矩阵,则下列公式成立的是( ) A B (A) (B) ()T T T AB A B =()T T T A B A B +=+(C) (D) 111()AB A B ---=111 ()A B A B ---+=+(二)填空题(15分) 1.设,均为3阶矩阵,且,则= 。 A B 1 ,32A B ==2T B A 2.设矩阵,,则= 。 1123A -?? = ???232B A A E =-+1B -3.设为4阶矩阵,是的伴随矩阵,若,则= 。 A A *A 2A =-A *4.设,均为n 阶矩阵,,则= 。 A B 2,3A B ==-12A B *-5.设,为整数,则= 。 101020101A ? ? ?= ? ??? 2n ≥12n n A A --(三)计算题(50分) 1. 设,,且,求矩阵。 010111101A ?? ?=- ? ?--??112053B -? ? ? = ? ??? X AX B =+X

数据结构实验8实验报告

暨南大学本科实验报告专用纸 课程名称数据结构实验成绩评定 实验项目名称习题6.37 6.38 6.39 指导教师孙世良 实验项目编号实验8 实验项目类型实验地点实验楼三楼机房学生姓名林炜哲学号2013053005 学院电气信息学院系专业软件工程 实验时间年月日午~月日午温度℃湿度(一)实验目的 熟悉和理解二叉树的结构特性; 熟悉二叉树的各种存储结构的特点及适用范围; 掌握遍历二叉树的各种操作及其实现方式。 理解二叉树线索化的实质是建立结点与其在相应序列中的前去或后继之间的直接联系,熟练掌握二叉树的线索化的过程以及在中序线索化树上找给定结点的前驱和后继的方法。 (二)实验内容和要求 6.37试利用栈的基本操作写出先序遍历的非递归形式的算法。 6.38同题6.37条件,写出后序遍历的非递归算法(提示:为分辨后序遍 历时两次进栈的不同返回点需在指针进栈时同时将一个标志进栈)。 6.39假设在二叉链表的结点中增设两个域:双亲域以指示其双亲结点; 标志域以区分在遍历过程中到达该结点时应继续向左或向右或访问该节点。试以此存储结构编写不用栈进行后序遍历的递推形式的算法。(三)主要仪器设备 实验环境:Microsoft Visual Studio 2012 (四)源程序

6.37: #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define TRUE 1 #define FALSE 0 typedef struct bitnode{ char data; struct bitnode *lchild,*rchild; }bitnode,*bitree; void create(bitree &T){ char t; t=getchar(); if(t==' ') T=NULL; else{ if( !( T=(bitnode*)malloc(sizeof(bitnode)) ) ) exit(0); T->data=t; create(T->lchild); create(T->rchild); } } typedef struct{ bitree *base; bitree *top; int stacksize; }sqstack; void initstack(sqstack &S){ S.base=(bitree*)malloc(STACK_INIT_SIZE *sizeof(bitree)); if(!S.base) exit(0); S.top=S.base; S.stacksize=STACK_INIT_SIZE; } void Push(sqstack &s,bitree e){ if(s.top - s.base >= s.stacksize){ s.base =

矩阵的运算及其运算规则

矩阵基本运算及应用 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的第列元素对应相乘,再取乘积之和.

数据结构实验报告(四)

《数据结构》实验报告 班级: 学号: 姓名:

实验四二叉树的基本操作实验环境:Visual C++ 实验目的: 1、掌握二叉树的二叉链式存储结构; 2、掌握二叉树的建立,遍历等操作。 实验内容: 通过完全前序序列创建一棵二叉树,完成如下功能: 1)输出二叉树的前序遍历序列; 2)输出二叉树的中序遍历序列; 3)输出二叉树的后序遍历序列; 4)统计二叉树的结点总数; 5)统计二叉树中叶子结点的个数; 实验提示: //二叉树的二叉链式存储表示 typedef char TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;

一、程序源代码 #include #include #define MAXSIZE 30 typedef char ElemType; typedef struct TNode *BiTree; struct TNode { char data; BiTree lchild; BiTree rchild; }; int IsEmpty_BiTree(BiTree *T) { if(*T == NULL) return 1; else return 0;

} void Create_BiTree(BiTree *T){ char ch; ch = getchar(); //当输入的是"#"时,认为该子树为空 if(ch == '#') *T = NULL; //创建树结点 else{ *T = (BiTree)malloc(sizeof(struct TNode)); (*T)->data = ch; //生成树结点 //生成左子树 Create_BiTree(&(*T)->lchild); //生成右子树 Create_BiTree(&(*T)->rchild); } } void TraverseBiTree(BiTree T) { //先序遍历 if(T == NULL) return;

矩阵及其运算测试题

第二章 矩阵及其运算测试题 一、选择题 1.下列关于矩阵乘法交换性的结论中错误的是( )。 (A)若A 是可逆阵,则1A -与1A -可交换; (B)可逆矩阵必与初等矩阵可交换; (C)任一n 阶矩阵与n cE 的乘法可交换,这里c 是常数; (D)初等矩阵与初等矩阵的乘法未必可交换。 2.设n (2n ≥)阶矩阵A 与B 等价,则必有( ) (A) 当A a =(0a ≠)时,B a =; (B)当A a =(0a ≠)时,B a =-; (C) 当0A ≠时,0B =; (D)当0A =时,0B =。 3.设A 、B 为方阵,分块对角阵00A C B ??= ??? ,则* C =( )。 (A) **00 A B ?? ??? (B) **||00 ||A A B B ?? ??? (C) **||00||B A A B ?? ??? (D) **||||0 0||||A B A A B B ?? ??? 4.设A 、B 是n (2n ≥)阶方阵,则必有( )。 (A)A B A B +=+ (B)kA k A = (C) A A B B =-g (D) AB A B = 5.设4阶方阵 44(),()||,ij A a f x xE A ?==-其中E 是4阶单位矩阵,则()f x 中3 x 的系数为( )。 (A)11223344()a a a a -+++ (B)112233112244223344113344a a a a a a a a a a a a +++ (C) 11223344a a a a (D)11223344a a a a +++ 6.设A 、B 、A B +、11A B --+均为n 阶可逆矩阵,则1()A B -+为( )。 (A) 11A B --+ (B) A B + (C) 111()A B ---+ (D)11111()B A B A -----+

求矩阵的基本运算

求矩阵的基本运算 #include #include void jiafa() { int m,n; float a[20][20],b[20][20],c[20][20]; int i,j; printf("请输入矩阵行数:"); scanf("%d",&m); printf("请输入矩阵列数:"); scanf("%d",&n); printf("请输入第一个矩阵:"); for(i=0; i

数据结构实验二叉树

实验六:二叉树及其应用 一、实验目的 树是数据结构中应用极为广泛的非线性结构,本单元的实验达到熟悉二叉树的存储结构的特性,以及如何应用树结构解决具体问题。 二、问题描述 首先,掌握二叉树的各种存储结构和熟悉对二叉树的基本操作。其次,以二叉树表示算术表达式的基础上,设计一个十进制的四则运算的计算器。 如算术表达式:a+b*(c-d)-e/f 三、实验要求 如果利用完全二叉树的性质和二叉链表结构建立一棵二叉树,分别计算统计叶子结点的个数。求二叉树的深度。十进制的四则运算的计算器可以接收用户来自键盘的输入。由输入的表达式字符串动态生成算术表达式所对应的二叉树。自动完成求值运算和输出结果。四、实验环境 PC微机 DOS操作系统或 Windows 操作系统 Turbo C 程序集成环境或 Visual C++ 程序集成环境 五、实验步骤 1、根据二叉树的各种存储结构建立二叉树; 2、设计求叶子结点个数算法和树的深度算法; 3、根据表达式建立相应的二叉树,生成表达式树的模块; 4、根据表达式树,求出表达式值,生成求值模块; 5、程序运行效果,测试数据分析算法。 六、测试数据 1、输入数据:*(+)3 正确结果: 2、输入数据:(1+2)*3+(5+6*7);

正确输出:56 七、表达式求值 由于表达式求值算法较为复杂,所以单独列出来加以分析: 1、主要思路:由于操作数是任意的实数,所以必须将原始的中缀表达式中的操作数、操作符以及括号分解出来,并以字符串的形式保存;然后再将其转换为后缀表达式的顺序,后缀表达式可以很容易地利用堆栈计算出表达式的值。 例如有如下的中缀表达式: a+b-c 转换成后缀表达式为: ab+c- 然后分别按从左到右放入栈中,如果碰到操作符就从栈中弹出两个操作数进行运算,最后再将运算结果放入栈中,依次进行直到表达式结束。如上述的后缀表达式先将a 和b 放入栈中,然后碰到操作符“+”,则从栈中弹出a 和b 进行a+b 的运算,并将其结果d(假设为d)放入栈中,然后再将c 放入栈中,最后是操作符“-”,所以再弹出d和c 进行d-c 运算,并将其结果再次放入栈中,此时表达式结束,则栈中的元素值就是该表达式最后的运算结果。当然将原始的中缀表达式转换为后缀表达式比较关键,要同时考虑操作符的优先级以及对有括号的情况下的处理,相关内容会在算法具体实现中详细讨论。 2、求值过程 一、将原始的中缀表达式中的操作数、操作符以及括号按顺序分解出来,并以字符串的 形式保存。 二、将分解的中缀表达式转换为后缀表达式的形式,即调整各项字符串的顺序,并将括 号处理掉。 三、计算后缀表达式的值。 3、中缀表达式分解 DivideExpressionToItem()函数。分解出原始中缀表达式中的操作数、操作符以及括号,保存在队列中,以本实验中的数据为例,分解完成后队列中的保存顺序如下图所示:

GE矩阵+计算方法+案例(一班三组)

GE矩阵法及其使用方法介绍 一、GE矩阵法概述 GE矩阵法又称通用电器公司法、麦肯锡矩阵、九盒矩阵法、行业吸引力矩阵是美国通用电气公司(GE)于70年代开发了新的投资组合分析方法。对企业进行业务选择和定位具有重要的价值和意义。GE矩阵可以用来根据事业单位在市场上的实力和所在市场的吸引力对这些事业单位进行评估,也可以表述一个公司的事业单位组合判断其强项和弱点。在需要对产业吸引力和业务实力作广义而灵活的定义时,可以以GE矩阵为基础进行战略规划。按市场吸引力和业务自身实力两个维度评估现有业务(或事业单位),每个维度分三级,分成九个格以表示两个维度上不同级别的组合。两个维度上可以根据不同情况确定评价指标。 二、方格分析计算方法介绍: GE矩阵可以用来根据事业单位在市场上的实力和所在市场的吸引力对这些事业 单位进行评估,也可以表述一个公司的事业单位组合判断其强项和弱点。在需要 对产业吸引力和业务实力作广义而灵活的定义时,可以以GE矩阵为基础进行战 略规划。按市场吸引力和业务自身实力两个维度评估现有业务(或事业单位),

每个维度分三级,分成九个格以表示两个维度上不同级别的组合。两个维度上可以根据不同情况确定评价指标。 绘制GE矩阵,需要找出外部(行业吸引力)和内部(企业竞争力)因素,然后对各因素加权,得出衡量内部因素和市场吸引力外部因素的标准。当然,在开始搜集资料前仔细选择哪些有意义的战略事业单位是十分重要的。 1. 定义各因素。选择要评估业务(或产品)的企业竞争实力和市场吸引力所需的重要 因素。在GE内部,分别称之为内部因素和外部因素。下面列出的是经常考虑的一些因素(可能需要根据各公司情况作出一些增减)。确定这些因素的方法可以采取头脑风暴法或名义群体法等,关键是不能遗漏重要因素,也不能将微不足道的因素纳人分析中。 2. 估测内部因素和外部因素的影响。从外部因素开始,纵览这张表(使用同一组经理), 并根据每一因素的吸引力大小对其评分。若一因素对所有竞争对手的影响相似,则对其影响做总体评估,若一因素对不同竞争者有不同影响,可比较它对自己业务的影响和重要竞争对手的影响。在这里可以采取五级评分标准(1=毫无吸引力,2=没有吸引力,3=中性影响,4=有吸引力,5=极有吸引力)。然后也使用5级标准对内部因素进行类似的评定(1=极度竞争劣势,2=竞争劣势,3=同竞争对手持平,4=竞争优势,5=极度竞争优势),在这一部分,应该选择一个总体上最强的竞争对手做对比的对象。 具体的方法是:- 确定内外部影响的因素,并确定其权重- 根据产业状况和企业状况定出产业吸引力因素和企业竞争力因素的级数(五级)- 最后,用权重乘以级数,得出每个因素的加权数,并汇总,得到整个产业吸引力的加权值 下面分别用折线图和表格两种形式来表示。

MATLAB矩阵运算基础练习题

第2章 MATLAB 矩阵运算基础 2.1 在MA TLAB 中如何建立矩阵?? ?? ??194375,并将其赋予变量a ? 2.2 请产生一个100*5的矩阵,矩阵的每一行都是[1 2 3 4 5] 2.3产生一个1x10的随机矩阵,大小位于(-5 5) 2.2 有几种建立矩阵的方法?各有什么优点? 可以用四种方法建立矩阵: ①直接输入法,如a=[2 5 7 3],优点是输入方法方便简捷; ②通过M 文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改; ③由函数建立,如y=sin(x),可以由MATLAB 的内部函数建立一些特殊矩阵; ④通过数据文件建立,该方法可以调用由其他软件产生数据。 2.3 在进行算术运算时,数组运算和矩阵运算各有什么要求? 进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a 与b 相乘(a*b )时必须满足a 的列数等于b 的行数。 2.4 数组运算和矩阵运算的运算符有什么区别? 在加、减运算时数组运算与矩阵运算的运算符相同,乘、除和乘方运算时,在矩阵运算的运算符前加一个点即为数组运算,如a*b 为矩阵乘,a.*b 为数组乘。 2.5 计算矩阵??????????897473535与???? ??????638976242之和,差,积,左除和右除。 2.6 求?? ?? ??+-+-+-+-++=i 44i 93i 49i 67i 23i 57i 41i 72i 53i 84x 的共轭转置。 2.7 计算???? ??=572396a 与??????=864142b 的数组乘积。 2.8 “左除”与“右除”有什么区别? 在通常情况下,左除x=a\b 是a*x=b 的解,右除x=b/a 是x*a=b 的解,一般情况下,a\b ≠b/a 。 2.9 对于B AX =,如果??????????=753467294A ,???? ??????=282637B ,求解X 。 2.10 已知:???? ??????=987654321a ,分别计算a 的数组平方和矩阵平方,并观察其结果。 2.11 ??????-=463521a ,?? ????-=263478b ,观察a 与b 之间的六种关系运算的结果。

数据结构实验三实验报告

三题目:哈夫曼编/译码器 班级:姓名:学号:完成日期:15.11.14 一、题目要求 描述:写一个哈夫曼码的编/译码系统,要求能对要传输的报文进行编码和解码。构造哈夫曼树时,权值小的放左子树,权值大的放右子树,编码时右子树编码为1,左子树编码为0. 输入:输入表示字符集大小为n(n <= 100)的正整数,以及n个字符和n个权值(正整数,值越大表示该字符出现的概率越大); 输入串长小于或等于100的目标报文。 输出:经过编码后的二进制码,占一行; 以及对应解码后的报文,占一行; 最后输出一个回车符。 输入样例: 5 a b c d e 12 40 15 8 25 bbbaddeccbbb 输出样例: 00011111110111010110110000 bbbaddeccbbb 提示:利用编码前缀性质。 二、概要设计 1.设计需要的数据结构:树型结构 2.需要的抽象数据类型: ADT Tree{ 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R:若D为空集,则称为空树; 若D仅含有一个数据元素,则R为空集,否则R={H},H是如下二元关系: (1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2) 若D-{root}≠NULL,则存在D-{root}的一个划分D1,D2,D3,…,Dm(m>0),对于任意j≠k(≤j,k≤m)有Dj∩Dk=NULL,且对任意的i(1≤i≤m),唯一存在数据元素xi?Di有?H; (3) 对应于D-{root}的划分,H-{,…,}有唯一的一个划分H1,H2,…,Hm(m>0),对任意j≠k(1≤j,k≤m)有Hj∩Hk=NULL,且对任意i(1≤i≤m),Hi是Di上的二元关系,(Di,{Hi}) 是一棵符合本定义的树,称为根root的子树。 基本操作: InitTree(&T); 操作结果:构造空树T。

数学实验矩阵的运算doc资料

数学实验矩阵的运算

数学实验报告 学院: 班级: 学号: 姓名: 完成日期:

实验四矩阵的运算 (一)投入产出分析 一.实验目的 1.理解投入产出分析中的基本概念和模型; 2.从数学和投入产出理论的角度,理解矩阵乘法、逆 矩阵等的含义。 二.问题描述 设国民经济由农业、制造业和服务业三个部门构成,已知某年它们之间的投入产出关系、部需求、初始投入等如表1-1所示 表1-1国民经济三产部门之间的投入产出表 根据表回答下列问题: (1)如果农业、制造业、服务业外部需求为 50,150,100,问三个部门总产出分别为多少? (2)如果三个部门的外部需求分别增加一个单位,问他们的总产出分别为多少? 三.实验过程

1.问题(1)的求解 (1)求直接消耗矩阵A 根据直接消耗的计算公式 a ij=x ij/x j 和各部门中间需求; x n a n 运行如下代码可得直接消耗系数表。 X=[15 20 30;30 10 45;20 60 0]; X_colsum=[100 200 150]; X_rep=repmat(X_colsum,3,1) A=X./ X_rep 运行结果为: A = 0.1500 0.1000 0.2000 0.3000 0.0500 0.3000 0.2000 0.3000 0 (2)求解 根据公式 X=(I-A)-1y 在运行如下代码 y=[50;150;100]; n=size(y,1);

W=eye(n)-A; X=W\y 运行结果为 X = 139.2801 267.6056 208.1377 即三个部门的总产出分别为139.2801,267.6056, 208.1377亿元。 2.问题2求解 设外部需求由y增加至y+Δy,则产出x的增量为Δx=(I-A)-1(y+Δy)- (I-A)-1y=(I-A)-1Δy 利用问题(1)求得的I-A矩阵,再运行如下的MATLAB代码可得问题的结果: dx=inv(W) 运行结果: dx = 1.3459 0.2504 0.3443 0.5634 1.2676 0.4930 0.4382 0.4304 1.2167 根据上述结果可知,当农业的外部需求增加1个单位时,农业、制造业、服务业的总产出分别增加

线性代数论文设计(矩阵在自己专业中地应用及举例)

矩阵在自己专业中的应用及举例

摘要: I、矩阵是线性代数的基本概念,它在线性代数与数学的许多分支中都有重要的应用,许多实际问题可以用矩阵表达并用相关的理论得到解决。 II、文中介绍了矩阵的概念、基本运算、可逆矩阵、矩阵的秩等容。 III、矩阵在地理信息系统中也有许多的应用,比如文中重点体现的在计算机图形学中应用。 关键词: 矩阵可逆矩阵图形学图形变换 正文: 第一部分引言 在线性代数中,我们主要学习了关于行列式、矩阵、方程、向量等相关性比较强的容,而这些容在我们专业的其他一些学科中应用也是比较广泛的,是其它一些学科的很好的辅助学科之一。因此,能够将我们所学的东西融会贯通是一件非常有意义的事,而且对我们的学习只会有更好的促进作用。在计算机图形学中矩阵有一些最基本的应有,但是概念已经与线性代数中的有一些不同的意义。在计算机图形学中,矩阵可以是一个新的额坐标系,也可以是对一些测量点的坐标变换,例如:平移、错切等等。在后面的文章中,我通过查询一些相关的资料,对其中一些容作了比较详细的介绍,希望对以后的学习能够有一定的指导作用。在线性代数中,矩阵也占据着一定的重要地位,

与行列式、方程、向量、二次型等容有着密切的联系,在解决一些问题的思想上是相同的。尤其他们在作为处理一些实际问题的工具上的时候。 图形变换是计算机图形学领域的主要容之一,为方便用户在图形交互式处理过程中度图形进行各种观察,需要对图形实施一系列的变换,计算机图形学主要有以下几种变换:几何变换、坐标变换和观察变换等。这些变换有着不同的作用,却又紧密联系在一起。 第二部分 研究问题及成果 1. 矩阵的概念 定义:由n m ?个数排列成的m 行n 列的矩阵数表 ????? ???????ann an an n a a a n a a a ΛM ΛM M K Λ212222111211 称为一个n m ?矩阵,其中an 表示位于数表中第i 行第j 列的数,i=1,2,3,…n ,又称为矩阵的元素。A,B 元素都是实数的矩阵称为实矩阵。元素属于复数的矩阵称为复矩阵。 下面介绍几种常用的特殊矩阵。 (1)行距阵和列矩阵 仅有一行的矩阵称为行距阵(也称为行向量),如 A=(a11 a12 .... a1n), 也记为 a=(a11,a12,.....a1n). 仅有一列的矩阵称为列矩阵(也称为列向量),如

数据结构-实验五-图

数据结构与算法课程实验报告实验五:图的相关算法应用 姓名:cll 班级: 学号:

【程序运行效果】 一、实验内容: 求有向网络中任意两点之间的最短路 实验目的: 掌握图和网络的定义,掌握图的邻接矩阵、邻接表和十字链表等存储表示。掌握图的深度和广度遍历算法,掌握求网络的最短路的标号法和floyd算法。 二、问题描述: 对于下面一张若干个城市以及城市间距离的地图,从地图中所有可能的路径中求出任意两个城市间的最短距离及路径,给出任意两个城市间的最短距离值及途径的各个城市。 三、问题的实现: 3.1数据类型的定义 #define MAXVEX 50 //最大的顶点个数 #define MAX 100000 typedef struct{ char name[5]; //城市的名称

}DataType; //数据结构类型 typedef struct{ int arcs[MAXVEX][MAXVEX]; //临接矩阵 DataType data[MAXVEX]; //顶点信息 int vexs; //顶点数 }MGraph,*AdjMetrix; //邻接矩阵表示图 3.2主要的实现思路: 用邻接矩阵的方法表示各城市直接路线的图,之后用Floyd算法求解两点直接的最短距离,并用递归的方法求出途经的城市。 主要源程序代码: #include #include #define MAXVEX 50 #define MAX 100000 typedef struct{ char name[5]; //城市的名称 }DataType; //数据结构类型 typedef struct{ int arcs[MAXVEX][MAXVEX]; //临接矩阵 DataType data[MAXVEX]; //顶点信息 int vexs; //顶点数 }MGraph,*AdjMetrix; //创建临接矩阵 void CreatGraph(AdjMetrix g,int m[][MAXVEX],DataType d[],int n){ /*g表示邻接矩阵,m[][MAXVEX]表示输入的邻接矩阵,d[]表示各城市的名称,n表示城市数目*/ int i,j; g->vexs = n; for(i=0;i < g->vexs;i++){ g->data[i] = d[i]; for(j=0;jvexs;j++){ g->arcs[i][j] = m[i][j]; } } } //求最短路径 void Floyd(AdjMetrix g,int F[][10],int path[][10]){ int i,j,k; for(i=0;ivexs;i++){ for(j=0;jvexs;j++){

矩阵的运算实例程序

设计一个矩阵相乘的程序 假设有 1 5 7 3 3 9 1 4 1 4 A= 3 6 3 9 B= 5 6 7 9 0 3 1 2 8 7 3 2 7 2 5 6 0 3 1 9 9 7 4 7 8 0 3 2 5 4 求出A*B的矩阵 程序构思: 我们所知的矩阵乘法运算的算式如下: C ij = A ik X B kj的k从1到n 的和,那么可以用一个3层循环来运算此算式: C(1,1)=A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1)+A(1,4)*B(4,1) =(1*3)+(5*5)+(7*3)+(3*9) =3+25+21+27 =76 同理 C(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2)+A(1,4)*B(2,2) =(1*9)+(5*6)+(7*2)+(3*7) =9+30+14+21 =74 依此类推,我们可以求得矩阵A与矩阵B的矩阵乘积。 void main(void) { int matrixa[5][4]={1,5,7,3, 3,6,3,9, 1,2,8,7, 0,3,1,9, 3,2,5,4}; int matrixb[4][6]={3,9,1,4,1,4, 5,6,7,9,0,3, 3,2,7,2,5,6, 9,7,4,7,8,0}; int matrixc[5][6]; int i,j,k; for(i=0;i<5;i++) for(j=0;j<6;j++) { matrixc[i][j]=0; for(k=0;k<4;k++) matrixc[i][j]+=matrixa[i][k]*matrixb[k][j];

matlab中的矩阵的基本运算命令

1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数diag 格式X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。 X = diag(v) %以v为主对角线元素,其余元素为0构成X。 v = diag(X,k) %抽取X的第k条对角线元素构成向量v。k=0:抽取主对角线元素;k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。 v = diag(X) %抽取主对角线元素构成向量v。 2.上三角阵和下三角阵的抽取 函数tril %取下三角部分 格式L = tril(X) %抽取X的主对角线的下三角部分构成矩阵L L = tril(X,k) %抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。函数triu %取上三角部分 格式U = triu(X) %抽取X的主对角线的上三角部分构成矩阵U U = triu(X,k) %抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。 (1)“:”变维 (2)Reshape函数变维 格式 B = reshape(A,m,n) %返回以矩阵A的元素构成的m×n矩阵B B = reshape(A,m,n,p,…) %将矩阵A变维为m×n×p×… B = reshape(A,[m n p…]) %同上 B = reshape(A,siz) %由siz决定变维的大小,元素个数与A中元素个数 相同。 (5)复制和平铺矩阵 函数repmat 格式 B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。 B = repmat(A,[m n]) %与上面一致 B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成 repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。 1.3 矩阵分解 1.3.1 Cholesky分解 函数chol 格式R = chol(X) %如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。 [R,p] = chol(X) %不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。 1.3.2 LU分解

数据结构实验四五六

数据结构实验 实验四、图遍历的演示。 【实验学时】5学时 【实验目的】 (1)掌握图的基本存储方法。 (2)熟练掌握图的两种搜索路径的遍历方法。 【问题描述】 很多涉及图上操作的算法都是以图的遍历操作为基础的。试写一个程序,演示连通的无向图上,遍历全部结点的操作。 【基本要求】 以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。 【测试数据】 教科书图7.33。暂时忽略里程,起点为北京。 【实现提示】 设图的结点不超过30个,每个结点用一个编号表示(如果一个图有n个结点,则它们的编号分别为1,2,…,n)。通过输入图的全部边输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制。注意,生成树的边是有向边,端点顺序不能颠倒。

【选作内容】 (1)借助于栈类型(自己定义和实现),用非递归算法实现深度优先遍历。(2)以邻接表为存储结构,建立深度优先生成树和广度优先生成树,再按凹入表或树形打印生成树。 (3)正如习题7。8提示中分析的那样,图的路径遍历要比结点遍历具有更为广泛的应用。再写一个路径遍历算法,求出从北京到广州中途不过郑州的所有简单路径及其里程。 【源程序】 #include #include #include #define MAX_VERTEX_NUM 20 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define TRUE 1 #define OK 1 #define FALSE 0 #define ERROR 0 #define OVERFLOW -2 typedef enum{DG,DN,UDG,UDN}GraphKind;//{有向图,有向网,无向图,无向网} bool visited[MAX_VERTEX_NUM];

数据结构实验四

贵州大学实验报告 学院:计信学院专业:通信工程班级:通信091 姓名何川学号0908060235 实验 组实验时间2011.12、 指导教 师 陈静成绩实验项目名称二叉树操作 实 验目的1、熟悉二叉树结点的结构和对二叉树的基本操作及具体实现。 2、利用递归方法编写对二叉树的各种遍历算法。 3、掌握递归方法在二叉树中的使用。 实验要求1、认真阅读和掌握本实验内容所给的全部程序。 2、在Visual C++6.0集成开发环境下编写和调试所有程序。 3、编写的所有算法须给出测试函数,并自行设计测试数据,对算法进行测试。 4、保存和打印出程序运行结果,并结合程序进行分析。 5、按照你对二叉树操作的需要,重新改写主文件并运行,打印出主文件清单 和运行结果。 实验原理Visual C++的编译环境下,独立完成实验要求的内容,独立完成编写、编以运行。 实 验 仪 器 安装了VC++6.0的PC机

实验步骤1、实现二叉树结点的定义和操作。该程序包括一个头文件,用来存储定义二 叉树结构类型以及对二叉树进行各种操作的函数声明;第二个为操作的实现文件,用来存储每一种操作的具体函数定义以及主函数。二叉树的操作包括二叉树初始化、创建二叉树,判断二叉树是否为空,求二叉树的深度和结点数,遍历二叉树等。 2、已知二叉树的前序遍历序列和中序遍历序列,编写可唯一确定该二叉树的 算法。 3、根据所给的n个带权叶子结点,编写算法构造哈夫曼树和哈夫曼编码。 实验内容(1)typedef char ElemType; struct BTreeNode{ ElemType data; BTreeNode *left; BTreeNode *right; }; void InitBTree(BTreeNode *&BT); void CreatBTree(BTreeNode *&BT,char *a); bool EmptyBTree(BTreeNode *BT); void TraverseBTree(BTreeNode *BT); int BTreeDepth(BTreeNode *BT); int BTreeCount(BTreeNode &BT); void PrintBTree(BTreeNode *BT); #include #include using namespace std; void InitBTree(BTreeNode *&BT){ BT=NULL; } void CreatBTree(BTreeNode *&BT,char *a){ const int MaxSize=100; BTreeNode *s[MaxSize]; int top=-1; BT=NULL; BTreeNode *p; int k; int i=0; while(a[i]){ switch(a[i]){ case ' ': break; case '(': if(top==MaxSize-1){ cout<<"栈空间不够,请重新分配栈空间!"<

数据结构实验四概览

数据结构实验四 1.实验要求 置换-选择排序的实现 【问题描述】 对文件中的记录的关键字采用外部排序的置换-选择算法实现。 【实验要求】 设计置换-选择排序的模拟程序。 (1)记录存储在文件中。 (2)采用多路归并算法实现。 (3)采用置换-选择算法实现。

2实验描述 外部排序过程中,为了减少外存读写次数需要减小归并趟数(外部排序的过程中用到归并),外部排序1(其中k为归并路数,n为归并段的个数)。增加k和减小n都可以达到减小归并趟数的目的。置换-选择排序就是一种减小n的、在外部排序中创建初始归并段时用到的算法。它可以让初始归并段的长度增减,从而减小初始归并段的段数(因为总的记录数是一定的)。 置换-选择排序是在树形选择排序的基础上得来的,它的特点是:在整个排序(得到初始归并段)的过程中,选择最小(或最大)关键值和输入、输出交叉或并行进行。它的主要思路是:用败者树从已经传递到内存中的记录中找到关键值最小(或最大)的记录,然后将此记录写入外存,再将外存中一个没有排序过的记录传递到内存(因为之前那个记录写入外存后已经给它空出内存),然后再用败者树的一次调整过程找到最小关键值记录(这个调整过程中需要注意:比已经写入本初始归并段的记录关键值小的记录不能参见筛选,它要等到本初始段结束,下一个初始段中才可以进行筛选),再将此最小关键值记录调出,再调入新的记录.......依此进行指导所有记录已经排序过。内存中的记录就是所用败者树的叶子节点。开发环境:VC6.0。 3.置换-选择排序的实现 //A是从外存读入n个元素后所存放的数组 template void replacementSelection(Elem * A, int n, const char * in, const char * out){ Elem mval; //存放最小堆的最小值 Elem r; //存放从输入缓冲区中读入的元素 FILE * iptF; //输入文件句柄 FILE * optF; //输出文件句柄 Buffer input; //输入buffer Buffer output; // 输出buffer //初始化输入输出文件 initFiles(inputFile, outputFile, in, out); //初始化堆的数据,读入n个数据 initMinHeapArry(inputFile, n, A); //建立最小值堆 MinHeap H(A, n, n); //初始化inputbuffer,读入部分数据 initInputBuffer(input, inputFile); for(int last = (n-1); last >= 0;){ mval = H.heapArray[0]; //堆的最小值 sendToOutputBuffer(input,output,iptF,optF, mval); input.read(r); //从输入缓冲区读入一个记录 if(!less(r, mval)) H.heapArray[0] = r; else {//否则用last位置记录代替根结点,把r放到last H.heapArray[0] = H.heapArray[last]; H.heapArray[last] = r;

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