求数据结构课程设计——稀疏矩阵运算器源代码
发布网友
发布时间:2022-04-26 01:09
我来回答
共1个回答
热心网友
时间:2022-06-19 05:14
MATLAB官方网站 http://www.mathworks.com/
1.MATLAB的概况
MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.
当前流行的MATLAB 5.3/Simulink 3.0包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.
开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.
2.MATLAB产生的历史背景
在70年代中期,Cleve Moler博士和其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的FORTRAN子程序库.EISPACK是特征值求解的FOETRAN程序库,LINPACK是解线性方程的程序库.在当时,这两个程序库代表矩阵运算的最高水平.
到70年代后期,身为美国New Mexico大学计算机系系主任的Cleve Moler,在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序.Cleve Moler给这个接口程序取名为MATLAB,该名为矩阵(matrix)和实验室(labotatory)两个英文单词的前三个字母的组合.在以后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传.
1983年春天,Cleve Moler到Standford大学讲学,MATLAB深深地吸引了工程师John Little.John Little敏锐地觉察到MATLAB在工程领域的广阔前景.同年,他和Cleve Moler,Steve Bangert一起,用C语言开发了第二代专业版.这一代的MATLAB语言同时具备了数值计算和数据图示化的功能.
1984年,Cleve Moler和John Little成立了Math Works公司,正式把MATLAB推向市场,并继续进行MATLAB的研究和开发.
在当今30多个数学类科技应用软件中,就软件数学处理的原始内核而言,可分为两大类.一类是数值计算型软件,如MATLAB,Xmath,Gauss等,这类软件长于数值计算,对处理大批数据效率高;另一类是数学分析型软件,Mathematica,Maple等,这类软件以符号计算见长,能给出解析解和任意精确解,其缺点是处理大量数据时效率较低.MathWorks公司顺应多功能需求之潮流,在其卓越数值计算和图示能力的基础上,又率先在专业水平上开拓了其符号计算,文字处理,可视化建模和实时控制能力,开发了适合多学科,多部门要求的新一代科技应用软件MATLAB.经过多年的国际竞争,MATLAB以经占据了数值软件市场的主导地位.
在MATLAB进入市场前,国际上的许多软件包都是直接以FORTRANC语言等编程语言开发的。这种软件的缺点是使用面窄,接口简陋,程序结构不开放以及没有标准的基库,很难适应各学科的最新发展,因而很难推广。MATLAB的出现,为各国科学家开发学科软件提供了新的基础。在MATLAB问世不久的80年代中期,原先控制领域里的一些软件包纷纷被淘汰或在MATLAB上重建。
MathWorks公司1993年推出了MATLAB 4。0版,1995年推出4。2C版(for win3。X)1997年推出5。0版。1999年推出5。3版。MATLAB 5。X较MATLAB 4。X无论是界面还是内容都有长足的进展,其帮助信息采用超文本格式和PDF格式,在Netscape 3。0或IE 4。0及以上版本,Acrobat Reader中可以方便地浏览。
时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科,多种工作平台的功能强大大大型软件。在国外,MATLAB已经经受了多年考验。在欧美等高校,MATLAB已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生,硕士生,博士生必须掌握的基本技能。在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题。在国内,特别是工程界,MATLAB一定会盛行起来。可以说,无论你从事工程方面的哪个学科,都能在MATLAB里找到合适的功能。
2.MATLAB的语言特点
一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同FORTRAN和C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为*计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB最突出的特点就是简洁。MATLAB用更直观的,符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码。MATLAB给用户带来的是最直观,最简洁的程序开发环境。以下简单介绍一下MATLAB的主要特点。
1)。语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用MATLAB进行科技开发是站在专家的肩膀上。
具有FORTRAN和C等高级语言知识的读者可能已经注意到,如果用FORTRAN或C语言去编写程序,尤其当涉及矩阵运算和画图时,编程会很麻烦。例如,如果用户想求解一个线性代数方程,就得编写一个程序块读入数据,然后再使用一种求解线性方程的算法(例如追赶法)编写一个程序块来求解方程,最后再输出计算结果。在求解过程中,最麻烦的要算第二部分。解线性方程的麻烦在于要对矩阵的元素作循环,选择稳定的算法以及代码的调试动不容易。即使有部分源代码,用户也会感到麻烦,且不能保证运算的稳定性。解线性方程的程序用FORTRAN和C这样的高级语言编写,至少需要四百多行,调试这种几百行的计算程序可以说很困难。以下用MATLAB编写以上两个小程序的具体过程。
MATLAB求解下列方程,并求解矩阵A的特征值。
Ax=b,其中:
A= 32 13 45 67
23 79 85 12
43 23 54 65
98 34 71 35
b= 1
2
3
4
解为:x=A\b;设A的特征值组成的向量e,e=eig(A)。
可见,MATLAB的程序极其简短。更为难能可贵的是,MATLAB甚至具有一定的智能水平,比如上面的解方程,MATLAB会根据矩阵的特性选择方程的求解方法,所以用户根本不用怀疑MATLAB的准确性。
2)运算符丰富。由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。
3)MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
4)程序*不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。
5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。
6)MATLAB的图形功能强大。在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。MATLAB还具有较强的编辑图形界面的能力。
7)MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
8)功能强大的工具箱是MATLAB的另一特色。MATLAB包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工具箱是专业性比较强的,如control,toolbox,signl proceessing toolbox,commumnication toolbox等。这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究。
9)源程序的开放性。开放性也许是MATLAB最受人们欢迎的特点。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。
稀疏矩阵运算器:c++语言
define EPS 1.0E-8 //很小的数认为是零元素 class elem{ //定义矩阵元素类 int col;float data;public:elem * next; //行链接 elem(int c,float d,elem * nx=NULL){col=c;data=d;next=nx;};elem(){col=0;data=0;next=NULL;};~elem(){cout<<"del "<<col<<" "<<...
常用的数据分析工具有哪些
Tempo大数据分析平台,是一款面向企业用户的数据分析与应用工具,为用户提供报表设计、可视化分析、机器学习、文本分析等自助式数据分析与探索。平台基于大数据架构,集数据接入、数据分析探索、成果管理与应用为一体,面向企业全民用户提供从数...
求课程设计报告书 稀疏矩阵相乘 发到邮箱 1154209282@qq.com 急急急...
int j=1;cout<<"请输入矩阵的个数"<<endl;cin>>n;p=new int[n+1];cout<<"请输入第一个矩阵的行数,然后按回车键"<<endl;cin>>p[0];cout<<"第"<<j<<"个矩阵是"<<endl;cout<<p[0]<<"*";cin>>p[1];// cout<<p[1]<<endl;cout<<endl;for(int i=2;i<n+1;i++){...
矩阵压缩存储的应用(稀疏矩阵运算器)
if(!(m->rpos=(int *)malloc((m->mu+1)*sizeof(int)))/*本人认为数据结构上的rpos定义有错误,如果某一行全都是非零元那m->rpos[i]=0并不是m->rpos[i-1]+num[i-1]所以以下的rpos操作可能与书上的原意不符*/ { printf("空间开辟失败\n"); exit(1); } for(i=0;i<=m->mu;i++)/*...
数据结构实验矩阵运算器的算法和步骤,谁知道啊?
1.输入稀疏矩阵M和N。2.检测M和N能否相加 3.矩阵相加运算 4.打印输出结果 矩阵相加测试实例:输入 M= ,N= 二、概要设计 1.稀疏矩阵三元数组定义如下:ADT SparseMatrix { 数据对象:m和n分别称为矩阵的行数和列数 } 数据关系:R= 基本操作:CreateSMatrix (&M) ;操作结果:创建稀疏矩阵M...
稀疏矩阵的计算过程有哪些细节?
CSR格式存储了矩阵的非零元素、每行的第一个非零元素在数组中的位置以及每行的非零元素总数。CSC格式与CSR类似,但是按列而不是行来组织数据。稀疏矩阵的运算:稀疏矩阵的加法和减法可以通过逐元素操作来完成,但只对非零元素进行计算。稀疏矩阵与稠密矩阵的乘法可以通过分块计算来优化,只计算涉及非零...
数据结构课程设计:十字链表的应用
ifndef Matrix_H define Matrix_H include "List.h"class MatNode { public:int data;int row, col;union { Node<MatNode> *down; List<MatNode> *downrow; };MatNode(int value = 0, Node<MatNode> *p = NULL, int i = 0, int j = 0): data(value), down(p), row(i), col...
稀疏矩阵相乘的问题
2.ctemp是用来作乘法时,累积求和用的.既然是求和用的,初始化肯定是0.假设是2x3矩阵和3x4矩阵相乘.前者的每行要和后者的4列分别相乘,所以ctemp的长度要设为4+1=5.3.这个乘法函数是逐行计算的,每算完1行,Q.tu就记录了目前为止已经得到的非零元的个数,所以新行的rpos肯定是Q.tu+1.这点从...
高分求数据结构与算法答案
1-5 ACDCC 6.你写的我分不清,答案是2的(i-1)次方7-10 CCCB 11-15 BDA()C 16-18 CDA 46-50 CCACB 14题 B_树 是不是biinary tree(二叉树)啊?,没说清楚,没法回答。就一题了,估计你自己也能解决,这些题都很基础,不难。
怎样才能高效地进行稀疏矩阵运算?
并行计算:利用多核处理器或分布式计算资源进行并行计算可以显著提高稀疏矩阵运算的速度。通过将稀疏矩阵分割成小块,并将这些小块分配给不同的处理器核心或计算节点,可以实现高效的并行处理。预处理:在进行稀疏矩阵运算之前,可以通过预处理步骤来改善矩阵的结构,从而提高运算效率。例如,可以使用排序算法对...
数据结构课程设计的图书目录
大整数计算器第6章 多维数组和广义表的应用6.1 存储结构与基本运算的算法6.2 魔方阵6.3 稀疏矩阵的加法运算6.4 本科生导师制问题第7章 树状结构的应用7.1 存储结构与基本运算的算法7.2 线索二叉树的创建与遍历7.3 由遍历确定二叉树7.4 电文的编码和译码7.5 家族关系查询系统第8章 ...