文档库 最新最全的文档下载
当前位置:文档库 › EPZn(R)EPPUR

EPZn(R)EPPUR

EPZn(R)EPPUR
EPZn(R)EPPUR

c语言实现矩阵的相关操作

算法分析与设计课程论文 —通过C语言实现矩阵的相关操作

一.摘要 本文在Microsoft Visual Studio 2010的编译环境下,通过C语言进行一些矩阵的基本操作,包括矩阵的设置,加减乘除,数乘运算。求矩阵的逆等操作。 关键词 矩阵 C语言逆矩阵 二.正文 1.引言 矩阵的相关知识只是是高等数学的基础,但是其庞大的运算量和纷繁的步骤让人却步。虽然有Matlab等软件可以实现矩阵的相关操作,但是我校一些专业并不学习数学实验,故通过C语言实现矩阵的操作也是一种可行的方法,本文列举的了一些矩阵的加减乘除等基本运算规则,还有对矩阵进行转置,也有矩阵求逆的相关操作。 同时,还介绍了行列式的计算,通过运行该程序,可以大大简化行列式的计算量。 2.算法分析

矩阵的初始化 相关概念 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。对一些应用广泛而形式特殊的矩阵,例如稀疏矩阵和准对角矩阵,有特定的快速运算算法。 理论分析 在C语言中,可以使用二维数组来描绘一个矩阵。值得注意的是,在二维数组中,必须标明列数,否则编译器就会报错。故二维极其多维数组使用时要注意数组下标。 代码实现

#include int main() { int juzheng [100][100]; int i , j , a , b ; printf("请输入矩阵的行数a 列数b \n") ; scanf ("%d %d",&a,&b); for (i = 0;i < a ;i++) { for (j = 0;j < b ;j++) { scanf ("%d",&juzheng[i][j]); } } printf ("你所输入的矩阵是:\n"); for (i = 0;i < a ;i++) { for (j = 0;j < b ;j++) { printf("%d ",juzheng[i][j]); } printf ("\n"); } return 0; } 矩阵的相加 相关概念

基本操作矩阵

基本操作—矩阵(1) 开始学习这部分内容前,我们先来回顾一下矩阵的都有哪些运算呢? 一、加法、减法 想一想:两个矩阵相加有什么条件 二、乘法 想一想:矩阵的乘法有什么规则? 三、矩阵的转置 转置运算的输入:按快捷键Ctrl+1,或直接单击Matrix工具板上的工具按钮. 四、矩阵的行列式 注意:只有方阵才可求行列式 求行列式的运算符的输入:利用快捷键| 或单击Matrix工具板上的按钮. 五、矩阵的逆矩阵 1、回顾学过的高等代数知识: (1)逆矩阵的定义是什么? (2)怎样的矩阵才有逆矩阵? 2.求逆运算符的输入:看成-1次方输入或单击Matrix工具板上的按钮 六、向量的运算 1、向量的加法、减法 2、向量的乘法 (1)回顾解析几何知识,两个向量的乘法有哪些? (2)点乘(数量积、内积) 与矩阵类似直接输入键盘乘号,或单击Matrix工具板上的按钮;其结果为一数字。例:定义两个向量 则它们的内积为 (3)叉乘(向量积、外积) 叉乘运算符的输入:通过快捷键Ctrl+8或单击Matrix工具板上的按钮。叉乘的结果是一个向量。例如u与v的外积为:

3、向量的模 (1)回顾:解析几何知识中向量的模怎么计算呢?(若 () a x,y,z =r ,则222|a|x y z =++r ) 在高等代数中:若向量,则 222 12n ||x x x α=+++L (2)向量的模运算:利用快捷键 | 或单击Matrix 工具板上的 按钮. 例: 根据向量模的定义进行验证: 补充:Matrix 工具板上的 按钮是对向量求其各个分量之和,即对向量 ,单击所得结果为 1 2 n x x x α=+++∑L

稀疏矩阵基本操作实验报告

稀疏矩阵基本操作实验报告 一、实验内容 稀疏矩阵的压缩储存结构,以及稀疏矩阵的三元组表表示方法下的转置、相加、相 乘等算法 二、实验目的 1. 熟悉数组、矩阵的定义和基本操作 2. 熟悉稀疏矩阵的储存方式和基本运算 3. 理解稀疏矩阵的三元组表类型定义,掌握稀疏矩阵的输入、输出和转置算法 三、实验原理 1. 使用三元组储存矩阵中的非零元素(三元组分别储存非零元素的行下标,列下标和 元素值)。除了三元组表本身,储存一个稀疏矩阵还需要额外的三个变量,分别储 存矩阵的非零元个数,矩阵的行数和矩阵的列数。 2. 稀疏矩阵的创建算法: 第一步:根据矩阵创建一个二维数组,表示原始矩阵 第二步:取出二维数组中的元素(从第一个元素开始取),判断取出元素是否为非零元素,如果为非零元素,把该非零元素的数值以及行下标和列下表储存到三元数 组表里,否则取出下一个元素,重复该步骤。 第三步:重复第二步,知道二维数组中所有的元素已经取出。 3. 稀疏矩阵倒置算法:

第一步:判断进行倒置的矩阵是否为空矩阵,如果是,则直接返回错误信息。 第二步:计算要倒置的矩阵每列非零元素的数量,存入到num 数组(其中num[i] 代表矩阵中第i 列非零元素的个数)。以及倒置后矩阵每行首非零元的位置,存入cpot 数组中(其中cpot 表示倒置后矩阵每行非零元的位置,对应表示原矩阵每列中第 一个非零元的位置)。 第三步:确定倒置后矩阵的行数和列数。 第四步:取出表示要导致矩阵中三元组表元素{e, I, j} (第一次取出第一个,依次取出下一个元素),从第二步cpot 数组中确定该元素倒置后存放的位置(cpot[j] ),把该元素的行下标和列下标倒置以后放入新表的指定位置中。cpot[j] 变量加一。 第五步:重复第四步,直到三元组表中所有的元素都完成倒置。 第六步:把完成倒置运算的三元组表输出。 4. 稀疏矩阵加法算法: 第一步:检查相加两个矩阵的行数和列数是否相同,如果相同,则进入第二步,否 则输出错误信息。 第二步:定义变量i 和j,用于控制三元组表的遍历。 第三步:比较变量矩阵M 中第i 个元素和矩阵N 中第j 个元素,如果两个元素是同一行元素,如果不是则进入第四步,如果是,再继续比较两个元素是否为同一列元 素,如果是,把两个元素值相加,放到三元组表中;否则把列下表小的元素依次放 到三元组表中。进入第五步 第四步:如果矩阵M 中第i 个元素的行下标大于矩阵N 中第j 个元素的行下标,则把矩阵N 中第j 个元素所在行的所有非零元素添加到三元组表中;如果矩阵M 中第

matlab矩阵表示和简单操作

matlab矩阵的表示和简单操作 一、矩阵的表示在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”。”(或回车符)隔开; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 2、利用MATLAB函数创建矩阵基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。 3、利用文件建立矩阵当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。二、矩阵的简单操作 1.获取矩阵元素可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储。 序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。 2.矩阵拆分利用冒号表达式获得子矩阵: (1) A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。 (2) A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m 列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。此外,还可利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。利用空矩阵删除矩阵的元素:在MATLAB中,定义[]为空矩阵。给变量

MATLAB(1)-矩阵的基本操作

第二章 MATLAB 基础知识上机练习题目 (1)矩阵的基本操作 一、 答卷形式:新建一个word 文档,将以下每道练习题使用的命令(或程 序)及其结果按顺序排列在该word 文档中,文档中必须写上自己的名字和学号,并以自己的名字命名,最后提交word 文档。 二、 练习题目: 1、 生成一个3×3的矩阵A ,它的元素为你任意指定的9个不同的正整数,计算A 的行列式A 并将其赋值给变量b ,若b ≠0,求出矩阵B =1A -。若b =0,重新选择A 。 将所生成的矩阵A 及B 连在一起,构成一个3×6的矩阵,并付给变量C ,在workspace 中观察C 的类型、大小以及当前值。并用save 命令将C 存储为一个数据文件以备下列题目利用Load 命令调用; 2、 利用load 命令调出C 并取出它的1-2行,2-4列的子块,另存为一个2×3的矩阵d ,生成一个与d 相同大小的随机矩阵矩阵e ,计算d +e , d -e ,e d '*,d .*e , ()5 e d ' ,将e d '*结果中所有的对角线元素全部换为0.5。 3、 完成下列计算: 4、

4、利用rand(4,6)命令生成一个随机矩阵T,求T的矩阵大小,每一行、 每一列的最大值和最小值,整个矩阵的最大值与最小值;然后将整个矩阵的最大值所在位置的元素换为1000,将最小值所在位置的元素取为-1000。 >> T=rand(4,6) T = 0.8143 0.1966 0.3517 0.9172 0.3804 0.5308 0.2435 0.2511 0.8308 0.2858 0.5678 0.7792 0.9293 0.6160 0.5853 0.7572 0.0759 0.9340 0.3500 0.4733 0.5497 0.7537 0.0540 0.1299 >> RowMax=max(T) //每一列的最大值 RowMax = 0.9293 0.6160 0.8308 0.9172 0.5678 0.9340 >>k=T' //转秩后,求每一列的最大值就是原矩阵每行的最大值 k = 0.8143 0.2435 0.9293 0.3500 0.1966 0.2511 0.6160 0.4733 0.3517 0.8308 0.5853 0.5497 0.9172 0.2858 0.7572 0.7537 0.3804 0.5678 0.0759 0.0540 0.5308 0.7792 0.9340 0.1299 LineMax=max(k)

R的矩阵操作

1 矩阵基本操作 1.1创建向量 R里面有多种方法来创建向量(Vector),最简单的是用函数c()。例如: >X=c(1,2,3,4) >X [1] 1 2 3 4 当然,还有别的方法。例如: >X=1:4 >X [1] 1 2 3 4 还有seq()函数。例如: > X=seq(1,4,length=4) > X [1] 1 2 3 4 注意一点,R中的向量默认为列向量,如果要得到行向量需要对其进行转置。 1.2创建矩阵 R中创建矩阵的方法也有很多。大致分为直接创建和由其它格式转换两种方法。 1.2.1直接创建矩阵 最简单的直接创建矩阵的方法是用matrix()函数,matrix()函数的使用方法如下: > args(matrix) function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) NULL 其中,data参数输入的为矩阵的元素,不能为空;nrow参数输入的是矩阵的行数,默认为1;ncol参数输入的是矩阵的列数,默认为1;byrow参数控制矩阵元素的排列方式,TRUE 表示按行排列,FALSE表示按列排列,默认为FALSE;dimnames参数输入矩阵的行名和列名,可以不输入,系统默认为NULL。例如: > matrix(1:6,nrow=2,ncol=3,byrow=FALSE) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 改变矩阵的行数和列数: > matrix(1:6,nrow=3,ncol=2,byrow=FALSE) [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 改变byrow参数: > matrix(1:6,nrow=3,ncol=2,byrow=T) [,1] [,2] [1,] 1 2 [2,] 3 4 [3,] 5 6 设定矩阵的行名和列名:

矩阵操作

淮阴工学院 C++程序设计课程设计报告 选题名称:矩阵操作 系(院):计算机工程系 专业:计算机科学与技术(信息安全方向)班级: ********* 姓名: ****** 学号: ********** 指导教师:于永彦 学年学期:2007 ~ 2008 学年第 2 学期二〇〇八年六月十四日

设计任务书 指导教师(签章): 年月日 1

摘要: 编写代码,实现矩阵的翻转功能、卷动功能和旋转功能。运行程序后,随机生成一个元素为三位正整数的5×5矩阵。矩阵翻转,本课程设计只考虑沿中心轴翻转(或垂直翻转或水平翻转)。矩阵翻转的实质是,矩阵的每行(或每列)元素进行倒序排放。矩阵卷动涉及两个问题:(1)卷动的方向(或左右卷动,或上下卷动);(2)卷动幅度,如上下卷动行数,左右卷动列数。矩阵卷动的实质是将某行或某列元素循环移位。上下卷动时,是将每列元素循环移位,左右卷动时,是将每行元素循环移位,卷动方向决定是左移还是右移。矩阵旋转(绕中心点)涉及两个方面:(1)旋转方向,顺时针还是逆时针;(2)旋转角度,如90°、180°、270°、360°等。矩阵旋转的实质是数组元素的重新组合,对应交换元素值。因此关键是某圈元素的旋转、交换。 关键词:行数;列数;幅度;角度;翻转;卷动;旋转 2

目录 摘要 (2) 1课题综述 (4) 1.1课题的来源及意义 (4) 1.2 预期目标 (4) 1.3 面对的问题 (5) 1.4 需要解决的关键技术 (5) 2 系统分析 (5) 2.1 涉及的知识基础 (5) 2.2 解决问题的基本思路 (7) 2.3 总体方案 (8) 2.4 功能模块框图 (8) 3 系统设计 (9) 3.1 算法描述 (9) 3.2 实现方法 (9) 3.3 详细流程图 (9) 4 代码编写 (11) 4.1 矩阵翻转 (11) 4.2 矩阵卷动 (12) 4.3 矩阵旋转 (14) 5 程序调试 (15) 6 运行结果与测试 (15) 6.1 矩阵翻转 (15) 6.2 矩阵卷动 (16) 6.3 矩阵旋转 (16) 6.4 退出程序 (17) 7 总结与展望 (18) 总结 (19) 致谢 (20) 参考文献 (21) 附录 (22) 3

实验2 矩阵基本操作(1)

实验二、矩阵的基本运算 一、 问题 已知矩阵A 、B 、b 如下: ????????? ???????????-------------=0319481187638126542 86174116470561091143A ???????? ??????????------=503642237253619129113281510551201187851697236421B []1187531=b 应用Matlab 软件进行矩阵输入及各种基本运算。 二、 实验目的: 熟悉Matlab 软件中的关于矩阵运算的各种命令 三、 预备知识 1、线性代数中的矩阵运算。 2、本实验所用的Matlab 命令提示: (1)、矩阵输入格式:A =[a 11, a 12; a 21, a 22];b =初始值:步长:终值; (2)、求A 的转置:A'; (3)、求A 加B :A +B ; (4)、求A 减B :A -B ; (5)、求数k 乘以A :k*A ; (6)、求A 乘以B :A*B ; (7)、求A 的行列式:det (A ); (8)、求A 的秩:rank (A ); (9)、求A 的逆:inv (A )或(A )-1; (10)、B 右乘A 的逆:B/A ; (11)、B 左乘A 的逆:A \B ; (12)、求A 的特征值:eig (A ); (13)、求A 的特征向量矩阵X 及对角阵D :[X ,D ]=eig (A );

(14)、求方阵A的n次幂:A^n; (15)、A与B的对应元素相乘:A.*B; (16)、存储工作空间变量:save '文件名' '变量名'; (17)、列出工作空间的所有变量:whos; 四、实验内容与要求 1、输入矩阵A,B,b; >> A=[3 4 -1 1 -9 10;6 5 0 7 4 -16;1 -4 7 -1 6 -8;2 -4 5 -6 12 -8;-3 6 -7 8 -1 1;8 -4 9 1 3 0] A = 3 4 -1 1 -9 10 6 5 0 7 4 -16 1 -4 7 -1 6 -8 2 -4 5 -6 12 -8 -3 6 -7 8 -1 1 8 -4 9 1 3 0 >> B=[1 2 4 6 -3 2;7 9 16 -5 8 -7;8 11 20 1 5 5;10 15 28 13 -1 9;12 19 36 25 -7 23;2 4 6 -3 0 5;] B = 1 2 4 6 -3 2 7 9 16 -5 8 -7 8 11 20 1 5 5 10 15 28 13 -1 9 12 19 36 25 -7 23 2 4 6 - 3 0 5 >> b=[1 3 5 7 8 11] b = 1 3 5 7 8 11 2、作X21=A'、X22=A+B、X23=A-B、X24=AB; >> X21=A' X21 = 3 6 1 2 -3 8 4 5 -4 -4 6 -4 -1 0 7 5 -7 9 1 7 -1 -6 8 1 -9 4 6 12 -1 3 10 -16 -8 -8 1 0

矩阵操作C++

淮阴工学院 算法设计技能训练 设计题目:矩阵操作(动态数组) 院别:计算机与软件工程学院 专业:计算机科学与技术 班级: XXXXXXXXXX 学生姓名: XXX 学号: XXXXXXXXXX 指导教师: XXX XXX 2017 年11 月

算法设计技能训练成绩 班级:计算机1161 学生姓名: XXX 学号:1161301105 院别:计算机与软件工程学院 算法设计技能训练题目:矩阵操作(动态数组) 教师签字: 日期:

目录 1 引言 (1) 1.1课题描述 (1) 1.2课题意义 (1) 1.3设计思想 (1) 2 总体设计 (2) 2.1总体功能结构 (2) 2.2类的分析与设计 (2) 3 详细设计和实现 (3) 3.1构建m*n的全零矩阵 (3) 3.2构建n*n的方阵 (3) 3.3拷贝构造函数(深拷贝) (3) 3.4根据一维数组拷贝函数 (3) 3.5根据二维数组拷贝函数 (3) 3.6析构函数 (4) 3.7矩阵转置 (4) 3.8矩阵信息获取及修改 (4) 3.9矩阵加法 (4) 3.10矩阵减法 (4) 3.11矩阵乘法 (5) 3.12重载=运算符 (5) 3.13打印函数 (5) 4 系统测试 (5) 4.1主界面 (5) 4.2创建矩阵 (6) 4.3矩阵相加 (8) 4.4矩阵相减 (8) 4.5矩阵数乘 (9) 4.6矩阵转置 (9) 4.6矩阵相乘 (9)

结论 (11) 致谢 (12) 参考文献 (13) 附录 (14)

1 引言 1.1课题描述 设计矩阵操作类算法,并做到可以动态的操作不同类型的数组,矩阵操作包括各种类型的构造函数如直接构造m*n型的全零矩阵或者全零方阵或者根据一 维数组二维数组来构造矩阵,然后是析构函数。还需要返回行数列数以及设置某一位置的值和返回某一位置的值,操作类主要包括矩阵的转置、加减乘除和数乘赋值功能还有打印功能 1.2课题意义 矩阵是线性代数研究的主要对象。矩阵是由来源于某一问题的有关的数据所组成的矩形数表,在对矩阵定义了一些重要的运算并逐渐形成了矩阵的理论体系后,矩阵成为对数学研究即应用非常有效的数学工具,矩阵计算的理论与方法在许多实际问题研究中有着广泛的应用。将矩阵用代码实现可以大大减少实际计算工作量,使人们在生活研究方面得到很大的便利,省时省力。 1.3设计思想 本算法主要设计一个Matrix的类来实现矩阵的各种操作。该矩阵操作的数据类型可以自己选择,因为采用了模板,相对的设计时也会稍微繁琐一些。矩阵数据成员主要有矩阵元素的头指针,矩阵行数rowNum,矩阵列数colNum。公有成员函数则要实现各种方式的构造函数如直接构造m*n型的全零矩阵或者全零 方阵或者根据一维数组二维数组来构造矩阵。获得矩阵信息的功能如获得矩阵的行数列数获得矩阵某一位置的值打印矩阵等。还有修改矩阵某一位置的值的功能,再接下来是最重要的矩阵的各种操作包括加减乘和数乘还有转置等,这些主要通过重载运算符来实现。

矩阵键盘操作手册

矩阵控制键盘操作说明 键盘概述 控制器是智能电视监控系统中的控制键盘,也是个监控系统中人机对话的主要设备。可作为主控键盘,也可作为分控键盘使用。对整个监控系统中的每个单机进行控制。 键盘功能 1.中文/英文液晶屏显示 2.比例操纵杆(二维、三维可选)可全方位控制云台,三维比例操纵杆可控制摄像机的变倍 3.摄像机可控制光圈开光、聚集远近、变倍大小 4.室外云台的防护罩可除尘和除霜 5.控制矩阵的切换、序切、群组切换、菜单操作等 6.控制高速球的各种功能,如预置点参数、巡视组、看守卫设置、菜单操作等 7.对报警设备进行布/撤防及报警联动控制 8.控制各种协议的云台、解码器、辅助开头设置、自动扫描、 自动面扫及角度设定 9.在菜单中设置各项功能 10.键盘锁定可避免各种误操作,安全性高 11.内置蜂鸣器桌面上直接听到声音,可判断操作是否有效 技术参数 1.控制模式主控、分控 2.可接入分控数16个 3.可接入报警模块数239个 4.最大报警器地址1024个 5.最大可控制摄像机数量1024个 6.最大可控制监视器数量 64个 7.最大可控制解码器数量 1024个 8.电源 AC/DC9V(最低500mA的电源) 9.功率 5W 10.通讯协议Matri、PEL-D、PEL-P、VinPD 11.通讯波特率1200 Bit/S,2400 Bit/S,4800 Bit/S ,9600Bit/S, Start bit1,Data bit8,Stop bit1

接线盒的脚定义 控制线连接图 键盘按键说明 Focus Far 聚焦远 Focus Near 聚焦近 Zoom Tele 变倍大 Zoom Wide 变倍小 DVR 设备操作 DVR 功能键 Shift 用户登入 Login 退出键 Exit 报警记录查询 List 进入键盘主菜单 MENU 启动功能 F1/ON 关闭功能 F2/OFF 液晶显示区

Matlab常用函数、数组及矩阵的基本运算

实验一 Matlab 常用函数、数组及矩阵的基本运算 一、 实验目的 1. 了解Matlab7.0软件工作界面结构和基本操作; 2. 掌握矩阵的表示方法及Matlab 常用函数; 3. 掌握数组及矩阵的基本运算. 二、 实验内容 1. 了解命令窗口(command widow)和变量空间(workspace)的作用,掌握清 除命令窗口(clc )和变量空间(clear)的方法.掌握查询函数(help)的方法. 2. 掌握保存和加载变量的方法. 加载变量:load 变量名. 3. 掌握掌握矩阵的表示方法: 给a,b,c 赋如下数据: ]6,46,23,4,2,6,3,8,0,1[,356838241248 7,278744125431-=??????????--=??????????=c b a 4. 求a+b,a*b,a.*b,a/b,a./b,a^2,a.^2的结果. 5. 将str1=electronic; str2 = information; str3 = engineering; 三个字符串连接 在一起成str = electronic information engineering. 6. 求矩阵a 的逆矩阵a -1,行列式计算。 (inv(a),det(a)) 三、 实验要求 1.上机操作,熟练掌握清除命令窗口和变量空间的方法、查询变量的方法、加载变量的方法。 2.第2道题请写出步骤。 3.对实验内容中第3-6项,写出指令,上机运行. 记录运行结果(数据)。 4.写出实验报告。 四、 实验结果 2. 用save 函数,可以将工作空间的变量保存成txt 文件或mat 文件等. 比如: save peng.mat p j 就是将工作空间中的p 和j 变量保存在peng.mat 中. 用load 函数,可以将数据读入到matlab 的工作空间中. 比如:load peng.mat 就是将peng.mat 中的所有变量读入matlab 工作空间中。

实验二基本矩阵操作

实验二 基本矩阵操作 实验目的: ① 掌握matlab 变量和数据操作; ② 掌握matlab 矩阵的创立、拆分及特殊矩阵; ③ 掌握matlab 运算,掌握matlab 在矩阵分析中的应用,掌握稀疏矩阵的存储方式和创建方法; ④ 掌握矩阵的基本运算和结构体数组的创建。 ⑤ 了解字符串处理函数。 实验要求:给出程序和实验结果。 实验内容: 1、利用列向量()1,2,3,,10T 建立一个范得蒙矩阵A ,并利用位于矩阵A 的奇数行偶数列的元素建立一个新的矩阵B ,须保持这些元素的相对位置不变。 2、矩阵的基本运算与点运算的区别。 3、给出矩阵的两种存储方式的联系和区别,这两种存储方式在实际应用中主要应用于具有什么特点的矩阵? 4*.将字符串'very good'转换为等值的整数。 5.按水平和竖直方向分别合并下述两个矩阵: 6. 分别删除第5题两个结果的第2行。 7. 分别将第5题两个结果的第2行最后3列的数值改为[11 12 13]。 8. 分别查看第5题两个结果的各方向长度。 9*. 分别判断pi 是否为字符串和浮点数。 10.分别将第5题两个结果均转换为2?9的矩阵。 11.计算第5题矩阵A 的转置。 12.分别计算第5题矩阵A 和B 的A +B 、A .* B 和A \B 。 13.判断第5题矩阵A 和B 中哪些元素值不小于4。 14*.分别用函数strcat()和矩阵合并符合并如下字符串:' The picture is '和' very good '。 15*.创建字符串数组,其中元素分别为‘Picture ’和'Pitch '。 16*.在第14题结果中查找字符串'e'。 17*.在第15题结果中匹配字符串'Pi'。

矩阵算法

矩阵及其基本算法计13 刘汝佳矩阵及其基本算法矩阵的表示矩阵的基本运算小结和应用举例一、矩阵的表示矩阵在形式上最直接的表示是一个二维数组,但是在一些特殊的场合中,我们需要引入一些特殊的方法来表示一些特殊的矩阵。在本节中,大家还将了解到以下几种表示方法: 还将了解到以下几种表示方法: 三角矩阵的压缩表示法稀疏矩阵的三元组表示法稀疏矩阵的十字链表表示法矩阵的二维数组表示法我们用二维数组很容易表示一个矩阵。加上矩阵的维数M 我们用二维数组很容易表示一个矩阵。加上矩阵的维数M 和N,我们可以定义一个我们可以定义一个TMatrix结构: 结构: struct TMatrix { int n,m; int numbers[MAXN+1][MAXN+1]; }; 这就是矩阵的二维数组表示法。怎么样,容易吧?这就是矩阵的二维数组表示法。怎么样,容易吧?三角矩阵的压缩表示(1) 三角矩阵的压缩表示N阶上三角矩阵,对称矩阵和反对称矩阵都只需要储存主对角线以上的共(N+1)*N/2个元素。N+1)*N/2个元素。因此,我们可以用一个大小为( 因此,我们可以用一个大小为(N+1)*N/2 的一维数组来表示。不过,我们需要一个公式,把每个元素原来的位置(i,j)映射到一维数组的下标k 原来的位置(i,j)映射到一维数组的下标k。三角矩阵的压缩表示(2) 三角矩阵的压缩表示我们从上到下,从左到右地储存各个元素,如下图:?a11 a12 a13 a14 ? ? a a a ? 22 23 24 ? ? ? a33 a34 ? ? ? a44 ? ? i ?1 l =1 ?a1 a2 a3 a4 ? ? a a a ? 5 6 7 ? ? ? a8 a9 ? ? ? a10 ? ? Aij前面的数的个数为:(n ? l + 1) + ( j ? 1) ∑ 计算得: 计算得: 1 k = (2n ? i + 2)(i ? 1) + j 2 稀疏矩阵在前面的二维数组表示法中,我们表示一个N*M的矩阵需要N*M个内存单元。一个N*M的矩阵需要N*M个内存单元。如果已知矩阵中存在着大量的0 如果已知矩阵中存在着大量的0元素,那么这种表示方法是很浪费空间的。由于非零元素的个数L 由于非零元素的个数L十分有限,我们可以只储存下这L 以只储存下这L个元素的位置和大小,占用的空间便会少得多。稀疏矩阵的三元组表示法显然,表示稀疏矩阵最直接的方法就是仅记录下非零元素的个数L和这L 仅记录下非零元素的个数L和这L个元素的位置(row,col)和大小(value),的位置(row,col)和大小(value),即下面这个结构:struct TMatrix2 { int l; int row[MAXL],col[MAXL],value[MAXL]; }; 稀疏矩阵的十字链表表示(1) 稀疏矩阵的十字链表表示三元组表示法比较好的解决了稀疏矩阵的空间存储问题,却忽视了稀疏矩阵可能进行了一些基本操作。考虑两个稀疏矩阵A考虑两个稀疏矩阵A和B相加的问题。对于运算结果矩阵C来说,可能会因为正负抵消而产生出很多新的零元素和非零元素,导致三元组需要进行一些插入和删除操作。当这些操作很频繁的时候,程序的速度会明显变慢。在某些特定情况下,我们需要对元素进行检索,由于三元组的元素之间联系并不紧密,所以检索很不方便。稀疏矩阵的十字链表表示(2) 稀疏矩阵的十字链表表示为了加强同一行和同一列之间元素的联系,我们把每一行分别做成一个链表,把每一列也分别做成一个链表。通过对链表的遍历,我们可以很方便的按顺序访问到某一特定行或列的所有元素。插入和删除操作也很方便。这样,我们了建立一种十字型的链表结构,每个结点有上,下,左,右四个指针和自身的位置坐标,大小共7 置坐标,大小共7个域。稀疏矩阵的十字链表表示(3) 稀疏矩阵的十字链表表示结点类型如下定义:struct Tnode { int row, col; int value; Tnode *left, *right, *up, *down; }; row,col分别为该非零元素的位置,value为它的值。row,col分别为该非零元素的位置,value为它的值。left,right,up,down 分别为指向四个方向的后继元素。left,right,up,down分别为指向四个方向的后继元素。稀疏矩阵的十字链表表示(4) 稀疏矩阵的十字链表表示为了方便的找到每一个包含非零元素的行和列,我们把所有行串在一起,组成一个行链表,把所有列也串在一起,组成一个列链表。像这样:struct TRow { int RowNo; TNode * firstnode; }; struct TCol { int ColNo; TNode * firstnode; }; 矩阵表示方法小结矩阵的表示方法和应用是分不开的。我们衡量一种表示方法的优劣,需要从不同的角度进行分析。适用范围空间需求量基本操作的时间消耗实现的难易程度以上几种方法都在某些方面表现良好而其他方面不够理想,因此我们

MATLAB中对矩阵的基本操作

eye 单位矩阵 zeros 全零矩阵 ones 全1矩阵 rand 均匀分布随机阵genmarkov 生成随机Markov矩阵linspace 线性等分向量 logspace 对数等分向量 logm 矩阵对数运算 cumprod 矩阵元素累计乘cumsum 矩阵元素累计和 toeplitz Toeplitz矩阵 disp 显示矩阵和文字内容 length 确定向量的长度 size 确定矩阵的维数 diag 创建对角矩阵或抽取对角向量find 找出非零元素1的下标matrix 矩阵变维 rot90 矩阵逆时针旋转90度 sub2ind 全下标转换为单下标 tril 抽取下三角阵 triu 抽取上三角阵 conj 共轭矩阵 companion 伴随矩阵 det 行列式的值 norm 矩阵或向量范数 nnz 矩阵中非零元素的个数 null 清空向量或矩阵中的某个元素orth 正交基 rank 矩阵秩 trace 矩阵迹 cond 矩阵条件数 inv 矩阵的逆 rcond 逆矩阵条件数

lu LU分解或高斯消元法 pinv 伪逆 qr QR分解 givens Givens变换 linsolve 求解线性方程 lyap Lyapunov方程 hess Hessenberg矩阵 poly 特征多项式 schur Schur分解 expm 矩阵指数 expm1 矩阵指数的Pade逼近 expm2 用泰勒级数求矩阵指数 expm3 通过特征值和特征向量求矩阵指数funm 计算一般矩阵函数 logm 矩阵对数 sqrtm 矩阵平方根 spec 矩阵特征值 gspec 矩阵束特征值 bdiag 块矩阵,广义特征向量 eigenmar- 正则化Markov特征 kov 向量 pbig 特征空间投影 svd 奇异值分解 sva 奇异值分解近似 cumprod 元素累计积 cumsum 元素累计和 hist 统计频数直方图 max 最大值 min 最小值 mean 平均值 median 中值 prod 元素积 sort 由大到小排序

MATLAB 矩阵操作大全

MATLAB 矩阵操作大全 转载自: https://www.wendangku.net/doc/7f13788342.html,/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。

3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n 的二维矩阵。 二、矩阵的简单操作 1.获取矩阵元素 可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储。 序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。 2.矩阵拆分 利用冒号表达式获得子矩阵: (1) A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。 (2) A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第 k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m 列中的所有元素。此外,还可利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。 利用空矩阵删除矩阵的元素: 在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。 3、特殊矩阵 (1) 魔方矩阵魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。

图的基本操作(邻接矩阵)

//*******图的邻接矩阵储存表示*********** #define INFINITY INT_MAX //最大值为无穷大 #define MAX_VERTEX_NUM 20 //最大顶点个数 #include using namespace std; typedef enum {DG,DN,AG,AN}GraphKind; //{有向图,有向网,无向图,无向网} typedef int Status; typedef int VRType; typedef char InfoType; typedef struct ArcCell{ VRType adj; //表示顶点关系,对于无向图有向图用0和1表示是否相邻,对于有向图有向网用权值类型表示 InfoType* info; //该弧相关信息的指针 }ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct {//点的值 char name; char* data; }VertexType[MAX_VERTEX_NUM]; typedef struct{ VertexType vexs; //顶点向量 AdjMatrix arcs; //邻接矩阵 int vexnum; //图的当前顶点数 int arcnum; //图的当前弧数 GraphKind kind; //图的种类标志 }MGraph; //***********************以下操作默认是无向网,即Kind = AG************************** //***********************顶点是名称字母。书上的是数字,例如v************************ Status LocateVex(MGraph G,char u){ if(G.vexnum == 0) return -1; //图不存在 int i; for(i = 0;i < G.vexnum;i++) if(G.vexs[i].name == u)

邻接矩阵表示的图的基本操作的实现

邻接矩阵表示的图的基本操作的实现 //采用邻接矩阵完成无权无向及有向图的"建立、输出、深度遍历、广度遍历"操作 #include #include #define OK 1 #define ERROR -1 typedef int Status; typedef int ElemType; //此例中设元素为单值元素,类型为整型 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef int ElemType; //图顶点数据类型 typedef int QueueElemType;//队列结点数据类型 //链表结点类型定义 typedef struct Qnode { QueueElemType data; struct Qnode *next; }QNode; //队列类型定义: typedef struct Linkqueue { QNode *front,*rear; }LinkQueue; //图的数据类型定义 typedef struct Mgraph { ElemType vector[MAX_VERTEX_NUM]; //顶点向量 int adj[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵 int vexnum; //图中当前顶点数 int arcnum; //图中当前边数

} MGraph; //队列初始化 Status InitLinkQueue(LinkQueue *Q) { QNode *p; p=(QNode*)malloc(sizeof(QNode));//开辟头结点空间 if(p!=NULL) { p->next=NULL; Q->front=Q->rear=p; return OK; } else return ERROR; } //链式队列的入队操作,在已知队列的队尾插入一个元素e,修改队尾指针rear。 Status InsertLinkQueue(LinkQueue *Q,ElemType e) { QNode *p; p=(QNode*)malloc(sizeof(QNode)); if(p==NULL) return ERROR;//申请新结点空间失败,返回错误标志 else { p->data=e;//存入新结点数据 p->next=NULL; Q->rear->next=p;//新结点插入到队尾 Q->rear=p;//新插入结点成为新的队尾 return OK;

相关文档
相关文档 最新文档