当前位置:文档之家› VB矩阵相乘实验报告

VB矩阵相乘实验报告

实验报告四

题目:矩阵相乘

学生姓名:YQY

完成时间:2012年 11月 07日

1.问题描述

编程实现两矩阵相乘,要求:

1.界面输入矩阵A和B的行列数;

2.矩阵元素值由随机函数生成,随机函数取值范围由界面录入;

3.点击“计算”按钮,程序首先判断两矩阵是否满足矩阵相乘条件,若满足,则

将矩阵A、B和结果矩阵C显示在下方label中(注意格式对齐);若不满足,需给出提示信息,并清空相关textbox。

2. 关键代码

Imports

Public Class Form1

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = ""

TextBox5.Text = ""

TextBox6.Text = ""

TextBox7.Text = ""

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

Dim i, j, m, n, x, y, k1, k2, k3 As Integer

Dim sc1(10, 10), sc2(10, 10), sc3(10, 10) As Integer

Randomize()

If j <> m Then

MsgBox("两个矩阵无法进行相乘,请重新输入", , "警告")

Else

For k1 = 1 To i

For k2 = 1 To j

sc1(k1, k2) = Int(Rnd() * (Abs(y - x) + 1) + Min(x, y)) TextBox7.Text &= sc1(k1, k2) & Space(4)

Next

TextBox7.Text &= vbCrLf

Next

For k1 = 1 To m

For k2 = 1 To n

sc2(k1, k2) = Int(Rnd() * (Abs(y - x) + 1) + Min(x, y)) TextBox7.Text &= sc2(k1, k2) & Space(4)

Next

TextBox7.Text &= vbCrLf

Next

For k1 = 1 To i

For k2 = 1 To n

For k3 = 1 To j

sc3(k1, k2) += sc1(k1, k3) * sc2(k3, k2)

Next k3

TextBox7.Text &= sc3(k1, k2) & Space(4)

Next k2

TextBox7.Text &= vbCrLf

Next k1

End If

End Sub

End Class

结果显示如下:

2.问题总结及心得体会

首先判断两个矩阵能否相乘,当第一个矩阵的列数不等于第二个矩阵的行数时,两个矩阵无法进行相乘,这时弹出一个messagebox,说明两个矩阵无法进行相乘,当两个矩阵可以相乘时,用随机函数rnd()生成矩阵的每一个元素,并用for语句显示在textbox中,并且控制换行,当进行计算时,用三个for循环控制矩阵相乘,最外层的循环是结果矩阵的行数,中间的循环是结果矩阵的列数,最内层的循环是第一个矩阵的列数(即第二个矩阵的行数),这样就计算出两个矩阵的乘积,再用for循环控制结果矩阵的输出即可,这样就实现了两个矩阵的相乘。

vb6.0and2008区别,矩阵相乘例子

VB2008和VB6中使用dll的注意事项: 注册dll后就可在VB中像使用其他引用组件一样使用了,只是要注意VB2008和VB6中使用的不同之处。VB2008中调用函数时,输出参数如果为矩阵(一维或者二维),可以定义一个二维数组传入函数。但在VB6中不能这么调用,如果定义数组传给matlab编译的dll是得不到输出数据的,必须定义为variant变量,注意是变量,不是数组,才能获取matlab要输出的矩阵数据。当然,在VB2008中也可将参数定义为Object类型,同样可以正常获取输出数据。 矩阵相乘例子 m函数: function y=mul1(a,b) y=a*b; return vb Private themul As mu22.mu22 Private a(3, 3) As Double, b(3, 3) As Double Private Sub Command1_Click() Dim y As Variant '关键在这里 Dim i As Integer, j As Integer Set themul = New mu22.mu22 a(1, 1) = 1 a(1, 2) = 2 a(1, 3) = 3 a(2, 1) = 3 a(2, 2) = 2 a(2, 3) = 1 a(3, 1) = 1 a(3, 2) = 3 a(3, 3) = 2 b(1, 1) = 1 b(1, 2) = 1 b(1, 3) = 2 b(2, 1) = 2 b(2, 2) = 2 b(2, 3) = 3 b(3, 1) = 3 b(3, 2) = 3 b(3, 3) = 2

矩阵和数组的操作 实验报告

实验报告 课程名称:MATLAB上机实验实验项目:矩阵和数组的操作 实验地点: 专业班级:学号 学生姓名: 指导教师: 年月日

实验二矩阵和数组的操作 一.实验环境 计算机 MATLAB软件 二.实验目的 1.掌握矩阵和数组的一般操作,包括创建、保存、修改和调用等。 2.学习矩阵和数组的加减运算与乘法。 3.掌握对数组元素的寻访与赋值,会对数组进行一般的操作。 三.实验内容与步骤 1.用三种方法创建一个3×3矩阵,然后利用矩阵编辑器,将其扩充为4×5矩阵,并保存,试着调用它。 2.建立一个等差数列,然后由它产生一个对角阵。 3.利用MATLAB的函数inv(A)求方阵的逆矩阵。 解:1. (1) >> A=[3,2,1;4,5,6;7,8,9] A = 3 2 1 4 5 6 7 8 9 (2) A=rand(3,3) A = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 2. > a=linspace(0.1,5,5) a = 0 0.3750 0.7500 1.1250 1.5000

>> B=diag(a) B = 0 0 0 0 0 0 0.3750 0 0 0 0 0 0.7500 0 0 0 0 0 1.1250 0 0 0 0 0 1.5000 3. >> A=[1,2;5,6] A = 1 2 5 6 >> B=inv(A) B = -1.5000 0.5000 1.2500 -0.2500 四.练习题 1.创建一个5×5矩阵,提取主对角线以上的部分。 >> A=rand(5,5) A = 0.4447 0.1763 0.8936 0.1389 0.1988 0.6154 0.4057 0.0579 0.2028 0.0153 0.7919 0.9355 0.3529 0.1987 0.7468 0.9218 0.9169 0.8132 0.6038 0.4451 0.7382 0.4103 0.0099 0.2722 0.9318 >> B=triu(A) B = 0.4447 0.1763 0.8936 0.1389 0.1988 0 0.4057 0.0579 0.2028 0.0153 0 0 0.3529 0.1987 0.7468 0 0 0 0.6038 0.4451 0 0 0 0 0.9318

VB矩阵相乘实验报告

实验报告四 题目:矩阵相乘 学生姓名:YQY 完成时间:2012年 11月 07日

1.问题描述 编程实现两矩阵相乘,要求: 1.界面输入矩阵A和B的行列数; 2.矩阵元素值由随机函数生成,随机函数取值范围由界面录入; 3.点击“计算”按钮,程序首先判断两矩阵是否满足矩阵相乘条件,若满足,则 将矩阵A、B和结果矩阵C显示在下方label中(注意格式对齐);若不满足,需给出提示信息,并清空相关textbox。 2. 关键代码 Imports Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" TextBox7.Text = "" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

Dim i, j, m, n, x, y, k1, k2, k3 As Integer Dim sc1(10, 10), sc2(10, 10), sc3(10, 10) As Integer Randomize() If j <> m Then MsgBox("两个矩阵无法进行相乘,请重新输入", , "警告") Else For k1 = 1 To i For k2 = 1 To j sc1(k1, k2) = Int(Rnd() * (Abs(y - x) + 1) + Min(x, y)) TextBox7.Text &= sc1(k1, k2) & Space(4) Next TextBox7.Text &= vbCrLf Next For k1 = 1 To m For k2 = 1 To n sc2(k1, k2) = Int(Rnd() * (Abs(y - x) + 1) + Min(x, y)) TextBox7.Text &= sc2(k1, k2) & Space(4) Next TextBox7.Text &= vbCrLf Next For k1 = 1 To i For k2 = 1 To n For k3 = 1 To j sc3(k1, k2) += sc1(k1, k3) * sc2(k3, k2) Next k3 TextBox7.Text &= sc3(k1, k2) & Space(4) Next k2 TextBox7.Text &= vbCrLf Next k1 End If End Sub End Class

VB实验报告1-9

实验一:设计简单的VB 应用程序 一、实验目的 1.掌握Visual Basic 启动和退出的方法。 2.熟悉Visual Basic 的集成开发环境。 3.掌握Visual Basic 程序设计的基本步骤,了解VB 程序的编写、保存和编译的方法过程。 4.初步了解几个常用基本控件控件(标签、命令按钮和文本框)的使用方法。 二、实验类型 综合 三、实验时间:2013-3-8 四、实验任务 1、启动Visual Basic ,然后创建一个“标准 EXE ”工程(保存在D 盘以自己学号命名的文件夹中,文件名和窗体名均为SJT ),并了解Visual Basic 集成开发环境下各组成部分及其作用。 2、编一程序,计算任意输入的正整数的平方根。 3、编写一个应用程序,界面如图1-1所示。窗体中文字“VB 应用程序!”为一标签控件,单击标题为“放大”的命令按钮,则“VB 应用程序!”的字号放大一号,单击“缩小”按钮则反之;同时,窗体中还有4个含某种指向图案的按钮,若单击某个按钮,则使“VB 应用程序!”向该按钮所指向的方向移动50Twip 。(提示:四种指向的图案可以在Visual Basic 安装目录中的“…graphics\icon\Arrows ”子目录中找到,名称分别为arw07dn.ico 、arw07lt.ico 、arw07rt.ico 和arw07up.ico ) 五、实验要求 写出实验报告,内容是: 1、第1小题的操作步骤 2、第2、3题 1).程序的界面设计。 2).程序主要代码。 3).运行结果(输入与输出)。 4).实验总结。(写上你自己的总结。可以从以下几个方面来总结:你在编程过程中花时多少?时间是怎么分配的?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你的收获有哪些?) 图1-1 实验1-2程序运行

matlab矩阵实验报告

matlab矩阵实验报告 《MATLAB矩阵实验报告》 摘要: 本实验报告利用MATLAB软件进行了矩阵实验,通过对矩阵的运算、转置、逆矩阵、特征值等操作进行了分析和讨论。实验结果表明,MATLAB在矩阵运算方面具有高效、准确的特点,能够满足工程和科学计算的需求。 引言: 矩阵是线性代数中的重要概念,广泛应用于工程、物理、经济等领域。MATLAB是一种强大的数学软件,能够对矩阵进行各种运算和分析。本实验旨在利用MATLAB软件对矩阵进行实验,探讨其在矩阵运算中的应用和优势。实验方法: 1. 创建矩阵:利用MATLAB软件创建不同大小的矩阵,包括方阵和非方阵。 2. 矩阵运算:进行矩阵的加法、减法、乘法等运算,比较不同大小矩阵的计算效率和结果准确性。 3. 矩阵转置:对矩阵进行转置操作,观察转置后矩阵的性质和应用。 4. 逆矩阵:求解矩阵的逆矩阵,并分析逆矩阵在实际问题中的应用。 5. 特征值和特征向量:利用MATLAB软件求解矩阵的特征值和特征向量,分析其在物理、工程等领域的应用。 实验结果与讨论: 通过实验发现,MATLAB软件在矩阵运算中具有高效、准确的特点。对于大规模矩阵的运算,MATLAB能够快速进行计算并给出准确的结果。在矩阵转置和逆矩阵求解方面,MATLAB也能够满足工程和科学计算的需求。此外,通过求

解矩阵的特征值和特征向量,可以得到矩阵的重要性质,为实际问题的分析和 求解提供了有力支持。 结论: 本实验利用MATLAB软件进行了矩阵实验,通过对矩阵的运算、转置、逆矩阵、特征值等操作进行了分析和讨论。实验结果表明,MATLAB在矩阵运算方面具 有高效、准确的特点,能够满足工程和科学计算的需求。希望本实验能够对矩 阵运算和MATLAB软件的应用有所启发,为相关领域的研究和应用提供参考。

矩阵运算实验报告

矩阵运算实验报告 实验目的:通过矩阵运算实验,探究矩阵的基本运算规则、性质及应用,并加深对矩阵运算的理解。 实验原理:矩阵是一个由元素按照行和列排列成的矩形阵列,可以进行加法、减法、乘法等基本的运算。矩阵的加法与减法满足交换律、结合律和分配律;矩阵的乘法满足结合律、分配律和左乘右乘不一定相等的性质。 实验步骤: 1. 实验前的准备:准备两个矩阵A和B,并确定其维度。 2. 进行矩阵加法运算:将矩阵A与矩阵B的对应元素相加,得到新的矩阵C。 3. 进行矩阵减法运算:将矩阵A与矩阵B的对应元素相减,得到新的矩阵D。 4. 进行矩阵乘法运算:将矩阵A的行元素与矩阵B的列元素对应相乘,并将结果相加,得到新的矩阵E。 5. 对矩阵进行转置:将矩阵A的行与列互换,得到新的矩阵F。 6. 求矩阵的逆:若矩阵A可逆,则找到矩阵A的逆矩阵G。 实验结果: 1. 矩阵加法运算的结果:得到新的矩阵C,其维度与矩阵A和B相同,且C(i,j) = A(i,j) + B(i,j)。 2. 矩阵减法运算的结果:得到新的矩阵D,其维度与矩阵A和B相同,且D(i,j) = A(i,j) - B(i,j)。

3. 矩阵乘法运算的结果:得到新的矩阵E,其维度为A的行数乘以B的列数,且E(i,j) = Σ(A(i,k)*B(k,j)),k的取值范围为1到B的行数(或A的列数)。 4. 矩阵转置的结果:得到新的矩阵F,其维度与矩阵A相反,即F的行数等于A的列数,F的列数等于A的行数,且F(i,j) = A(j,i)。 5. 矩阵逆矩阵的结果:得到新的矩阵G,其与矩阵A的乘积为单位矩阵,即A*G = G*A = I,其中I为单位矩阵。 实验分析: 1. 从矩阵加法与减法运算的结果可以看出,矩阵的加法和减法满足交换律、结合律和分配律。这说明矩阵加法和减法具有良好的运算性质。 2. 从矩阵乘法运算的结果可以看出,矩阵的乘法满足结合律和分配律,但左乘右乘不一定相等,即AB≠BA。这说明矩阵的乘法不满足交换律。 3. 从矩阵转置的结果可以看出,转置操作可以改变矩阵的行与列的对应关系,降低了矩阵运算的复杂度,方便了部分问题的求解。 4. 从矩阵逆矩阵的结果可以看出,若矩阵A可逆,则其逆矩阵存在且唯一。逆矩阵的求解在线性代数中具有重要意义,可以用于解线性方程组,求解矩阵的特征值等问题。 实验总结:通过本次矩阵运算实验,我们深入了解了矩阵的基本运算规则、性质及应用,并掌握了矩阵加法、减法、乘法等运算方法,以及矩阵转置和逆矩阵的求解方法。矩阵运算在数学、物理、工程等领域有着广泛的应用,对于理解和解

矩阵运算实验报告

实验报告 --矩阵运算 一.实验目的。 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; //一维数组}; virtual ~CMatrixclass() { delete [] m_pElements; } public:

矩阵乘法的定义及其性质

矩阵乘法的定义及其性质 矩阵乘法是矩阵运算中的一种重要形式,矩阵乘法能够将两个矩阵相乘得到一个新的矩阵,是矩阵运算中应用广泛的一种运算方式。在矩阵乘法的运算中,向量、矩阵和多项式相乘都可以使用矩阵乘法来实现。 矩阵乘法的定义 在矩阵乘法中,两个矩阵相乘的前提条件是第一个矩阵的列数等于第二个矩阵的行数,即A(m,n)与B(n,p)可以相乘。将A和B 相乘,得到的矩阵C是一个m行p列的矩阵,其第i行第j列的元素可以表示为: C(i,j)=sum(A(i,k)*B(k,j)) 其中k的取值范围为1到n,sum表示对k的求和。矩阵乘法的运算法则是“行乘列加”,即矩阵的每一行与另一个矩阵的每一列进行乘法运算,将结果相加得到新矩阵中的对应元素。 矩阵乘法的性质

1. 不满足交换律 矩阵乘法不满足交换律,即A*B与B*A是不相等的。这一性质可以通过矩阵乘法的定义进行理解,因为AB的定义中,A的列数必须等于B的行数,而BA的定义中,B的列数也必须等于A 的行数,这两种情况下的矩阵乘法所得到的结果是不同的。 2. 满足结合律 矩阵乘法满足结合律,即(A*B)*C=A*(B*C)。这一性质可以通过对矩阵乘法的运算法则进行分析得到,因为矩阵乘法是按照行乘列加的方式运算的,所以多个矩阵连乘时,括号的位置不影响结果。 3. 矩阵乘法满足分配律 矩阵乘法满足分配律,即A*(B+C)=A*B+A*C。这一性质也可以通过矩阵乘法的定义得到,即将A的每一行与B+C的对应列相乘,然后将结果相加得到新矩阵中的对应元素,即A*B+A*C。

4. 矩阵乘法中的单位矩阵 在矩阵乘法中,单位矩阵是指一个元素在对角线上为1,其余所有元素都为0的矩阵。如果一个矩阵乘以一个单位矩阵,其结果矩阵仍然是该矩阵本身。例如,矩阵A和其对应的单位矩阵I 相乘得到的结果矩阵是A本身,即A*I=A。 5. 矩阵乘法中的逆矩阵 在矩阵乘法中,如果一个矩阵A乘以另一个矩阵B得到的结果矩阵是单位矩阵I,那么矩阵B就被称为矩阵A的逆矩阵,记作A^-1。如果矩阵A有逆矩阵,那么矩阵A就是可逆矩阵。可逆矩阵的行列式不为0。 总之,矩阵乘法是矩阵运算中的重要部分,矩阵乘法的定义及其性质对于矩阵乘法的应用有着重要的意义。在实际工作中,矩阵乘法能够有效地解决很多实际问题,对于计算机科学、数学等领域有着广泛的应用。

基于分布式并行计算的二维矩阵乘法的实现实验报告心得

基于分布式并行计算的二维矩阵乘法的实现实验报告心得 【原创版4篇】 篇1 目录 1.二维矩阵乘法的实现实验报告概述 2.分布式并行计算的原理 3.二维矩阵乘法的实验过程及结果 4.实验结论及未来展望 篇1正文 一、二维矩阵乘法的实现实验报告概述 二维矩阵乘法是一种广泛应用于计算机科学和数学领域的计算方法,其基本思想是将两个二维矩阵相乘得到一个新的二维矩阵。在传统的串行计算中,二维矩阵乘法的计算量较大,效率较低。为了解决这个问题,分布式并行计算被引入到二维矩阵乘法的实现中。 二、分布式并行计算的原理 分布式并行计算是一种将计算任务分解成多个子任务,并将这些子任务分配到不同的计算节点上并行执行的计算方法。在分布式并行计算中,每个计算节点都只处理一部分子任务,最终将所有节点的结果合并得到最终结果。分布式并行计算的优势在于能够充分利用多核处理器和集群的资源,提高计算效率。 三、二维矩阵乘法的实验过程及结果 在本次实验中,我们采用了基于分布式并行计算的二维矩阵乘法实现方法。具体步骤如下: 1.将原始的两个二维矩阵分别划分为多个子矩阵,并将这些子矩阵分配到不同的计算节点上。

2.在每个计算节点上,使用分布式并行计算的方法计算相应的子矩阵。 3.将所有节点的结果合并得到最终结果。 实验结果表明,采用分布式并行计算的二维矩阵乘法能够显著提高计算效率,特别是在大规模矩阵计算中。 四、实验结论及未来展望 本次实验证明了基于分布式并行计算的二维矩阵乘法的有效性。 篇2 目录 I.二维矩阵乘法的实现方法 II.分布式并行计算的应用 III.实验结果和结论 篇2正文 一、二维矩阵乘法的实现方法 二维矩阵乘法是一种用于处理大型数据集的算法,可以应用于图像处理、信号处理、人工智能等领域。实现二维矩阵乘法的方法有多种,其中分布式并行计算是一种有效的方法。 分布式并行计算是一种将计算任务分解成多个子任务,并将这些子任务分配到不同的计算节点上并行执行的方法。在分布式并行计算中,矩阵的每个元素都由一个计算节点进行处理,最终将所有节点的结果合并得到最终结果。 在实现二维矩阵乘法时,可以使用分布式并行计算将矩阵的乘法运算分解成多个子任务,并将这些子任务分配到不同的计算节点上并行执行。具体实现方法包括: 1.将原始矩阵和目标矩阵分别存储在分布式系统中,每个计算节点都有自己的矩阵副本。

数据结构实验报告稀疏矩阵运算

教学单位计算机科学与技术 学生学号 5 数据结构 课程设计报告书 题目稀疏矩阵运算器 学生豹 专业名称软件工程 指导教师志敏

实验目的:深入研究数组的存储表示和实现技术,熟悉广义表存储结构的特性。 需要分析:稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。要求以带“行逻辑信息”的三元组顺序表存储稀疏矩阵,实现两矩阵的相加、相减、相乘等运算。输入以三元组表示,输出以通常的阵列形式列出。 软件平台:Windows 2000,Visual C++ 6.0或WINTC 概要设计:ADT Array { 数据对象: D = {aij | 0≤i≤b1-1, 0 ≤j≤b2-1} 数据关系: R = { ROW, COL } ROW = {| 0≤i≤b1-2, 0≤j≤b2-1} COL = {| 0≤i≤b1-1, 0≤ j≤b2-2} 基本操作: CreateSMatrix(&M); //操作结果:创建稀疏矩阵M. Print SMatrix(M); //初始化条件: 稀疏矩阵M存在. //操作结果:输出稀疏矩阵M. AddSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M与N的行数和列数对应相等. //操作结果:求稀疏矩阵的和Q=M+N. SubSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M与N的行数和列数对应相等. //操作结果:求稀疏矩阵的差Q=M-N. MultSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M的列数等于N的行数. //操作结果:求稀疏矩阵的乘积Q=M*N. } ADT Array

矩阵连乘实验报告

矩阵连乘实验报告

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

一、实验内容 矩阵连乘问题,给定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之间将矩阵链断开,1≤k≤n,则其相应的完全加括号方式为((A1…A k)(A k+1…A n))。依此次序,先计算A[1:k]和A[k+1:n],然后将

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

vb矩阵课程设计

vb矩阵课程设计 **课程设计 矩阵课程设计 单位 ** 分院(系) 专业 ** 学号 ** 学生姓名 ** 指导教师 ** 完成日期 2年月日 - 1 - 摘要 矩阵运算,是利用VB编写的一款软件。它在输入的两个矩阵间进行加法、减法以及乘法的运算,界面设计简洁,运算速度快捷。 论文首先介绍了矩阵运算的系统组成和功能描述。其次,介绍了矩阵运算的总体分析与设计,包括需求分析和功能模块分析。最后,采用图片与代码结合的方式详细地叙述了系统功能的实现。 关键词:科研信息管理系统,J2EE,JSP,组件 - 2 - 目录 1、封面 (1) 2、摘 要 (2) 3、目 录 ..................................................................... . (3)

4、选题的意 义 ..................................................................... .. (4) 5、系统功能需求分 析 ..................................................................... ................................ 45.1 系统概 述 ..................................................................... .. (4) 5.2系统的运行环 境 (4) 6(系统设 计 ..................................................................... ............................................ 4 6.1 总体结构设 计 ..................................................................... .................................. 4 6.2 界面设 计 ..................................................................... .......................................... 5 6.3 代码设 计 ..................................................................... .......................................... 6 5(总 结 (14) 5.1总 结 ..................................................................... .................................................. 14 参考文 献 (14)

矩阵乘法(分治法)

算法设计与分析实验报告 实验名称:矩阵乘法(分冶法) 一、问题陈述和分析: 1.实验目的:掌握分总冶策略的基本思想以及用分冶法解决问题的一般技巧.运用编程工具,并运用分冶法来解决矩阵乘法问题; 2.实验内容:设A 和B 是两个n * n阶矩阵,求它们两的乘积矩阵C。这里,假设n是2的幂次方; 3.实验要求:编制程序并对其时间复杂度和空间复杂度进行分析.

二、模型拟制、算法设计和正确性证明: 设A和B是两个n*n阶矩阵,求他们两的成绩矩阵C。这里假设n是2的幂次方; A和B是两个n*n的矩阵,他们的乘积C=AB也是一个n*n的矩阵,矩阵C中的元素C[i][j]定义为C[i][j]= ,则每计算一个C[i][j],需要做n次乘法和n-1次加法。因此计算C的n2个元素需要n3次乘法和n3- n2次加法。因此,所需的时间复杂度是O(n3)。 但是使用分治法可以改进算法的时间复杂度。这里,假设n是2的幂。将矩阵A,B,C中每一矩阵都分成4个大小相等的子矩阵,每个子矩阵是(n/2)*(n/2)的方阵。由此,可将方阵C=AB重写为 因此可得: C11=A11B11+A12B21 C12=A11B12+A12B22 C21=A21B11+A22B22 C22=A21B12+A22B22 这样就将2个n阶矩阵的乘积变成计算8个n/2阶矩阵的乘积和4个n/2阶矩阵的加法。 当n=1时,2个1阶方阵的乘积可直接算出,只需要做一次乘法。当子矩阵阶n>1时,为求两个子矩阵的乘积,可继续对两个子矩阵分块,直到子矩阵的阶为1。由此,便产生了分治降阶的递归算法。 但是这个算法并没有降低算法的时间复杂度。由strassen矩阵乘法, M1=A11(B12-B22) M2=(A11+A12)B22 M3=(A21+A22)B11 M4=A22(B21-B11) M5=(A11+A22)(B11+B22) M6=(A12-A22)(B21+B22) M7=(A11-A21)(B11+B12) C11=M5+M4-M2+M6 C12=M1+M2 C21=M3+M4 C22=M5+M1-M3-M7 算法共进行7次举证乘法,算法效率得到降低 主要数据的定义: int n;n是方阵A,B,C的阶

矩阵实验报告

矩阵与数值分析实验报告 任课教师:张宏伟 教学班号: 02 院系:电信(计算机应用技术) 学生姓名: 学生学号:

1.方程在x=附近有根,试写出其三种不同的 等价形式以构成两种不同的迭代格式,再用这两种迭代求根,并绘制误差下降曲线,观察这两种迭代是否收敛及收敛的快慢。 解答: 代码如下: clear; syms x t y; x=3;%初始迭代点 t=0;%中间变量 y=0;%绘制下降曲线变化量 k=0;%迭代计数变量 epx=1;%变量计算差 E=1e-20;%精度 f1=(2*x^3-5*x^2+42)/19;%迭代1 f2=(2*x^3-19*x+42)^(1/2);%迭代2 f3=(5*x^2+19*x-42)^(1/3);%迭代3

while(epx>E&k<1000)%循环迭代 k=k+1; y(k)=x; t=f1;%标记1 epx=abs(t-x); x=t; f1=(2*x^3-5*x^2+42)/19;%标记2 end; plot(y); title('迭代1误差下降曲线'); 迭代公式1收敛结果:x=2

迭代公式1误差变化曲线 0510******** 22.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3 迭代1误差下降曲线

迭代公式2误差变化曲线 迭代公式3收敛结果:x= 051015 00.5 1 1.5 2 2.5 3 3.5 138迭代2误差下降曲线

迭代公式3误差变化曲线 结果分析:迭代公式1:f1=(2*x^3-5*x^2+42)/19和迭代公式3:f3=(5*x^2+19*x-42)^(1/3)计算结果收敛,其中迭代公式1收敛速度快于迭代公式3。迭代公式2:f2=(2*x^3-19*x+42)^(1/2)计算结果不收敛。 2. 用复化梯形公式、复化辛普森公式、龙贝格公式求下列定积分,要求绝对误差为 ,并将计算结果与精确解进行比较: (1 ) (2 ) 解答: (1)复化梯形公式代码: 01020304050607080 33.5 4 4.5 5 5.5 6 6.5 7 迭代3误差下降曲线

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

稀疏矩阵基本操作实验报告 一、实验内容 稀疏矩阵的压缩储存结构,以及稀疏矩阵的三元组表表示方法下的转置、相加、相乘等算法 二、实验目的 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中第

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