数学实验矩阵的运算

数学实验矩阵的运算
数学实验矩阵的运算

数学实验报告

学院:

班级:

学号:

姓名:

完成日期:

实验四矩阵的运算

(一)投入产出分析

一.实验目的

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个单位时,农业、制造业、服务业的总产出分别增加 1.3459,0.5634,0.4382个单位;当制造业的外部需求增加1个单位时,农业、制造业、服务业的总产出分别增加0.2504,1.2676,0.4304个单位;当服务业的外部需求增加1个单位时,农业、制造业、服务业的总产出分别增加0.3443,0.4930,1.2167个单位。四.实验总结

投入产出的理论依据,主要是矩阵运算和逆矩阵,投入和产出分析在编制和修订宏观计划、开展紧急预测和项目效果预测、研究价格水平及其变动影响,研究产业结构及其关联程度,投资对消费的带动分析等方面对会有很重要的应用。

(二)Hill密码的加密、解密与破译

一、实验目的

1. 复习线性代数, 矩阵, 线性空间与线性变换等概念和

运算.

2. 熟悉Hill密码体制的加密, 解密和破译过程.

3. Hill密码体制的加密, 解密和破译过程的MATLAB编

程实践.

二、问题描述

对明文为“Mr Hill made this code”,利运用不同的密匙矩

阵加密矩阵,实现Hill加密与解密过程。

三.实验过程

(1)模型建立于问题分析

简单起见,为了使明文参与矩阵运算,建立如下表格2-1:

表2-1 26个英文字母、空格、句号与数字之间的对应关系设明文为M=(m1, m2,…,m i)T,密匙矩阵为可逆的l x l 的方阵,则经过线性变换得到密文C=E K(M)=(c1c2…cI)T,其中

C1=(k11m1+ k12m2+…+ k1l m l)mod28,

C2=(k21m1+ k22m2+…+ k2l m l)mod28,

………….

C l=(k l1m1+ k l2m2+…+ k ll m l)mod28,

或写成矩阵形式

C=(KM)mod28,

其中

C=(C1,C2,…,C l)T ,M=(m1,m2,…,m l)T,K=(k ij)lxl 解密得明文

M=(K-1C)mod28

注意,明文、密文都是非负实数,故密匙矩阵K及其逆矩阵K-1的元素都应该是非负实数,不能是负整数、分数、

或小数。当密匙矩阵K的行列式的值等于+1或-1,则逆矩阵

K-1的元素是整数。若K-1的元素有负整数,再对矩阵K-1的所有元素加28的若干倍,再取模28,可保证矩阵K-1的所有元素为正整数。密文解密后可得非负整数明文M,与原明文相同。

(2)加密

对明文为“Mr Hill made this code。”,按表2-1的规则映射为数集{13,18,0,8,9,12,12,0,13,1,4,5,0,20,8,9,19,0,3,15,4,5,27,0},假设将消息从左到右,每4个字符分为一组,并将对应的四个整数排列成4维的列向量,加密后仍为4维的列向量,其分量仍为整数,要发出的消息可写为一个矩阵:

. 13 9 13 0 19 4

M= 18 12 1 20 0 5

0 12 4 8 3 27

8 0 5 9 15 0

为求出合适的密匙矩阵K1,在一个4x4阶矩阵中,任设二元函数的值为x,y,其余元素给出具体的非负整数值,并令其行列式的值的绝对值为1,可得一个二元一次或二元二次不定方程,可求其正整数解,如取:

4 x 8 y

K1= 12 1 6 9 , I K1I=1,

3 6

4 6

2 11

3 8

利用如下的MATLAB代码可求得密匙矩阵K1的行列式:

syms x y;

K=[4,x,8,y;12,1,6,9;3,6,4,6;2,11,3,8];

det_K=det(K)

运行结果:

det_K=

-760-105*x+187*y

可知二元一次方程为

-760-150x+187y=1,即105x-187y=-761. 下面利用辗转相除法求一整数解。

设u=x,v=-y,得

105u+187v=-761

对上式辗转相除:

187=1x105+82

105=1x82+23

82=3x23+13

13=1x10+3

10=3x3=1

3=3x3=0

从而得到

187 = 1 1 1 1 3 1 1 1 1 1 3 1 3 1 1 105 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0

= 187 57 1 = Q 1

105 32 0 0 ,

1 = Q-1 187 = -3

2 57 187

0 105 105 -187 105

也即

105x57+187x(-32)=1

两边同时乘以-761,得

105x(-43377)+187x24352=-761

故u=-43377,v=24352为一个特解,

从而u=-43377-187t,v=24352+105t,t为整数

故而x=-43377-187t,y=-24532-105t,t为整数

不妨取t=-232,可得x=7,y=8.从而密匙矩阵可取为

4 7 8 8

K1= 12 1 6 9

3 6

4 6

2 11

3 8

以上过程可采用如下的MATLAB代码实现;

syms t;

Q=[1 1;1 0]* [1 1;1 0]* [3 1;1 0]* [1 1;1 0]* [1 1;1 0]* [3 1;1 0]* [3 1;1 0]

S=[187;105]

Q*[1;0]

Q_inv=inv(Q)

uv0=[-761*Q_inv(1,2) -761*Q_inv(1,1)]

gs=gcd(S(1),S(2));

u=uv0(1)-S(1)/gs*t;

v=uv0(2)+S(2)/gs*t;

u0=uv0(1)-S(1)/gs*(-232);

v0=uv0(2)+S(2)/gs*(-232);

x0=u0,;

y0=-v0;

于是将要发出的信息乘以K1变成“密码”后发出:

4 7 8 8 13 9 13 0 19 4

(K1M)mod 28 = 12 1 6 9 18 12 1 20 0 5

3 6

4 6 0 12 4 8 3 27

2 11

3 8 8 0 5 9 15 0

18 20 19 24 24 15

C= 22 24 2 9 17 19

27 7 7 10 19 10

8 18 5 8 27 4

对照表2-1可知接受者接到的密文是”rv.htxgrsbgexijhxqs.osjd”.

(3)解密

接收者收到信息”rv.htxgrsbgexijhxqs.osjd”后,运用事先约定的密匙矩阵K1的逆矩阵K-1解密,从密码中恢复明文,当K-1得元素出现负整数,则加上28的若干倍数,使它的元素全为非负整数,再取模28可得解密的密匙矩阵K2 根据表2-1,反过来查表,即可得明文,解密正确。给定密匙矩阵,利用如下代码可求得问题的解:

M=[13 9 13 0 19 4;18 12 1 20 0 5;0 12 4 8 3 27; 8 0 5 9 15 0];

K1=[4 7 8 8; 12 1 6 9; 3 6 4 6;2 11 3 8];

det(K1)

C=mod(K1* M,28)

K1_inv=inv(K1)

K1_inv=round(K1_inv);

K2=mod(K1_inv,28)

M=mod(K2*C,28)

ans =

1.0000

C =

18 20 19 24 24 15

22 24 2 9 17 19

27 7 7 10 19 10

8 18 5 8 27 4 K1_inv =

-112.0000 -34.0000 371.0000 -128.0000 -105.0000 -32.0000 348.0000 -120.0000 -39.0000 -12.0000 130.0000 -45.0000 187.0000 57.0000 -620.0000 214.0000 K2 =

0 22 7 12

7 24 12 20

17 16 18 11

19 1 24 18

M =

13 9 13 0 19 4

18 12 1 20 0 5

0 12 4 8 3 27

8 0 5 9 15 0

此矩阵与原矩阵相符,解密成功。

现依照上面步骤取另一个可逆矩阵K2,来作为密匙为求出合适的密钥矩阵K2,在一个4*4阶的矩阵中,任设二元素的值为x,y,其余元素给出具体的非负整数数字,并令其行列式的值等于1或-1,可得一个二元一次或二元二次不定方程,可求其正整数解,如取

1 x

2 y

K2 = 3 1 6 9 ,|K2|=1.

3 6

4 6

2 7

3 8

利用如下的代码可求得密钥矩阵K2行列式:

syms x y;

K=[1,x,2,y;3,1,6,9;3,6,4,6;2,7,3,8];

det_K=det(K)

运行结果:

det_K =

21*x - 23*y + 62

可知二元一次方程为21x-23y+62=1,即21x+61=23y

下面利用枚举法求一整数解,代码如下:

x=1;

while mod(21*x+61,23)~=0

x=x+1;

end

x

y=(21*x+61)/23

运行结果:

x =

19

y =

20

故密钥矩阵(发送者和接受者事先都知道的矩阵)可取为

1 19

2 20

K2= 3 1 6 9

3 6

4 6

2 7

3 8

于是将要发出的信息(或矩阵)经乘以K2变成“密码”后发

出:

(K2 M)mod28= 11 9 0 16 17 13

17 27 25 9 14 11

27 7 7 10 19 10

20 26 1 12 27 12

=C

对照表5-4可知接受者收到的密文是

“kg.ti.gz ygapijlqns.mkjl”.

3.解密

接受者收到信息“kg.ti.gz ygapijlqns.mkjl”后,运用事先约定的密钥解密,即用

K2-1= -112 -54 -271 544

21 10 51 -102

87 42 211 -423

-23 -11 -56 112

从密文中恢复明文。由于K2-1的元素出现负整数,故把它的每一个元素加上28的若干倍数,使它的元素全为非负整数,再取模28.即取

K= 0 2 9 12

21 10 23 10

3 1

4 1

5 25

5 17 0 0

13 9 13 0 19 4 (KC)mod 28= 18 12 1 20 0 5 =M.

0 12 4 8 3 27

8 0 5 9 15 0

以上可有以下代码实现

M=[13 9 13 0 19 4;18 12 1 20 0 5;0 12 4 8 3 27; 8 0 5 9 15 0];

K1=[1 19 2 20;3 1 6 9;3 6 4 6;2 7 3 8];

det(K1)

C=mod(K1* M,28)

K1_inv=inv(K1)

K1_inv=round(K1_inv);

K=mod(K1_inv,28)

M=mod(K2*C,28)

运行结果

ans = 1.000

C =

11 9 0 16 17 13

17 27 25 9 14 11

27 7 7 10 19 10

20 26 1 12 27 12

K1_inv =

-112 -54 -271 544

21 10 51 -102

87 42 211 -423

-23 -11 -56 112

K =

0 2 9 12

21 10 23 10

3 1

4 1

5 25

5 17 0 0

M =

13 9 13 0 19 4

18 12 1 20 0 5

0 12 4 8 3 27

8 0 5 9 15 0

根据表5-4,反过来查表,即可知得明文“mr hill made this code.”解密正确。

四.实验总结

Hill密码是基于矩阵的线性变换而设计的一种密码。Hill 密码的思想比较简单,其最大的好处是隐藏了字符的频率信息,使得传统的通过字频来破译密文的方法失效。从实验过程可以看出,利用矩阵及其运算可以方便的描述加密和解密

过程,而MATLAB的强大矩阵运算功能使得Hill密码的实现变得简单。

算法分析_实验报告3

兰州交通大学 《算法设计与分析》 实验报告3 题目03-动态规划 专业计算机科学与技术 班级计算机科学与技术2016-02班学号201610333 姓名石博洋

第3章动态规划 1. 实验题目与环境 1.1实验题目及要求 (1) 用代码实现矩阵连乘问题。 给定n个矩阵{A1,A2,…,A n},其中A i与A i+1是可乘的,i=1,2,…,n-1。考察这n 个矩阵的连乘积A1A2…A n。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序,这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,则可以依此次序反复调用2个矩阵相乘的标准算法(有改进的方法,这里不考虑)计算出矩阵连乘积。 确定一个计算顺序,使得需要的乘的次数最少。 (2) 用代码实现最长公共子序列问题。 一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X= < x1, x2,…, xm>,则另一序列Z= < z1, z2,…, zk>是X的子序列是指存在一个严格递增的下标序列< i1, i2,…, ik>,使得对于所有j=1,2,…,k有Xij=Zj 。例如,序列Z=是序列X=的子序列,相应的递增下标序列为<2,3,5,7>。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。例如,若X= < A, B, C, B, D, A, B>和Y= < B, D, C, A, B, A>,则序列是X和Y的一个公共子序列,序列也是X和Y的一个公共子序列。而且,后者是X和Y的一个最长公共子序列,因为X和Y没有长度大于4的公共子序列。 (3) 0-1背包问题。 现有n种物品,对1<=i<=n,已知第i种物品的重量为正整数W i,价值为正整数V i,背包能承受的最大载重量为正整数W,现要求找出这n种物品的一个子集,使得子集中物品的总重量不超过W且总价值尽量大。(注意:这里对每种物品或者全取或者一点都不取,不允许只取一部分) 使用动态规划使得装入背包的物品价值之和最大。 1.2实验环境: CPU:Intel(R) Core(TM) i3-2120 3.3GHZ 内存:12GB 操作系统:Windows 7.1 X64 编译环境:Mircosoft Visual C++ 6 2. 问题分析 (1) 分析。

数学实验5矩阵运算和解线性方程组

实验5 矩阵运算和解线性方程组一、实验题目 用Mathematica软件进行矩阵运算和解线性方程组。 二、预期目标 利用Mathematica进行: 1. 矩阵运算. 2. 矩阵的行列式与逆. 3. 矩阵的秩. 4. 线性方程组求解. 三、常用命令 方阵A的行列式: 给出方阵A的逆矩阵: 矩阵A的转置矩阵: 用初等行变换将矩阵A化成的行最简阶梯形矩阵: 将矩阵A在工作区中以矩阵格式输出: 求矩阵方程XA B,AX B ==的解: 求线性方程组b AX=的解: 求代数方程的解: 四、练习内容 1.计算: (1) 1 2 3 4 2 1 4 10 1 0 2 1 10 1 2 0 2 1 1 2 50 2 3 2???? ? ?-+- ? ? ? ?--???? 命令:

结果: (2) 1 0 5 1 0 3 1 2 10 2 0 1 5 0 3 1 0 1 0 1 0 2 0 3 0 ?? - ?? ? - ?? ? ? ? ? ? ?? ? ??? ?? 命令: 结果: 2.求矩阵 1 2 0 0 1 1 1 2 3 ?? ? ? ? - ?? 的秩。 命令: 结果: 3.判断下列矩阵是否可逆,如可逆,求其逆矩阵。 (1) 2 2 1 1 2 4 5 8 2 -?? ? - ? ??? 命令: 结果: (2) 1 2 3 4 2 3 1 2 1 1 1 1 1 0 2 6?? ? ? ? - ? --??命令: 结果:

(3) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1?? ? -- ? ?-- ?-- ??命令: 结果: 4.设 1 1 1 1 1 3 2 1 0 4 3 2 1 1 1 1 2 5 X - ???? ? ? = ? ? ? ? ???? ,求X。 命令: 结果: 5.设 1 0 21 0 1 31 1 1 11 X ???? ? ? -= ? ? ? ? ???? ,求X。命令: 结果: 6.解线性方程组 1234 1234 1234 1234 224 4326 833412 33226 x x x x x x x x x x x x x x x x +-+= ? ?+-+= ? ? +-+= ? ?+--= ? 。 命令:结果:

矩阵分析实验报告

矩 阵 分 析 实 验 报 告 学院:电气学院 专业:控制工程 姓名:XXXXXXXX 学号:211208010001

矩阵分析实验报告 实验题目 利用幂法求矩阵的谱半径 实验目的与要求 1、 熟悉matlab 矩阵实验室的功能和作用; 2、 利用幂法求矩阵的谱半径; 3、 会用matlab 对矩阵分析运算。 实验原理 理念 谱半径定义:设n n A C ?∈,1λ,2λ,3λ, ,j λ, n λ是A 的n 个特征值,称 ()max ||j j A ρλ= 为关于A 的谱半径。 关于矩阵的谱半径有如下结论: 设n n A C ?∈,则 (1)[]()()k k A A ρρ=; (2)2 2()()()H H A A AA A ρρ==。 由于谱半径就是矩阵的主特征值,所以实验换为求矩阵的主特征值。 算法介绍 定义:如果1λ是矩阵A 的特征值,并且其绝对值比A 的任何其他特征值的绝对值大,则称它为主特征值。相应于主特征值的特征向量1V 称为主特征向量。 定义:如果特征向量中最大值的绝对值等于单位值(例如最大绝对值为1),则称其为是归一化的。

通过形成新的向量' 12=c n V (1/)[v v v ],其中c=v 且1max {},j i n i ≤≤=v v 可将特 征向量 '12n [v v v ]进行归一化。 设矩阵A 有一主特征值λ,而且对应于λ有唯一的归一化特征向量V 。通过下面这个称为幂法(power method )的迭代过程可求出特征对λ,V ,从下列向量开始: []' 0=111X (1) 用下面递归公式递归地生成序列{}k X : k k Y AX = k+11 1 k k X Y c += (2) 其中1k c +是k Y 绝对值最大的分量。序列{}k X 和{}k c 将分别收敛到V 和λ: 1lim k X V =和lim k c λ= (3) 注:如果0X 是一个特征向量且0X V ≠,则必须选择其他的初始向量。 幂法定理:设n ×n 矩阵A 有n 个不同的特征值λ1,λ2,···,,λn ,而且它们按绝对 值大小排列,即: 123n λλλλ≥≥≥???≥ (4) 如果选择适当的X 0,则通过下列递推公式可生成序列{[() ()( ) ]}12k k k k n X x x x '=???和 {}k c : k k Y AX = (5) 和: 11 1k k k X Y c ++= (6) 其中: () 1k k j c x +=且{} ()()1max k k j i i n x x ≤≤= (7) 这两个序列分别收敛到特征向量V 1和特征值λ1。即: 1lim k k X V →∞ =和1lim k k c λ→∞ = (8) 算法收敛性证明 证明:由于A 有n 个特征值,所以有对应的特征向量V j ,j=1,2,···n 。而且它们是

简便计算题及答案

1)125 ×(17 × 8)× 4 2)375 × 480 + 6250 × 48 3)25 × 16 ×125 4)13 × 99 5)75000 ÷ 125 ÷ 15 6)7900 ÷ 4 ÷ 25 7)150 × 40 ÷ 50 8)5600 ÷(25 × 7) 9)210 ÷ 42 × 6 10)39600 ÷ 25 11)67 × 21 +18 × 21 + 85 × 79 12)321 × 81 + 321 × 19

13)222222 × 999999 14)333333 × 333333 15)56000 ÷ (14000 ÷ 16) 16)654321 × 909090 +654321 ×90909 17)34 × 3535 -35 × 3434 18)27000 ÷ 125 19)345345 ÷ 15015 20)347 + 358 + 352 + 349 21)75 × 45 + 17 × 25 22)599996 + 49997 + 3998 + 407 + 89

23)(48 × 75 ×81)÷(24 × 25 × 27) 四年级数学简便计算题及答案: 1)125 ×(17 × 8)× 4 2)375 × 480 + 6250 × 48 = 125×8×4×17 =480×(375+625) =1000×68 =480000 =68000 3)25 × 16 ×125 4)13 × 99 =25×2×8×125 =13×(100-1) =50000 =1300-13 =1287 5)75000 ÷ 125 ÷ 15 6)7900 ÷ 4 ÷ 25 =75×1000÷125÷15 =7900÷(4×25) =75÷15×1000÷125 =79

算法分析与设计实验报告

算法设计与分析实验报告 班级:计科0902班 姓名:张华敏 学号:0909090814

矩阵连乘问题 一,实验内容: 二,写一个完整的代码来完整的实现矩阵连乘问题。 三,算法设计: 在矩阵连乘问题中,根据老师所讲和自己看书对动态规划方法的理解,通过最优子结构性质。再结合书上的算法,便可顺利的写出了代码 四,遇到的问题及解决方案: 只根据算法写出具体的实现过程刚开始觉得很难,觉得无从下手,不知道该用什么结构形式来存放各个参数,也不知道该怎样具体的实施算法的细节,但是课本上给出了一段实现代码给了我很大的启发,通过借鉴树上的代码实现再结合自己的努力,才终于完成了矩阵连乘全部的代码实现,包括最少连乘次数以及剖分方法。 五,源代码 package suanfa; public class Juzhen { public void matrixchain(int p[],int m[][],int s[][]){ i nt n=p.length-1; f or(int i=1;i<=n;i++){ m[i][i]=0; } f or(int r=2;r<=n;r++){ for(int i=1;i<=n-r+1;i++){ int j=i+r-1;

m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; s[i][j]=i; for(int k=i+1;k

实验2 矩阵及其运算

实验二 矩阵及其运算 一、实验目的 掌握基本的矩阵运算及常用的函数 二、实验内容 1. 变量、数组、向量等对象的生成方法; 2. 矩阵的创建方法; 3. 矩阵运算规则; 4. 特殊矩阵的创建与运算处理。 5. 常用函数的使用 三、实验步骤 1.已知m1=????? ???????11514412679810115133216 执行以下命令m1( 2 , 3 ),m1( 11 ),m1( : , 3 ),m1( 2 : 3 , 1 : 3 ), m1( 1 ,4 ) + m1( 2 ,3 ) + m1( 3 ,2 ) + m1( 4 ,1) 2. 已知: ??????????-=76538773443412A ???? ??????--=731203321B 求下列表达式的值: (1) B A K *611+=和I B A K +-=12(其中I 为单位矩阵) (2) B A K *21=和B A K *.22= (3) 331^A K =和3.32^A K = (4) B A K /41=和A B K \42= (5) ],[51B A K =和]2:);],3,1([[52^B A K =

3. 已知????? ???????----=1323151122231592127A (1)求矩阵A 的秩 (2)求矩阵A 的行列式 (3)求矩阵A 的逆 (4)求矩阵A 的特征值及特征向量 4. 求六阶单位矩阵的秩 5. 建立一个4*4的魔方矩阵,然后删除该矩阵的第二行; 6. 建立一个5*5的均匀分布的随机矩阵,取出矩阵的前3行构成矩阵B ,前两列构成矩阵C ,右下角43?子矩阵构成矩阵D ,B 与C 的乘积构成矩阵E 。 7. 利用diag 等函数产生下列矩阵。 20 4a 05 0708????=?????? 008b 075230????=-?????? 8. 将第3题中矩阵A 对角线的元素加30 9. 利用randn 函数产生均值为0,方差为1的6×8正态分布随机矩阵C ,然后统计C 中大于-0.3,小于0.3的元素个数t 。 10. 将第3题中A 矩阵的所有大于2的元素全部改为0,并显示修改后的矩阵 四、思考题 1. 以下变量名是否合法?为什么? (1)x2 (2)3col (3)_row (4)for 2. 当A=[34, NaN, Inf, -Inf, -pi, eps, 0]时,分析下列函数的执行结果:all(A),any(A),isnan(A),isinf(A),isfinite(A)。

矩阵乘法的并行化 实验报告

北京科技大学计算机与通信工程学院 实验报告 实验名称: 学生姓名: 专业: 班级: 学号: 指导教师: 实验成绩:________________________________ 实验地点: 实验时间:2015年05月

一、实验目的与实验要求 1、实验目的 1对比矩阵乘法的串行和并行算法,查看运行时间,得出相应的结论;2观察并行算法不同进程数运行结果,分析得出结论; 2、实验要求 1编写矩阵乘法的串行程序,多次运行得到结果汇总; 2编写基于MPI,分别实现矩阵乘法的并行化。对实现的并行程序进行正确性测试和性能测试,并对测试结果进行分析。 二、实验设备(环境)及要求 《VS2013》C++语言 MPICH2 三、实验内容与步骤 实验1,矩阵乘法的串行实验 (1)实验内容 编写串行程序,运行汇总结果。 (2)主要步骤 按照正常的矩阵乘法计算方法,在《VS2013》上编写矩阵乘法的串行程序,编译后多次运行,得到结果汇总。

实验2矩阵乘法的并行化实验 3个总进程

5个总进程 7个总进程

9个进程 16个进程 四:实验结果与分析(一)矩阵乘法并行化

矩阵并行化算法分析: 并行策略:1间隔行带划分法 算法描述:将C=A*B中的A矩阵按行划分,从进程分得其中的几行后同时进行计算,最后通信将从进程的结果合并的主进程的C矩阵中 对于矩阵A*B 如图:进程1:矩阵A第一行 进程2:矩阵A第二行 进程3:矩阵A第三行 进程1:矩阵A第四行 时间复杂度分析: f(n) =6+2+8+k*n+k*n+k*n+3+10+n+k*n+k*n+n+2 (k为从进程分到的行数) 因此O(n)=(n); 空间复杂度分析: 从进程的存储空间不共用,f(n)=n; 因此O(n)=(n); 2间隔行带划分法 算法描述:将C=A*B中的A矩阵按行划分,从进程分得其中的几行后同时进行计算,最后通信将从进程的结果合并的主进程的C矩阵中 对于矩阵A*B 如图:进程1:矩阵A第一行 进程2:矩阵A第二行 进程3:矩阵A第三行 进程3:矩阵A第四行 时间复杂度分析: f(n) =6+2+8+k*n+k*n+k*n+3+10+n+k*n+k*n+n+2 (k为从进程分到的行数) 因此O(n)=(n); 空间复杂度分析: 从进程的存储空间不共用,f(n)=n; 因此T(n)=O(n);

矩阵的运算及其运算规则

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

矩阵连乘问题算法分析与设计

矩阵连乘问题《算法分析与设计》

设计性实验报告 课程名称:《算法分析与设计》矩阵连乘问题实验题目:长:组员一:成 二:成员成员三:数学与计算机科学系别:系专业班级:指导教师:实验日期: 一、实验目的和要求

实验目的 熟悉动态规划算法设计思想和设计步骤,掌握基 本的程序设计方法,培养学生用计算机解决实际问题的能力。 实验要求 1、根据实验内容,认真编写源程序代码、上机调试程序,书写实验报告。 2、本实验项目考察学生对教材中核心知识的掌握程度和解决实际问题的能力。 3、实验项目可

以采用集中与分散实验相结合的方式进行,学生利用平时实验课时间和课外时间进行 实验,要求在学期末形成完整的项目程序设计报告。 二、实验内容提要 矩阵连乘问题给定n个矩阵{A,A,…,A}, 其中,Ai与Ai+1是可乘的,n21A,A,…,A。由于矩阵乘法满足结n-1。考查这n个矩阵的连乘积i=1,2,…,n12合律,故计算矩阵的连乘积可以有 许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反 复调用2个矩阵相乘的标准算法计算出矩阵连乘积。完全加括号的矩阵连乘积可 递归地定义为: (1)单个矩阵是完全加括号的; (2)矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(BC)。 三、实验步骤下面考虑矩阵连乘积的最优计算次序问题的动态规划方法。(1)分析最优解的结构(最优子结构性质)设计求解具体问题的动态规划算法的第一步是刻画该问 题的最优解结构特征。对于矩阵乘积的最优计算次序问题也不例外。首先,为方便起见,降- 1 - 矩阵乘积Ai Ai+1…Aj简记为A[i:j]。

数学实验矩阵的运算

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

实验四矩阵的运算 (一)投入产出分析 一.实验目的 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

矩阵连乘实验报告

华北电力大学科技学院 实验报告 实验名称矩阵连乘问题 课程名称计算机算法设计与分析 专业班级:软件12K1 学生姓名:吴旭 学号:121909020124 成绩: 指导老师:刘老师实验日期:2014.11.14

一、实验内容 矩阵连乘问题,给定n个矩阵{A1,A2,…,A n},其中A i与A i+1是可乘的,i=1,2,3…,n-1。考察这n个矩阵的连乘A1,A2,…,A n。 二、主要思想 由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已经完全加括号,则可依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积。完全加括号的矩阵连乘积可递归的定义为: (1)单个矩阵是完全加括号的; (2)矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号 的矩阵连乘积B和C的乘积并加括号,即A=(BC)。 运用动态规划法解矩阵连乘积的最优计算次序问题。按以下几个步骤进行 1、分析最优解的结构 设计求解具体问题的动态规划算法的第1步是刻画该问题的最优解的结构特征。为方便起见,将矩阵连乘积简记为A[i:j]。考察计算A[1:n]的最优计算次序。设这个计算次序矩阵在A k和A k+1之间将矩阵链断开,1n,则其相应的完全加括号方式为((A1…A k)(A k+1…A n))。依此次序,先计算A[1:k]和A[k+1:n],然后将计

算结果相乘得到A[1:n]。 2、建立递归关系 设计动态规划算法的第二步是递归定义最优值。对于矩阵连乘积的最优计算次序问题,设计算A[i:j],1i n,所需的最少数乘次数为m[i][j],原问题的最优值为m[1][n]。 当i=j时,A[i:j]=A i为单一矩阵,无需计算,因此m[i][i]=0,i=1,2,…n。 当i

求矩阵的基本运算

求矩阵的基本运算 #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

数学实验矩阵的运算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个单位时,农业、制造业、服务业的总产出分别增加

算法分析实验三报告

《算法设计与分析》实验报告

目录 一、实验内容描述和功能分析. 二、算法过程设计. 三、程序调试及结果(附截图). 四、源代码(附源代码).

一、实验内容描述和功能分析. 1.矩阵连乘问题 内容描述:给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 功能分析:输入包含多组测试数据。第一行为一个整数C,表示有C 组测试数据,接下来有2*C行数据,每组测试数据占2行,每组测试数据第一行是1个整数n,表示有n个矩阵连乘,接下来一行有n+1 个数,表示是n个矩阵的行及第n个矩阵的列,它们之间用空格隔开。输出应该有C行,即每组测试数据的输出占一行,它是计算出的矩阵最少连乘积次数。 例如:输入:1输出:7500 3 10 100 5 50 2.Pebble Merging 内容描述:在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。 编程任务: 对于给定n堆石子,编程计算合并成一堆的最小得分和最大得分。 功能分析:输入由多组测试数据组成。每组测试数据输入的第1 行是正整数n,1≤n≤100,表示有n堆石子。第二行有n个数,分别表示每堆石子的个数。 对应每组输入,输出的第1 行中的数是最小得分;第2 行中的数是最大得分。 例如:输入:4 输出:43 4 4 5 9 54

二、算法过程设计. 1.矩阵连乘问题 矩阵连乘问题是通过设置数组,利用数组的横竖坐标来进行矩阵对应行与列的计算。 2.Pebble Merging 这个问题也是跟数组相关,通过寻找数组中的最大和最小值来进行计算。 三、程序调试及结果(附截图). 1.矩阵连乘问题 2.Pebble Merging

南邮MATLAB数学实验答案(全)

第一次练习 教学要求:熟练掌握Matlab 软件的基本命令和操作,会作二维、三维几何图形,能够用Matlab 软件解决微积分、线性代数与解析几何中的计算问题。 补充命令 vpa(x,n) 显示x 的n 位有效数字,教材102页 fplot(‘f(x)’,[a,b]) 函数作图命令,画出f(x)在区间[a,b]上的图形 在下面的题目中m 为你的学号的后3位(1-9班)或4位(10班以上) 1.1 计算30sin lim x mx mx x →-与3 sin lim x mx mx x →∞- syms x limit((902*x-sin(902*x))/x^3) ans = 366935404/3 limit((902*x-sin(902*x))/x^3,inf) ans = 0 1.2 cos 1000 x mx y e =,求''y syms x diff(exp(x)*cos(902*x/1000),2) ans = (46599*cos((451*x)/500)*exp(x))/250000 - (451*sin((451*x)/500)*exp(x))/250 1.3 计算 22 11 00 x y e dxdy +?? dblquad(@(x,y) exp(x.^2+y.^2),0,1,0,1) ans = 2.1394 1.4 计算4 2 2 4x dx m x +? syms x int(x^4/(902^2+4*x^2)) ans = (91733851*atan(x/451))/4 - (203401*x)/4 + x^3/12 1.5 (10)cos ,x y e mx y =求 syms x diff(exp(x)*cos(902*x),10) ans = -356485076957717053044344387763*cos(902*x)*exp(x)-3952323024277642494822005884*sin(902*x)*exp(x) 1.6 0x =的泰勒展式(最高次幂为4).

MATLAB矩阵实验报告

MATLAB 程序设计实验 班级:电信1104班 姓名:龙刚 学号:1404110427 实验内容:了解MA TLAB 基本使用方法和矩阵的操作 一.实验目的 1.了解MA TLAB 的基本使用方法。 2.掌握MA TLAB 数据对象的特点和运算规则。 3.掌握MA TLAB 中建立矩阵的方法和矩阵的处理方法。 二.实验内容 1. 浏览MATLAB 的start 菜单,了解所安装的模块和功能。 2. 建立自己的工作目录,使用MA TLAB 将其设置为当前工作目录。使用path 命令和工作区浏览两种方法。 3. 使用Help 帮助功能,查询inv 、plot 、max 、round 等函数的用法和功能。使用help 命令和help 菜单。 4. 建立一组变量,如x=0:pi/10:2*pi ,y=sin(x),在命令窗口显示这些变量;在变量窗口打开这些变量,观察其值并使用绘图菜单绘制y 。 5. 分多行输入一个MA TLAB 命令。 6. 求表达式的值 ()6210.3424510w -=+? ()22tan b c a e abc x b c a ππ++ -+=++,a=3.5,b=5,c=-9.8 ()220.5ln 1t z e t t =++,21350.65i t -??=??-?? 7.已知 1540783617A --????=??????,831253320B -????=????-?? 求 A+6B ,A 2-B+I A*B ,A.*B ,B*A A/B ,B/A [A,B],[A([1,3], :); B^2]

8.已知 23100.7780414565532503269.5454 3.14A -????-??=????-?? 输出A 在[10,25]范围内的全部元素 取出A 的前三行构成矩阵B ,前两列构成矩阵C ,右下角3x2子矩阵构成矩阵D ,B 与C 的乘积构成矩阵E 分别求表达式E

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 之间的六种关系运算的结果。

数学实验“矩阵特征值及相应特征向量的Jacobi法,QR法”实验报告(内含matlab程序)

西京学院数学软件实验任务书 课程名称数学软件实验班级数0901 学号0912020107 姓名李亚强 实验课题矩阵特征值及相应特征向量的Jacobi法,QR法 实验目的熟悉矩阵特征值及相应特征向量的Jacobi法,QR法运用Matlab/C/C++/Java/Maple/Mathematica等其中实验要求 一种语言完成 实验内容矩阵特征值及相应特征向量的Jacobi法,QR法成绩教师

实验十三实验报告 一、实验名称:矩阵特征值及相应特征向量的Jacobi法,QR法。 二、实验目的:熟悉矩阵特征值及相应特征向量的Jacobi法,QR 法。 三、实验要求:运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成程序设计。 四、实验内容: %矩阵特征值及相应特征向量的Jacobi法 function [D,R]=Jacobi(A,eps) if nargin==2 eps=1.0e-5; end n=length(A); R=eye(n); while 1 Amax=0; for l=1:n-1 for k=l+1:n if abs(A(l,k))>Amax Amax=abs(A(l,k)); i=l;j=k; end end end if Amax

t=1; else t=sign(d)/(abs(d)+sqrt(d^2+1)); end c=1/sqrt(t^2+1); s=c*t; for l=1:n if l==i Aii=A(i,i)*c^2+A(j,j)*s^2+2*A(i,j)*s*c; Ajj=A(i,i)*s^2+A(j,j)*c^2-2*A(i,j)*s*c; A(i,j)=(A(j,j)-A(i,i))*s*c+A(i,j)*(c^2-s^2); A(j,i)=A(i,j); A(i,i)=Aii; A(j,j)=Ajj; elseif l~=j Ail=A(i,l)*c+A(j,l)*s; Ajl=-A(i,l)*s+A(j,l)*c; A(i,l)=Ail;A(l,i)=Ail; A(j,l)=Ajl;A(l,j)=Ajl; end Rli=R(l,i)*c+R(l,j)*s; Rlj=-R(l,i)*s+R(l,j)*c; R(l,i)=Rli; R(l,j)=Rlj; end end D=diag(diag(A)); %矩阵特征值及相应特征向量的QR法 function l=qrtz(A,M) for(i=1:M) [q,r]=qr(A); A=r*q; l=diag(A); end

矩阵运算实验报告

实验报告 --矩阵运算 一.实验目的。 1.通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。 2.通过实践进一步领会程序设计的特点和应用,提高运用C++ 语言以及面向对象知识解决实际问题的能力。 3.通过实践掌握用C++ 语言编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识; 4.学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。为后续的相关课程的学习打下基础。 二.实验要求。 1.学会建立模板类; 2.实现矩阵的“加”、“减”、“乘”、“数乘”、“转置”; 3.动态存分配并用随机数填充; 4.注意“加”、“减”、“乘”要进行条件的判断; 三.设计思路。

3.1算法基本流程 1)获取用户输入的矩阵1的行数和列数,动态生成一个一维数组 2)利用随机数生成数组成员,并利用两个循环输出数组,使其符合矩阵的格式 3)矩阵2同矩阵1的处理方法 4)通过两个矩阵的行数和列数比较来判断能否进行加减乘等运算,如不能,输出相关信息 5)如能够进行计算,则利用数组进行相应运算,并按照正确格式输出 6)通过改变一维数组中元素的顺序来实现转置并输出 3.2算法流程图

四.基本界面。

五.关键代码。 5.1关键类的声明 class CMatrixclass { public: CMatrixclass() { int m_Row = 0; //行 int m_Col = 0; //列 m_pElements = NULL; //一维数组

相关文档
最新文档