当前位置:文档之家› c课程设计矩阵的转置与乘法计算

c课程设计矩阵的转置与乘法计算

c课程设计矩阵的转置与乘法计算
c课程设计矩阵的转置与乘法计算

c课程设计矩阵的转置与乘法计算

C++课程设计实验报告

姓名学号班级

任课教师时间 9月

教师指定题目4-4 矩阵的转置与乘法计算评定难易级别 A

实验报告成绩

1.实验内容:

1.1 程序功能介绍

该程序定义了一个向量类,里面的元素是模板形式,定义了有关向量了类的各种属性、方法及运算符重载函数。

1.2 程序设计要求

(1)利用已知的向量类对象定义一个矩阵类,矩阵类的数据是向量子对象,同样定义矩阵类的各种属性、方法及运算符重载函数。

(2)完善成员函数,使矩阵能够由文件输入,具体的输入格式自己规定。(3)完成矩阵的赋值、转置、乘法等运算,要求用整形矩阵和浮点型矩阵分别演算。

(4)更改main函数结构,可由用户选择输入矩阵数据的方法,程序能够连续运行,直到选择退出为止。

2. 源程序结构流程框图与说明(含新增子函数的结构框图)

作者:喻皓学号:

3. 基本数据结构

定义的类模板,将函数用链表将一些功能函数连接起来。其中定义了构造函数,析构函数,重载赋值、乘法、数乘、输入、输出,矩阵转置等函数,实现矩阵的矩阵的赋值、转置、乘法等运算。

template

class CMatrix

{

struct node

{

Vector **f;//**************************************组成矩阵的向量指针

int

refcnt;//*************************************************被引用次数

int

length;//*************************************************矩阵的行数T

**tmppointer;//*******************************************头指针类型} *p;

public:

//

Vector ** begin() const {return p->f;};

CMatrix();//****************************************************默认的构造

CMatrix(int xsize,int ysize,T init=0);//***************************构造函数

CMatrix(int xlength,const Vector *vec);//************************构造函数

CMatrix(CMatrix &x); //**************************************拷贝构造函数

~CMatrix();

//****************************************************析构函数CMatrix & operator=(const CMatrix &mat);//**************重载赋值运算符

int row() const;//**************************************************返回行数int col() const;//**************************************************返回列数

Vector & operator []( int i);//********************************重载[]

void Inver(CMatrix &mat);//****************************************

矩阵转置

operator T **();//****************************************************重载** void ReadFromFile();//*************************************从文件中读入矩阵

friend CMatrix cpy(CMatrix &v);//***********************************拷贝函数

friend std::ostream & operator<<(std::ostream &s,const CMatrix &mat);//重载输出函数

friend std::istream & operator>>(std::istream &s,const CMatrix &mat);//重载输入函数

friend CMatrix operator*(CMatrix &v1,CMatrix &v2);//******矩阵乘法

friend CMatrix operator*(const CMatrix &v,T val); //************数乘

};

4. 程序运行结果界面

图1。进入程序、选择输入方式

图2。输入两个矩阵并选择对矩阵的操作图3。实现矩阵转置

图4。实现矩阵乘法图5。实现矩阵数乘

5. 课程设计遇到的技术问题与解决思路

问题1:对于基本的输入输出符号和运算符号无法运用到矩阵中、需要重载解决办法:重载输入、输出、乘法、数乘、赋值等、使其能对矩阵进行操作问题2:当输入的数字个数异于事先设定好的矩阵的容量时会出现错误比如:当输入的行数和列数分别为2和3时当输入“1 2 3”(个数

少于2*3)则无法实现缺省状态当输入“1 2 3 4 5 6 7”时则多出的

数字7将会成为下一要求输入数据的一个数据

解决办法:在初始界面输入提示信息,本程序尚不能解决。

数据结构课程设计之稀疏矩阵实现与应用1

数据结构课程设计报告 题目:十字链表成为存储结构,实现稀疏矩阵的求和运算 学生姓名:张旋 班级:软件三班学号:201213040304 指导教师: 吴小平

一、需求分析 1.问题描述: 要求:十字链表下的稀疏矩阵的加、转、乘的实现。 2.基本功能 实现十字链表下的转置,乘法,加法运算。 3.输入输出 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (5)构造函数进行稀疏矩阵的转置,并输出结果。 (6)退出系统。 二、概要设计 1.设计思路: 本实验要求在三元组,十字链表下实现稀疏矩阵的加、转、乘。首先要进行矩阵的初始化操作,定义三元组和十字链表的元素对象。写出转置,加法,乘法的操作函数。通过主函数调用实现在一个程序下进行矩阵的运算操作。 2.数据结构设计: 抽象数据类型稀疏矩阵的定义如下: ADT SparseMatrix{ 数据对象:D={aij | i=1,2,…,m; j=1,2,..,n; aij∈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。 DestroySMatrix(&M); 初始条件:稀疏矩阵M存在。操作结果:销毁稀疏矩阵M。 PrintSMatrix(M); 初始条件:稀疏矩阵M存在。操作结果:输出稀疏矩阵M。 AddSMatrix(M,N,&Q); 初始条件:稀疏矩阵M与N的行数和列数对应相等操作结果:求稀疏矩阵的和Q=M+N。 MultSMatrix(M,N,&Q); 初始条件:稀疏矩阵M的列数等于N的行数。操作结果:求稀疏矩阵乘积Q=M*N。 TransposeSMatrix(M,&T); 初始条件:稀疏矩阵M存在。操作结果:求稀疏矩阵M的转置矩阵T。 }ADT SparseMatrix 3.软件结构设计:

矩阵算法经典题目

经典题目 这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。其中,结果的那个4等于2*2+0*1: 右面的算式则是一个1 x 3的矩阵乘以3 x 2的矩阵,得到一个1 x 2的矩阵: 矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律;二,矩阵乘法满足结合律。为什么矩阵乘法不满足交换律呢?因为交换后两个矩阵有可能不能相乘。为什么它又满足结合律呢?假设你有三个矩阵A、B、C,那么(AB)C和 A(BC)的结果的第i行第j列上的数都等于所有A(ik)*B(kl)*C(lj)的和(枚举所有的k和l)。 经典题目1 给定n个点,m个操作,构造O(m+n)的算法输出m个操作后各点的位置。操作有平移、缩放、翻转和旋转这里的操作是对所有点同时进行的。其中翻转是以坐标轴为对称轴进行翻转(两种情况),旋转则以原点为中心。如果对每个点分别进行模拟,那么m个操作总共耗时O(mn)。利用矩阵乘法可以在O(m)的时间里把所有操作合并为一个矩阵,然后每个点与该矩阵相乘即可直接得出最终该点的位置,总共耗时O(m+n)。假设初始时某个点的坐标为x和y,下面5个矩阵可以分别对其进行平移、旋转、翻转和旋转操作。预先把所有m个操作所对应的矩阵全部乘起来,再乘以(x,y,1),即可一步得出最终点的位置。 经典题目2 给定矩阵A,请快速计算出A^n(n个A相乘)的结果,输出的每个数都mod p。 由于矩阵乘法具有结合律,因此A^4 = A * A * A * A = (A*A) * (A*A) = A^2 * A^2。我们可以得到这样的结论:当n 为偶数时,A^n = A^(n/2) * A^(n/2);当n为奇数时,A^n = A^(n/2) * A^(n/2) * A (其中n/2取整)。这就告诉我们,计算A^n也可以使用二分快速求幂的方法。例如,为了算出A^25的值,我们只需要递归地计算出A^12、A^6、A^3的值即可。根据这里的一些结果,我们可以在计算过程中不断取模,避免高精度运算。 经典题目3 POJ3233 (感谢rmq) 题目大意:给定矩阵A,求A + A^2 + A^3 + ... + A^k的结果(两个矩阵相加就是对应位置分别相加)。输出的数据mod m。k<=10^9。 这道题两次二分,相当经典。首先我们知道,A^i可以二分求出。然后我们需要对整个题目的数据规模k进行二分。比如,当k=6时,有: A + A^2 + A^3 + A^4 + A^5 + A^6 =(A + A^2 + A^3) + A^3*(A + A^2 + A^3) 应用这个式子后,规模k减小了一半。我们二分求出A^3后再递归地计算A + A^2 + A^3,即可得到原问题的答案。

第3章 矩阵及其运算

第3章 矩阵及其运算 3.1 基本要求、重点难点 基本要求: 1.1.掌握矩阵的定义. 2.2.掌握矩阵的运算法则. 3.3.掌握伴随矩阵的概念及利用伴随矩阵求逆矩阵的方法. 4.4.掌握矩阵秩的概念及求矩阵秩的方法. 5.5. 掌握初等变换和初等矩阵的概念,能够利用初等变换计算矩阵的秩,求可逆矩阵的逆矩阵. 6.6.掌握线形方程组有解得判定定理及其初等变换解线形方程组的方法. 重点难点:重点是矩阵定义,矩阵乘法运算,逆矩阵的求法,矩阵的秩,初等 变换及线性方程组的解. 难点是矩阵乘法,求逆矩阵的伴随矩阵方法. 3.2 基本内容 3.2.1 3.2.1 重要定义 定义3.1 由n m ?个数)2,1;,2,1(n j m i a ij ==组成的m 行n 列的数表成为一个m 行n 列矩阵,记为 ????????????mn m m n n a a a a a a a a a 2122221 11211 简记为A n m ij a ?=)(,或A )(ij a =,n m A ?,mn A 注意行列式与矩阵的区别: (1) (1) 行列式是一个数,而矩阵是一个数表. (2) (2) 行列式的行数、列数一定相同,但矩阵的行数、列数不一定相 同. (3) (3) 一个数乘以行列式,等于这个数乘以行列式的某行(或列)的所有元素,而一个数乘以矩阵等于这个数乘以矩阵的所有元素. (4) (4) 两个行列式相等只要它们表示的数值相等即可,而两个矩阵相等则要求两个矩阵对应元素相等. (5) (5) 当0||≠A 时,||1A 有意义,而A 1 无意义.

n m =的矩阵叫做阶方阵或m 阶方阵.一阶方阵在书写时不写括号,它在 运算中可看做一个数. 对角线以下(上)元素都是0的矩阵叫上(下)三角矩阵,既是上三角阵, 又是下三角的矩阵,也就是除对角线以外的元素全是0的矩阵叫对角矩阵.在对角矩阵中,对角线上元素全一样的矩阵叫数量矩阵;数量矩阵中,对角线元素全是1的n 阶矩阵叫n 阶单位矩阵,常记为n E (或n I ),简记为E (或I ),元素都是0的矩阵叫零矩阵,记为n m 0?,或简记为0. 行和列分别相等的两个矩阵叫做同型矩阵,两个同型矩阵的且对应位置上的 元素分别相等的矩阵叫做相等矩阵. 设有矩阵A =n m ij a ?)(,则A -n m ij a ?-=)(称为A 的负矩阵. 若A 是方阵,则保持相对元素不变而得到的行列式称为方针A 的行列式,记 为||A 或A Det . 将矩阵A 的行列式互换所得到的矩阵为A 的转置矩阵,记为T A 或A '. 若方阵A 满足A A T =,则称A 为对称矩阵,若方阵A 满足A A T -=,则称A 为反对称矩阵. 若矩阵的元素都是实数,则矩阵称为实矩阵.若矩阵的元素含有复数,则称矩 阵为复矩阵,若A =n m ij a ?)(是复矩阵,则称矩阵n m ij a ?)((其中ij a 为ij a 的共轭矩阵,记为A n m ij a ?=)(. 定义3.2 对于n 阶矩阵A ,如果存在n 阶矩阵B ,使得E BA AB ==,则 称方阵A 可逆,B 称为A 的逆矩阵,记做1-=A B . 对于方阵A n m ij a ?=)(,设ij a 的代数余子式为ij A ,则矩阵 *A ????????????=nm n n n n A A A A A A A A A 2122212 12111 称为A 的伴随矩阵,要注意伴随矩阵中元素的位置. 定义3.3 设有矩阵A ,如果: (1) (1) 在A 中有一个r 阶子式D 不为零.

三元组顺序表稀疏矩阵课程设计报告(不完整)

1.稀疏矩阵运算器

数据结构课程设计任务书 针对本课程设计,完成以下课程设计任务: 1、熟悉系统实现工具和上机环境。 2、根据课程设计任务,查阅相关资料。 3、针对所选课题完成以下工作: (1)需求分析 (2)概要分析 (3)详细设计 (4)编写源程序 (5)静态走查程序和上机调试程序 4、书写上述文档和撰写课程设计报告。

3.课程设计报告目录

4.正文 (1)问题描述 稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算频率。实现一个能进行稀疏矩阵基本运算的运算器。 (2)需求分析 本课程设计的稀疏矩阵运算器在visual studio 2013下运行调试成功,可以实现的功能有: 1.矩阵运算方式选择 2.根据提示输入相应数据 3.显示最终结果 使用的主要存储结构为三元组,并用三元组形式进行运算。所有参与运算数据类型为整形,因此输入的数据应为整形数据。为了节省存储空间使用三元组数据进行运算,可以通过多次扫描三元组数据来实现,即使用嵌套循环函数。输出结果为通常的阵列形式,因此使用了右对齐,保证输出形式的整齐。 (3)概要分析 本次课程设计中定义的结构体 typedef struct { int i, j;//矩阵元素所在行列 int v;//元素的值 }triple; typedef struct { triple data[MAXSIZE]; triple cop[MAXSIZE];//辅助数组 int m, n, t;//矩阵的行列数 }tripletable; Main函数调用子函数时输入1为调用 int Push_juzhen(int m, int n, int count)函数,可以实现矩阵相加功能 输入2为调用 int Dec_juzhen(int m, int n, int count)函数,可实现矩阵相减功能 输入3为调用 int Mul_juzhen()函数,可以实现矩阵相乘功能 (4)详细分析(流程图伪代码) 加法函数 int Push_juzhen(int m, int n, int count)//矩阵相加(行,列,矩阵数) { // p行,q列,s非零元素个数,v元素值 //ucount对数组下标计数的变量,与变量x实现多个矩阵相加 for (int c = 0; c < count; c++) { int x = 0; cout << "请输入第" << c + 1 << "个矩阵的非零元素个数" << endl; cin >> s; cout << "请依次输入非零元素所在行和列以及该非零元素的值并以空格隔开" << endl; for (; x< s; x++)//传递行列及元素值

矩阵典型习题解析

2 矩阵 矩阵是学好线性代数这门课程的基础,而对于初学者来讲,对于矩阵的理解是尤为的重要;许多学生在最初的学习过程中感觉矩阵很难,这也是因为对矩阵所表示的内涵模糊的缘故。其实当我们把矩阵与我们的实际生产经济活动相联系的时候,我们才会发现,原来用矩阵来表示这些“繁琐”的事物来是多么的奇妙!于是当我们对矩阵产生无比的兴奋时,那么一切问题都会变得那么的简单! 2.1 知识要点解析 2.1.1 矩阵的概念 1.矩阵的定义 由m×n 个数),,2,1;,,2,1(n j m i a ij 组成的m 行n 列的矩形数表 mn m m n n a a a a a a a a a A 21 22221 11211 称为m×n 矩阵,记为n m ij a A )( 2.特殊矩阵 (1)方阵:行数与列数相等的矩阵; (2)上(下)三角阵:主对角线以下(上)的元素全为零的方阵称为上(下) 三角阵; (3)对角阵:主对角线以外的元素全为零的方阵; (4)数量矩阵:主对角线上元素相同的对角阵; (5)单位矩阵:主对角线上元素全是1的对角阵,记为E ; (6)零矩阵:元素全为零的矩阵。 3.矩阵的相等 设mn ij mn ij b B a A )(; )( 若 ),,2,1;,,2,1(n j m i b a ij ij ,则称A 与B 相等,记为A=B 。 2.1.2 矩阵的运算

1.加法 (1)定义:设mn ij mn ij b B A A )(,)( ,则mn ij ij b a B A C )( (2)运算规律 ① A+B=B+A ; ②(A+B )+C =A +(B+C ) ③ A+O=A ④ A +(-A )=0, –A 是A 的负矩阵 2.数与矩阵的乘法 (1)定义:设,)(mn ij a A k 为常数,则mn ij ka kA )( (2)运算规律 ① K (A+B ) =KA+KB , ② (K+L )A =KA+LA , ③ (KL ) A = K (LA ) 3.矩阵的乘法 (1)定义:设.)(,)(np ij mn ij b B a A 则 ,)(mp ij C C AB 其中 n k kj ik ij b a C 1 (2)运算规律 ①)()(BC A C AB ;②AC AB C B A )( ③CA BA A C B )( (3)方阵的幂 ①定义:A n ij a )( ,则K k A A A ②运算规律:n m n m A A A ;mn n m A A )( (4)矩阵乘法与幂运算与数的运算不同之处。 ①BA AB ②;00,0 B A AB 或不能推出 ③k k k B A AB )( 4.矩阵的转置 (1)定义:设矩阵A =mn ij a )(,将A 的行与列的元素位置交换,称为矩阵A 的转置,记为nm a A ji T )( , (2)运算规律 ①;)(A A T T ②T T T B A B A )(; ③;)(T T KA kA ④T T T A B AB )(。

稀疏化形成节点导纳矩阵

struct jdlb *insert1(struct jdlb *tp,struct jdlb *z) //节点导纳矩阵插入指针数据{ struct jdlb *p0,*p111,*p112; double r,r1,x,x1; kk=0; p111=tp; p0=z; if(p0==null) return(tp); if(tp==null) { tp=p0; p0->next=null; return(tp); } if(p0->lnxtlnxt) { tp=p0; p0->next=p111; return(tp); } while((p0->lnxt>p111->lnxt)&&(p111->next!=null)) { p112=p111; p111=p111->next; } if(p0->lnxt==p111->lnxt) //两点间有多条线路或变压器 { r=p111->fu*cos(p111->jd); x=p111->fu*sin(p111->jd); r1=p0->fu*cos(p0->jd); x1=p0->fu*sin(p0->jd); r=r+r1; x=x+x1; x1=sqrt(r*r+x*x); p111->fu=x1; p111->jd=atan2(x,r); kk=1; return(tp); } if((p111->next==null)&&(p0->lnxt>p111->lnxt)) { p111->next=p0; p0->next=null; } else { p112->next=p0;

} return(tp); } //线路部分形成节点导纳矩阵 p1=(struct jdlb *)malloc(len); p2=(struct jdlb *)malloc(len); p3=headlij; //线路部分 while(p3!=null) //形成节点导纳矩阵,可为双边的{ r=p3->fu; x=p3->jd; bb=p3->bb; i=p3->i; j=p3->j; gij=r/(r*r+x*x); bij=-x/(r*r+x*x); r=-gij; x=-bij; tmp=sqrt(r*r+x*x); if(tmp!=0) { p1->irow=i; p1->lnxt=j; p1->fu=tmp; p1->jd=atan2(x,r); a[i]=insert1(a[i],p1); if(kk==0) p1=(struct jdlb *)malloc(len); p2->irow=j; p2->lnxt=i; p2->fu=tmp; p2->jd=atan2(x,r); a[j]=insert1(a[j],p2); if(kk==0) p2=(struct jdlb *)malloc(len); } p3->fu=tmp; p3->jd=atan2(x,r); p3->bb=bb; g[i]=g[i]+gij; b[i]=b[i]+bij+bb; g[j]=g[j]+gij; b[j]=b[j]+bij+bb;

矩阵数值算法

计算实习报告 一 实习目的 (1)了解矩阵特征值与相应特征向量求解的意义,理解幂法和反幂法的原理, 能编制此算法的程序,并能求解实际问题。 (2)通过对比非线性方程的迭代法,理解线性方程组迭代解法的原理,学会编 写Jacobi 迭代法程序,并能求解中小型非线性方程组。初始点对收敛性质及收 敛速度的影响。 (3)理解 QR 法计算矩阵特征值与特征向量的原理,能编制此算法的程序,并 用于实际问题的求解。 二 问题定义及题目分析 1. 分别用幂法和幂法加速技术求矩阵 2.5 2.5 3.00.50.0 5.0 2.0 2.00.50.5 4.0 2.52.5 2.5 5.0 3.5-?? ?- ?= ?-- ?--?? A 的主特征值和特征向量. 2. 对于实对称矩阵n n ?∈A R ,用Jacobi 方法编写其程序,并用所编程序求下列矩阵的全部 特征值. 1515 4 1141144114114?-?? ?-- ? ?- ?= ? ?- ?-- ? ?-??A 3. 对于实矩阵n n ?∈A R ,用QR 方法编写其程序,并用所编程序求下列矩阵的全部特征值: 111 21 113,4,5,62311111n n n n n n ? ???? ?????==+? ????? ??+??A 三 概要设计 (1) 幂法用于求按模最大的特征值及其对应的特征向量的一种数值算法,

它要求矩阵 A 的特征值有如下关系: 12n ...λλλ>≥≥ ,对于相应 的特征向量。其算法如下: Step 0:初始化数据0,, 1.A z k = Step 1:计算1k k y A z +=。 Step 2:令 k k m y ∞=。 Step 3:令 k k k z y m = ;如果1k k m m +≈或1k k z z +≈,则 goto Step 4;否则 , k = k + 1 ,goto Step 1。 Step 4:输出结果 算法说明与要求 输入参数为实数矩阵、初始向量、误差限与最大迭代次数。输出 参数为特征值及相对应的特征向量。注意初始向量不能为“0”向量。 (2) 迭代法的原理 如果能将方程 Ax =b 改写成等价形式:x=Bx+f 。如果B 满足:ρ(B )<1,则对于任意初始向量 x (0) ,由迭代 x ( k + 1) = Bx (k ) + f 产生的序列均收敛到方程组的精确解。迭代法中两种最有名的迭代法就是Jacobi 迭代法,它的迭代矩阵 B 为: 1()J D L U -=-+,1 f D b -= 其中,D 为系数矩阵 A 的对角元所组成对角矩阵,L 为系数矩阵 A 的对角元下方所有元素所组成的下三角矩阵,U 为系数矩阵 A 的对角元上方所有元素所组成的上三角矩阵。 算法如下: Step 0:初始化数据 00,,,,k A b x δ=和ε。 Step 1:计算D,L,U,J 或G, 得到迭代矩阵B. Step 2::1k k =+ 0x B x f * =+ 0x x = 如果0x x δ-<或()f x ε≤,goto Step 3?否则 goto Step 2。 Step 3:输出结果。 程序说明与要求

数据结构----稀疏矩阵运算器课程设计报告书

科技大学 数据结构课程设计说明书 题目:稀疏矩阵运算器设计 学生: 学号: 专业:计算机科学与技术 班级:计09-1班 指导教师:月峰 2011 年 6 月 24 日

稀疏矩阵运算器设计 摘要 摘要:设计一稀疏矩阵运算器。实现转置,相加,相乘的功能。用“带行逻辑信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相转置、相加和相乘的运算,采用分级的设计方法,分别设计出转置、加、乘运算器的子程序,相加运算时只要依次扫描两矩阵的行号和列号,若相等则相加后存入结果矩阵,不等时则存入较小的。相减运算与相加运算相同,同样比较两矩阵的行号和列号,只是不等时,若第一个小,则存入第一个的元素,若第二个小,则存入其相反数。相乘运算要先判断两矩阵能否相乘。通过给顶的行号和列号找出原矩阵对应的元素值。当在三元组表示中找到时返回其元素值,找不到时,说明该位置为0,因此返回0。然后利用该函数计算出C的行号i和列号j 处的元素值,若该值不为0,则存入矩阵,否则不存入。通过实验表明本程序能够进行稀疏矩阵的相加,相减,相乘运算。具备矩阵的加、减、乘功能。 关键词:转置运算器;相加运算器;相乘运算器

目录 稀疏矩阵运算器设计........................................................ I 摘要................................................................... II 第一章需求分析. (1) 第二章概要设计 (2) 第三章设计步骤 (6) 3.1 函数说明 (6) 3.2 设计步骤 (7) 第四章设计理论分析方法 (20) 4.1 算法一:矩阵转置 (20) 4.2 算法二:矩阵加法 (20) 4.3 算法三:矩阵乘法 (21) 第五章程序调试 (23) 第六章心得体会 (25) 参考文献 (26)

分块矩阵乘法的例子

分块矩阵乘法的例子 例 1 用分块法计算,AB 其中 00 51 2414 21,5 31001200 2 0-???? ? ?== ? ? ? ?-? ?? ? A B . 解 B A,如上分块, ???? ??=2221 1211 A A A A A , ??? ? ??=2322 21 131211 B B B B B B B , 其中 111221224 21(0,0),(5), ,,0 12????==== ? ?-?? ?? A A A A ()()()0,20,0,01,1342,51232221131211===??? ? ??-=???? ??=???? ??=B B B B B B ; 令==C AB ??? ? ??232221 131211 C C C C C C ,其中 =+=2112111111B A B A C )0()0)(5(51)00(=+??? ? ??, =+=2212121112B A B A C )00(()()()1002051342=+???? ??, =+=2312131113B A B A C )0()0)(5(01)00(=+???? ??-, =+=2122112121B A B A C ??? ? ??-=???? ??+???? ?????? ??-514)0(21511024, =+=2222122122B A B A C ???? ??-=???? ??+???? ?????? ??-332014)20(2113421024, =+=2322132123B A B A C ??? ? ??-=???? ??+???? ??-???? ??-04)0(21011024.

电力网节点导纳矩阵计算例题与程序

电力网节点导纳矩阵计算例题与程序 佘名寰 编写 用计算机解算电力网潮流电压和短路电流问题首先需确定电力网的节点导纳矩阵或节点阻抗矩阵。本文通过例题介绍用网络拓扑法计算节点导纳矩阵的方法和程序,程序考虑了线路并联电容和变压器支路标么变比不为1时的影响。程序用MATLAB 语言编写,线路参数均采用标么值。本文稿用office word 2007 版编写,可供电气专业人员计算相关问题时参考。 1.用网络拓扑计算节点导纳矩阵 1.1网络拓扑矩阵: 【例1.1】 例图1-1是有5 个节点和5条支路的网络,节点5作为基准参考点,1 ,2, 3, 4为独立节点,支路编号和方向图中已标识。 例图1-1 对于具有n 个节点b 条支路的有向图,它的关联矩阵为一个N ×B 的矩阵A a : A a =[a ij ] 若支路j 与节点i 相关,且箭头背离节点i ,则a ij =1,若箭头指向节点则a ij =-1,若支路j 与节点i 无关,则a ij =0, 图1-1所示的有向图的关联矩阵为 ① ② ③ ④ ⑤ 支路编号 A ij =[ ?10100110?100?1?10?100.01000001] 行编号从上到下为1 2 3 4 5节点编号(5为参考节点) 去掉第5行即为独立节点的关联矩阵。 以下介绍生成网络关联矩阵的M 函数文件 ffm.m : % M FUNCTION ffm.m

% Np is number of node point,Nb is number of braches % nstart--the start point of branches ,nend -- the end point, % A -- network incidence matrix function [A]=ffm(nstart,nend) global Np Nb n=length(nstart); A=zeros(Np,Nb); for i=1:n A(nstart(i),i)=1; A(nend(i),i)=-1; end 以例图1-1网络为例调用ffm.m 文件求其关联矩阵 运算以上程序可得关联矩阵 mm ij 如下: mm = -1 0 1 0 0 1 1 0 -1 0 0 -1 -1 0 -1 0 0 0 1 0 0 0 0 0 1 Mm ij 明显与A ij 是相同的。 1.2生成节点导纳矩阵程序: ⑴ 由网络原始矩阵计算节点导纳矩阵公式 Y=AY s0A t (1-1) Y ----节点导纳矩阵 A------网络关联矩阵 A t -----A 的转置矩阵 Y S0----网络原始导纳矩阵 若网络各支路阻抗为 Z b =[z b1,z b2,……,z bn ] 则Z S0=[ z b100000z b20000 0:0000.0:00 00 0z bn ] Y s0=Z s0-1 (1-2) Y=A Z s0-1A t (1-3) ⑵ 节点导纳计算程序 以例1-1网络为例,在不计对地电容和变压器变比假定为1条件下,节点导纳矩阵计算程序如下: clear global Np Nb % Np is number of node point,Nb is number of braches, Np=5;Nb=5;

数据结构 稀疏矩阵运算器课程设计

数据结构----稀疏矩阵运算器课程设计 目录 稀疏矩阵运算器设计............................................................................................ I 摘要................................................................................................................ ... II 第一章需求分析 (1) 第二章概要设计 (2) 第三章设计步骤 (6) 3.1 函数说明 (6) 3.2 设计步骤 (7) 第四章设计理论分析方法 (20) 4.1 算法一:矩阵转置.....................................................................

20 4.2 算法二:矩阵加法..................................................................... 20 4.3 算法三:矩阵乘法 (21) 第五章程序调试 (23) 第六章心得体会 (25) 参考文献 (26) 第一章需求分析 1.稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。

2.以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现矩阵转置,求逆,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。 3.演示程序以用户和计算机的对话方式执行,数组的建立方式为边输入边建立。 4.由题目要求可知:首先应输入矩阵的行数和列数,并判别给出的两个矩阵的行、列数对于所要求作的运算是否相匹配。 5.程序可以对三元组的输入顺序不加以限制;根据对矩阵的行列,三元组作直接插入排序,从而进行运算时,不会产生错误。 6.在用三元组表示稀疏矩阵时,相加、乘积和相减所得结果矩阵应该另生成;矩阵求逆时,为了算法方便,使用二维数组存放。 7.程序在VC6.0环境下设计。 程序执行的命令为:1.稀疏矩阵转置; 2.稀疏矩阵加法; ;3. 稀疏矩阵乘法; 4.退出 的工作。 第二章概要设计 1.抽象数据类型稀疏矩阵的定义如下: ADT SparseMatrix{ 数据对象:D={a|i=1,2,…,m; j=1,2,…,n;

电力系统分析作业电网节点导纳矩阵的计算机形成

电力系统分析作业——电网节点导纳矩阵的计算机形成 编程软件:matlab R2010b 程序说明: 1.如果已经输入i-j支路的信息,则不可再输入j-i支路的信息。 2.变压器支路的第一个节点编号默认为变压器一次侧,即变压器的等值电路中的阻抗归算侧,亦即变压器非标准变比的1:k中的‘1’。 3.标幺值等值电路中,如果变比为1:1,则默认为线路,因此,变压器的非标准变比不可以是1:1。 5.如果变压器支路也有导纳B不为零,则说明此导纳就是励磁导纳,与线路的导纳B/2不同含义,只算作变压器原边的自导纳。 4.由于程序执行的是复数运算,所以即使实部为零时,也会输出实部‘0’。 程序代码: a=load('');%从’’中读入数据 [m,n]=size(a); w=1i; u=1; while (u<=m) hnode=a(u,1); enode=a(u,2); z=a(u,3)+a(u,4)*w; b=a(u,5)*w; k=a(u,6); y(hnode,enode)=-1/(k*z); y(enode,hnode)=-1/(k*z); y(hnode,hnode)=y(hnode,hnode)+1/(k*z)+(k-1)/(k*z); y(enode,enode)=y(enode,enode)+1/(k*z)+(1-k)/(k*k*z); if (abs(k-1)<%如果为线路 y(hnode,hnode)=y(hnode,hnode)+b; y(enode,enode)=y(enode,enode)+b; end

if (abs(k-1)>%如果为变压器 y(hnode,hnode)= y(hnode,hnode)-b; end u=u+1; end [m,n]=size(y); disp(‘Y=’); disp(y(1:m,1:n)); clear; 算例 输入数据: 首端编号末端编号电阻电抗电纳/2 变比 2 3 1 4 2 0 0 5 3 0 0 1 2 1 1 3 0 1 输出数据: Y= - + + 0 0 + + 0 + 0 + + 0 0 + 0 0 + 0 0 0 0 0 0 + 0 0 经手算校验,程序结果准确。

矩阵链算法

/************************ Matrix Chain Multiplication ***************************/ /************************ 作者:Hugo ***************************/ /************************ 最后修改日期:2015.09.10 ***************************/ /************************ 最后修改人:Hugo ***************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; using System.Collections; namespace Matrix { class Program { public static int nummulti = 0; static ArrayList list1 = new ArrayList();//定义计算式存储列表 static ArrayList listrow = new ArrayList();//定义矩阵行数存储列表 static ArrayList listcolumn = new ArrayList();//定义矩阵列数存储列表 static void Main(string[] args) { /****************************************************************************** *****************/ //从键盘上获取矩阵 int nummatrix = Int32.Parse(Console.ReadLine()); int countmat = 0; for (countmat = 0; countmat < nummatrix; countmat++) { string s = Console.ReadLine(); string[] str = s.Split(' ');//把输入的一行字符按空格拆分 listrow.Add(Int32.Parse(str[1]));//行数存储到矩阵行数存储列表 listcolumn.Add(Int32.Parse(str[2]));//列数存储到矩阵列数存储列表

稀疏矩阵的运算课程设计

数据结构 课程设计说明书题目: 稀疏矩阵的运算 院系:计算机科学与工程学院 专业班级:计算机10-**班 学号: 201030**** 学生姓名: ****** 指导教师: ****** 2011年 12 月 28 日

安徽理工大学课程设计(论文)任务书 计算机科学与工程学院 2011年 11 月 8 日

安徽理工大学课程设计(论文)成绩评定表

目录 1 问题描述 (1) 2 需求分析 (1) 3 总体设计 (2) 3.1 Matrix结构的定义 (2) 3.2 系统流程图 (3) 4 详细设计 (4) 4.1 “菜单”界面 (4) 4.2 建立矩阵 (4) 4.3 显示矩阵 (6) 4.4 矩阵的转置 (7) 4.5 矩阵的加法运算 (8) 4.6 矩阵的减法运算 (9) 4.7 矩阵的乘法运算 (9) 5 程序运行 (11) 5.1 输入矩阵 (11) 5.2 矩阵转置 (11) 5.3 矩阵加法 (12) 5.4 矩阵减法 (12) 5.5 矩阵乘法 (12) 5.6 退出及错误提示 (13) 6 总结 (13) 参考文献 (14)

1 问题描述 (1)题目内容:设计稀疏矩阵运算系统实现两个稀疏矩阵的加法、减法、乘法以 及转置操作。 (2)基本要求: ①存储结构选择三元组存储方式; ②实现一个稀疏矩阵的转置运算; ③实现两个稀疏矩阵的加法运算; ④实现两个稀疏矩阵的减法运算; ⑤实现两个稀疏矩阵的乘法运算。 (3)设计目的:通过本次课程设计,了解稀疏矩阵的一些基本运算操作,并通过 相关的程序代码实现。 2 需求分析 经过本次的课程设计,我认为稀疏矩阵运算系统主要实现的功能如下:(1)建立矩阵:只有先建立了矩阵,才能够对矩阵进行运算操作,包括建立矩阵 A和矩阵B; (2)转置运算操作:对矩阵A或者矩阵B进行转置运算,输出相应的转置矩阵; (3)四则运算操作:该步骤由两个矩阵同时参与,对其进行加法运算(A+B)、减 法运算(A-B)以及乘法运算(A*B和B*A); (4)退出:当做完矩阵的运算操作之后,就可以点击它退出该界面。 在这次设计中用到了一些变量和函数,例如:void Display(Matrix M);int Max(int i,int j);Matrix Zero(Matrix M)等,下面会做进一步详细的介绍。

第二章 矩阵及其运算测试题

第二章 矩阵及其运算测试题 一、选择题 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 -----+

matlab实现导纳矩阵

Matlab形成节点导纳矩阵 学号:0214393 姓名:侯成滨 引言:电力网的运行状态可用节点方程或回路方程来描述。节点导纳矩阵是以系统元件的等值导纳为基础所建立的、描述电力网络各节点电压和注入电流之间关系的线性方程。导纳矩阵计算是电力系统分析最基本的计算。除它自身的重要作用之外,还是网损计算、静态安全分析、暂态稳定计算、小干扰静态稳定计算、短路计算、静态和动态等值计算的基础。本次任务是用计MATLAB语言编写程序求出潮流计算中要用到的导纳矩阵。为了确定结果是否正确,与一个手工计算比较运算结果,验证程序是否正确。 一、分析网络等效电路 此电力系统是一个6节点,7支路的电力网络。可以把系统等值网络画出来,如图1-1。 图1-1 某电力系统的等值网络 在计算电力系统网络的潮流分布时,我们需要把变压器转化成变压器的∏型等值电路来进行计算器等效导纳,根据等效电路的等效原则,可以把上图等效成如图1-2导纳等值网络图。对导纳等值网络图简化电路图,可以得到图1-3简化导纳等值电路图,方便潮流计算中导纳矩阵的计算。

图1-2电力系统网络的导纳等值电路 图1-3电力系统简化等值电路图 二、MATLAB程序形成导纳矩阵 导纳矩阵的计算总结如下: 1)导纳矩阵的阶数等于电力系统网络的节点数; 2)导纳矩阵各行非对角元素中非零元素的个数等于对应节点所连的不接地支路数;

3)导纳矩阵的对角元素,即各节点的自导纳等于相应节点所连之路的导纳之和: Y ij=y ij j∈i 其中,y ij为节点i与节点支路阻抗Z ij的倒数,符号j∈i表示j属于i或与i相连的j,即∑内只包括与节点i直接相连的节点j。当节点i有接地支路时,还应包括j=0的情况。 4)导纳矩阵非对角元素等于节点i与节点j之间的导纳的负数。 2.1 MATLAB程序及其运行 节点导纳程序如下: N=input('请输入节点数: N='); L=input('请输入支路数: L='); B=input('请输入支路信息: B='); X=input('请输入由节点号及其对地阻抗形成的矩阵:X='); Y=zeros(N); for n=1:N; if X(n,2)~=0; p=X(n,1); Y(p,p)=1./X(n,2); end end for n=1:L if B(n,6)==0 p=B(n,1);q=B(n,2); else p=B(n,2);q=B(n,1); end Y(p,q)=Y(p,q)-1./(B(n,3)*B(n,5)); Y(q,p)=Y(p,q); Y(q,q)=Y(q,q)+1./(B(n,3)*B(n,5)^2)+B(n,4)./2; Y(p,p)=Y(p,p)+1./B(n,3)+B(n,4)./2; end disp('导纳矩阵Y='); disp(Y) 运行结果如下:

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