创新-21424011-李润顺-矩阵实验报告
- 格式:doc
- 大小:5.32 MB
- 文档页数:21
一、实验目的1. 理解矩阵乘法的概念和运算规则。
2. 掌握矩阵乘法的编程实现方法。
3. 通过实验验证矩阵乘法的正确性。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 库:NumPy三、实验原理矩阵乘法是指两个矩阵相乘的运算。
设矩阵A为m×n的矩阵,矩阵B为n×p的矩阵,则它们的乘积C为一个m×p的矩阵。
矩阵乘法的运算规则如下:C[i][j] = Σ(A[i][k] B[k][j]),其中k为1到n的整数。
四、实验步骤1. 导入NumPy库。
```pythonimport numpy as np```2. 定义矩阵A和B。
```pythonA = np.array([[1, 2], [3, 4]])B = np.array([[5, 6], [7, 8]])```3. 计算矩阵A和B的乘积C。
```pythonC = np.dot(A, B)```4. 打印结果。
```pythonprint("矩阵A:")print(A)print("矩阵B:")print(B)print("矩阵C(A乘B):")print(C)```五、实验结果与分析1. 运行实验程序,得到以下结果:```矩阵A:[[1 2][3 4]]矩阵B:[[5 6][7 8]]矩阵C(A乘B):[[19 22][43 50]]```2. 分析结果:- 矩阵A为2×2的矩阵,矩阵B为2×2的矩阵,它们的乘积C为2×2的矩阵。
- 根据矩阵乘法的运算规则,我们可以计算出矩阵C的每个元素。
- 实验结果与理论计算相符,说明矩阵乘法的编程实现是正确的。
六、实验总结1. 本实验成功实现了矩阵乘法的编程,验证了矩阵乘法的正确性。
2. 通过实验,加深了对矩阵乘法概念和运算规则的理解。
3. NumPy库在矩阵运算方面具有强大的功能,为编程提供了便利。
矩阵分析实验报告学院:电气学院专业:控制工程姓名:XXXXXXXX学号:211208010001矩阵分析实验报告实验题目利用幂法求矩阵的谱半径实验目的与要求1、 熟悉matlab 矩阵实验室的功能和作用;2、 利用幂法求矩阵的谱半径;3、 会用matlab 对矩阵分析运算。
实验原理理念谱半径定义:设n nA C⨯∈,1λ,2λ,3λ, ,j λ, n λ是A 的n 个特征值,称()max ||j jA ρλ=为关于A 的谱半径。
关于矩阵的谱半径有如下结论:设n nA C⨯∈,则(1)[]()()kkA A ρρ=;(2)22()()()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+111k 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 kk k n X x x x '=⋅⋅⋅和{}k c : k k Y AX = (5)和:111k k k X Y c ++=(6)其中: ()1k k j c x +=且{}()()1max k k j i i nx x ≤≤=(7)这两个序列分别收敛到特征向量V 1和特征值λ1。
2024年创新总结实践报告一、引言在过去的一年中,我个人参与了多次创新实践活动,并取得了一定的成果。
通过这些实践,我学到了很多理论知识的应用方法,并且培养了一些实践能力。
本报告旨在总结我在2024年的创新实践经历,并对未来的创新工作提出一些建议。
二、2024年创新实践经历1. 参与创新竞赛在2024年,我积极参加了多个创新竞赛,包括科技创新竞赛、创业创新竞赛等。
在这些竞赛中,我结合自己的专业知识和兴趣,选择了一个有挑战性且有创新性的课题,并进行了深入研究和实践。
通过与团队成员的合作,我们成功完成了项目,并获得了一定的奖项。
2. 参与科研项目我也参与了几个科研项目,在老师或导师的指导下,深入研究了某一领域的问题,并进行了实验和数据分析。
通过这些实践,我学会了如何进行科学的实验设计,以及如何正确地处理和分析实验数据。
同时,我也对科研工作的方法和流程有了更深入的了解。
3. 参与社会实践活动除了学校内的创新实践活动,我也积极参与了一些社会实践活动。
例如,我参加了一个公益组织的志愿者活动,为贫困地区的儿童提供教育支持。
通过这些实践,我意识到创新不仅仅是科技领域的事情,还可以在社会服务中得到应用和体现。
三、创新实践的经验与教训通过2024年的创新实践活动,我得到了一些宝贵的经验与教训:1. 理论与实践相结合:创新不仅仅是空中楼阁的理论,更需要与实践相结合。
在实践过程中,可以发现问题、解决问题,并将理论知识应用到实际中去。
2. 团队合作:创新工作往往需要团队合作来完成。
在团队中,每个人都有不同的专长和角色,需要合理分工和有效沟通,才能取得最好的成果。
3. 学会反思:创新实践需要不断反思和总结,及时发现问题和不足,并作出改进。
通过不断反思和总结,可以提高自己的实践能力和创新能力。
四、未来的创新工作建议基于前述的创新实践经历与教训,我提出了以下几点建议:1. 广泛参与创新实践活动:继续参加各类创新竞赛和科研项目,通过实践锻炼自己的思维能力和实践能力。
一、实验目的通过本次实验,加深对动态规划算法的理解和应用,掌握解决矩阵连乘问题的方法,提高算法分析和设计能力。
二、实验原理矩阵连乘问题是指给定n个矩阵,每个矩阵都与它的前一个矩阵可乘,求计算这些矩阵连乘积的最优计算次序,以使计算过程中所需的数乘次数最少。
由于矩阵乘法满足结合律,因此可以通过加括号的方式确定不同的计算次序。
三、实验步骤1. 问题描述:给定n个矩阵A1, A2, ..., An,其中Ai与Ai-1是可乘的。
求计算矩阵连乘积A1A2...An的最优计算次序,使得计算过程中所需的数乘次数最少。
2. 输入数据:矩阵个数n,每个矩阵的规模。
3. 输出结果:计算矩阵连乘积的最优计算次序和最少数乘次数。
4. 算法设计:- 定义一个二维数组m[i][j],其中m[i][j]表示计算矩阵AiAi-1...Aj的最少数乘次数。
- 初始化m[i][i] = 0,因为单个矩阵无需计算。
- 对于每个子问题A[i:j],计算m[i][j]的最小值:- 遍历k从i到j-1,将问题分解为A[i:k]和Ak+1:j,计算m[i][k]和m[k+1][j]的和,并加上k个矩阵的维度乘积。
- 取上述和的最小值作为m[i][j]的值。
5. 递归关系:- 当i = j时,m[i][j] = 0。
- 当i < j时,m[i][j] = min(m[i][k] + m[k+1][j] + p[i-1]p[k]p[j]),其中k从i到j-1,p[i-1]表示矩阵Ai-1的行数,p[j]表示矩阵Aj的列数。
6. 自底向上计算:- 从m[1][1]开始,按照递归关系计算m[1][2],m[1][3],...,m[1][n]。
- 然后计算m[2][3],m[2][4],...,m[2][n],以此类推,直到计算m[1][n]。
7. 输出最优计算次序:- 从m[1][n]开始,根据递归关系和子问题的最优解,逐步确定每个子问题的最优计算次序,直到得到整个问题的最优计算次序。
一、实验背景与目的矩阵连乘问题是一个经典的算法问题,它涉及给定一系列矩阵,确定这些矩阵的最佳乘积顺序,以最小化乘法操作的次数。
本实验旨在通过动态规划算法解决矩阵连乘问题,加深对动态规划方法的理解,并提高算法分析与设计的能力。
二、实验内容与步骤1. 问题描述与理解:- 给定n个矩阵A1, A2, ..., An,其中任意两个相邻矩阵都是可乘的。
- 目标是确定计算这些矩阵连乘积的最佳顺序,以最小化所需的乘法次数。
2. 算法分析:- 使用动态规划方法,通过将问题分解为子问题并存储子问题的解来求解。
- 设定m[i, j]表示矩阵Ai到Aj的最佳乘积顺序的乘法次数。
3. 动态规划过程:- 初始化m[i, i] = 0,因为单个矩阵不需要乘法。
- 对于长度为k的矩阵序列,通过遍历所有可能的分割点,计算m[i, j]的最小值。
- 具体步骤包括:- 对于每个可能的k(1 ≤ k ≤ n-1),- 对于每个起始矩阵i(1 ≤ i ≤ n-k),- 计算m[i, i+k-1]和m[i+k, j],- 更新m[i, j]为m[i, i+k-1] + m[i+k, j] + p[i-1] p[i] p[i+k]。
4. 代码实现:- 使用C或Java等编程语言实现动态规划算法。
- 编写辅助函数来计算矩阵的乘法次数。
三、实验结果与分析1. 实验结果:- 通过实验,成功实现了矩阵连乘问题的动态规划算法。
- 得到了计算给定矩阵序列连乘积所需的最小乘法次数。
2. 结果分析:- 动态规划方法有效地解决了矩阵连乘问题,避免了穷举法的指数级时间复杂度。
- 通过分析子问题的解,我们可以找到整个问题的最优解。
四、实验总结与反思1. 实验收获:- 加深了对动态规划方法的理解,特别是如何通过子问题的解来构建整个问题的解。
- 学会了如何将实际问题转化为动态规划问题,并使用代码实现算法。
2. 反思与展望:- 实验过程中遇到了一些挑战,如理解子问题的定义和计算最优子结构的策略。
创新矩阵总结汇报材料范文创新矩阵总结汇报材料尊敬的领导,亲爱的同事们:大家好!我今天要向大家汇报有关创新矩阵的总结。
创新矩阵是一种常用的创新工具,可以帮助我们系统地分析和评估创新机会,指导我们进行创新项目的选择和实施。
在过去的一段时间里,我通过对创新矩阵的研究和实践,对其优点和应用方法有了更深入的理解,并且结合我们实际工作中的情况,对创新矩阵进行了总结。
一、创新矩阵的优点创新矩阵作为一种创新工具,具有以下几个优点:1. 系统性:创新矩阵可以帮助我们对创新机会进行系统性的分析和评估,将创新机会分门别类地归纳到不同的类别中,有助于我们全面地了解和把握创新机会。
2. 易于使用:创新矩阵的使用方法相对简单,只需要将创新机会按照不同维度进行分类,然后进行评分和排序。
即使对创新矩阵不太熟悉的人员也能够快速上手使用。
3. 直观性:创新矩阵以矩阵的形式展示创新机会,使得整个创新机会的分析和评估过程更加直观和清晰,便于大家理解和参与讨论。
二、创新矩阵的应用方法创新矩阵的应用方法主要包括以下几个步骤:1. 定义创新维度:首先,我们需要根据实际情况定义创新矩阵的维度。
常见的创新维度包括市场、技术、产品等。
不同的维度对应不同的创新机会的特点和评估标准。
2. 收集创新机会:接下来,我们可以通过各种途径收集创新机会,比如市场调研、用户反馈、竞争对手分析等。
关键是要确保收集到的创新机会能够覆盖各个创新维度,以保证创新矩阵的全面性。
3. 归类和评估:在收集到创新机会后,我们需要将其按照创新维度进行归类,并且对每个创新机会进行评估。
评估可以采用定性和定量的方法,比如设置评分标准、进行SWOT分析等。
4. 排序和优化:最后,在归类和评估的基础上,我们可以根据创新机会的评分对其进行排序,从而确定优先开展的创新项目。
如果有需要,我们还可以对创新矩阵进行优化,比如调整创新维度的权重、增加或删除维度等。
三、创新矩阵的实践应用在我们的实际工作中,我们也尝试了使用创新矩阵来进行创新项目的筛选和管理。
一、实验目的1. 理解矩阵的基本概念和性质。
2. 掌握矩阵的运算方法,包括加法、减法、乘法等。
3. 学习矩阵的应用,如线性方程组的求解。
4. 提高数学建模和解决问题的能力。
二、实验内容本次实验主要围绕矩阵的运算和应用展开,具体内容包括:1. 矩阵的加法与减法2. 矩阵的乘法3. 矩阵的逆4. 线性方程组的求解三、实验步骤1. 矩阵的加法与减法(1)选择两个矩阵A和B,确保它们具有相同的行数和列数。
(2)将矩阵A和B对应位置的元素相加或相减,得到新的矩阵C。
(3)验证矩阵C的行数和列数与矩阵A和B相同。
2. 矩阵的乘法(1)选择两个矩阵A和B,确保矩阵A的列数等于矩阵B的行数。
(2)计算矩阵A的每一行与矩阵B的每一列的点积,得到新的矩阵C。
(3)验证矩阵C的行数等于矩阵A的行数,列数等于矩阵B的列数。
3. 矩阵的逆(1)选择一个可逆矩阵A。
(2)使用高斯-约当消元法求解矩阵A的逆。
(3)验证矩阵A与其逆矩阵的乘积为单位矩阵。
4. 线性方程组的求解(1)选择一个线性方程组,例如:AX = B,其中A是系数矩阵,X是未知数矩阵,B是常数矩阵。
(2)使用高斯-约当消元法求解线性方程组。
(3)验证求解得到的X矩阵是否满足原方程组。
四、实验结果与分析1. 矩阵的加法与减法通过实验,我们发现矩阵的加法与减法运算满足交换律和结合律,且结果矩阵的行数和列数与原矩阵相同。
2. 矩阵的乘法实验结果表明,矩阵的乘法运算满足交换律和结合律,且结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数。
3. 矩阵的逆实验发现,对于可逆矩阵,其逆矩阵存在,且满足A A^(-1) = A^(-1) A = E(单位矩阵)。
4. 线性方程组的求解通过高斯-约当消元法,我们成功求解了线性方程组,并验证了求解结果的正确性。
五、实验结论1. 理解了矩阵的基本概念和性质,掌握了矩阵的运算方法。
2. 学会了使用矩阵求解线性方程组,提高了数学建模和解决问题的能力。
矩阵乘法是线性代数中一个基础且重要的运算,广泛应用于科学计算、数据分析和工程领域。
为了深入了解矩阵乘法的并行化实现,提高计算效率,本实验旨在通过MPI(Message Passing Interface)并行编程技术,实现矩阵乘法的并行计算,并分析其性能。
二、实验内容与方法1. 实验环境操作系统:Ubuntu Linux编译器:gcc并行计算平台:632核CPU、400GB内存的分布内存并行计算平台2. 实验方法(1)矩阵乘法算法本实验采用经典的矩阵乘法算法,即按行优先顺序进行计算。
具体步骤如下:① 将矩阵A、B、C划分为p个块,每个块包含m/p行和n/p列。
② 每个进程负责计算C的一个子块,即计算A的m/p行与B的n/p列的乘积。
③ 进程间通过MPI通信进行数据交换,实现并行计算。
(2)MPI编程本实验采用MPI编程实现矩阵乘法。
主要使用以下MPI语句:① MPI_Init:初始化MPI环境。
② MPI_Comm_size:获取进程总数。
③ MPI_Comm_rank:获取进程编号。
④ MPI_Send:发送数据。
⑤ MPI_Recv:接收数据。
⑥ MPI_Finalize:结束MPI环境。
1. 矩阵乘法结果验证通过比较串行计算和并行计算的结果,验证了程序的正确性。
2. 性能分析(1)执行时间在固定矩阵规模n=1000的情况下,分别测试进程数取1、2、4、8、16、32、64时的执行时间。
结果表明,随着进程数的增加,执行时间逐渐减少,且呈近似线性关系。
(2)加速比加速比是指并行计算时间与串行计算时间的比值。
本实验计算了不同进程数下的加速比,发现随着进程数的增加,加速比逐渐提高,且在进程数达到一定数量后,加速比趋于稳定。
(3)并行效率并行效率是指实际加速比与理论加速比之比。
本实验计算了不同进程数下的并行效率,发现随着进程数的增加,并行效率逐渐提高,但存在一个峰值,之后逐渐降低。
四、实验结论与展望1. 结论本实验通过MPI并行编程技术实现了矩阵乘法的并行计算,验证了程序的正确性。
一、实训背景随着科技的飞速发展,创新和创意已经成为推动社会进步的重要力量。
为了提升自身的创新能力和创意思维,我参加了为期一个月的创新创意实训课程。
本次实训旨在通过理论与实践相结合的方式,培养学员的创新思维、创意表达和团队协作能力。
二、实训目标1. 培养学员的创新意识,提高对创新重要性的认识。
2. 提升学员的创意思维能力,学会运用创新方法解决问题。
3. 增强学员的团队协作能力,学会在团队中发挥个人优势。
4. 学习并掌握一定的创新创意工具和技巧。
三、实训内容本次实训内容主要包括以下几个方面:1. 创新思维训练:通过思维导图、头脑风暴、逆向思维等方法,激发学员的创新思维。
2. 创意表达训练:学习创意写作、PPT制作、视频剪辑等技巧,提高学员的创意表达能力。
3. 团队协作训练:通过角色扮演、小组讨论、项目实战等方式,培养学员的团队协作能力。
4. 创新创意工具学习:介绍SWOT分析、六顶思考帽、头脑风暴法等创新创意工具,帮助学员更好地运用这些工具。
四、实训过程1. 创新思维训练:在实训的第一周,我们学习了思维导图和头脑风暴法。
通过实际操作,我学会了如何将复杂的问题分解成多个小问题,并从不同的角度进行思考。
例如,在解决一个产品创新问题时,我们可以从用户需求、技术可行性、市场前景等多个方面进行头脑风暴,从而找到最佳的创新方案。
2. 创意表达训练:在实训的第二周,我们学习了创意写作和PPT制作。
通过实际操作,我掌握了如何将创意思维转化为文字和图像,以及如何通过PPT的形式清晰地表达创意。
例如,在创作一个广告文案时,我学会了如何运用修辞手法和情感诉求来吸引目标受众。
3. 团队协作训练:在实训的第三周,我们进行了角色扮演和小组讨论。
通过模拟企业项目实战,我学会了如何与团队成员有效沟通、分工合作,以及如何在团队中发挥个人优势。
例如,在模拟一个市场营销项目中,我担任了项目经理的角色,负责协调团队成员的工作,确保项目按时完成。
有关矩阵数学实验报告引言矩阵是数学中一个重要的概念,广泛应用于线性代数、图论、计算机科学等众多领域。
本实验旨在通过实际操作和计算,加深对矩阵的理解,并探索矩阵在现实问题中的应用。
本报告将从实验目的、实验步骤、实验结果和实验结论几个方面进行介绍。
实验目的1. 了解矩阵的基本概念和运算规则;2. 掌握矩阵的求逆、转置和乘法等操作;3. 实践利用矩阵解决实际问题。
实验步骤1. 实验准备:安装并学习使用相应的矩阵数学软件;2. 实验1:矩阵加法和乘法- 创建两个相同维度的矩阵A和B;- 计算A + B和A * B;- 分析结果并进行讨论。
3. 实验2:矩阵求逆和转置- 创建一个可逆矩阵C;- 计算C的逆矩阵C'和C的转置矩阵C^T;- 检验计算结果是否正确。
4. 实验3:矩阵在实际问题中的应用- 选择一个实际问题,并将其抽象成矩阵形式;- 利用矩阵运算解决问题;- 分析结果,并与传统解法进行对比。
实验结果1. 实验1结果分析:经过计算发现,矩阵的加法和乘法满足交换律和结合律,与数的加法和乘法类似。
但是,矩阵乘法不满足交换律,即A * B ≠B * A。
这进一步说明矩阵并不是普通数的简单扩展。
2. 实验2结果检验:针对可逆矩阵C,计算得到的逆矩阵C'和转置矩阵C^T经过验证均正确,满足逆矩阵和转置矩阵的定义和性质。
3. 实验3结果分析:我们选择了一个线性方程组问题,利用矩阵运算求解。
与传统解法相比,矩阵运算更简洁、高效,尤其对于高维度复杂问题具有很大优势。
实验结论通过本次实验,我们对矩阵的概念和运算规则有了更深入的理解。
矩阵不仅仅是一种数学工具,它在现实问题的建模和求解中发挥着重要作用。
矩阵的加法、乘法、逆矩阵和转置等运算规则的学习,为我们处理实际问题提供了更多的方法和思路。
在未来的学习和研究中,矩阵将会贯穿于我们的整个数学和科学计算的领域,为我们带来更大的便利和创造力。
《矩阵与数值分析实验报告》教学班号:2班 任课教师:张宏伟学院:创新实验学院 学号:21424011 姓名:李润顺1. 方程在x=3.0附近有根,试写出其三种不同的等价形式以构成两种不同的迭代格式,再用这两种迭代求根,并绘制误差下降曲线,观察这两种迭代是否收敛及收敛的快慢(1)三种迭代格式迭代格式a :19425223+-=x x x 迭代格式b :5421923+-=x x x 迭代格式c :19106421952223--+---=x x x x x x x 收敛条件为4110||--<-k k x x(2)源程序number1.ma0=3.0;eps = 0.0001;%迭代终止条件error=zeros(1,2000);%误差矩阵i=1;x0=a0;x1=0;while (i<=2000)%x1=2*(x0^3)-5*(x0^2)+42/19;%x1=((2*(x0^3)-19*x0+42)/5)^0.5;x1=x0-(2*(x0^3)-5*(x0^2)-19*x0+42)/(6*(x0^2)-10*x0-19);error(i)=x1-x0;error(i)=abs(error(i));x0=x1;if (error(i)<eps)break ;endi = i+1;endx=1:i-1;y=error(x);plot(x,y)xlabel('迭代次数k');ylabel('误差error');title('收敛曲线');(3)绘制收敛曲线0246810121416182000.511.522.533.544.5x 10282迭代次数k 误差e r r o r 收敛曲线(a) 迭代格式a 收敛曲线1234567891000.050.10.150.20.25迭代次数k 误差e r r o r 收敛曲线(b) 迭代格式b 收敛曲线1 1.52 2.53 3.54 4.5500.20.40.60.811.21.4迭代次数k 误差e r r o r 收敛曲线(c) 迭代格式c 收敛曲线(4)计算结果与分析迭代格式a 发散。
迭代格式b 收敛,迭代次数k=10时达到收敛条件,求得方程根为2.0000。
迭代格式c收敛,迭代次数k=5时达到收敛条件,求得方程根为3.5000。
检验知2.0000和3.5000都是方程f(x)的根。
2. 用复化梯形公式、复化辛普森公式、龙贝格公式求下列定积分,要求绝对误差为,并将计算结果与精确解进行比较:(1)(2)源程序:复化梯形公式tixing.msyms xf=2*x/(x^2-3);a=2;b=3;%f=(2/3)*(x^3)*exp(x^2);%a=1;%b=2;maxcount=2000;eps=0.5*10^(-8);error=zeros(1,maxcount);s=zeros(1,maxcount);for n = 2:maxcounth=(b-a)/n;index1=(a+h):h:(b-h);s1=sum(subs(f,index1));s(n)=h*(subs(f,a)+subs(f,b)+2*s1)/2;if n>1if abs(s(n)-s(n-1))<=epsbreak;endendend复化辛普森公式simpson.msyms x%f=2*x/(x^2-3);%a=2;%b=3;f=(2/3)*(x^3)*exp(x^2);a=1;b=2;maxcount=200;eps=0.5*10^(-8);error=zeros(1,maxcount);s=zeros(1,maxcount);for n = 2:maxcounth=(b-a)/(2*n);index1=(a+h):(2*h):(b-h);index2=(a+2*h):(2*h):(b-2*h);s1=sum(subs(f,index1));s2=sum(subs(f,index2));s(n)=h*(subs(f,a)+subs(f,b)+4*s1+2*s2)/3;if n>1if abs(s(n)-s(n-1))<=epsbreak;endendend龙贝格公式Remberg.msyms xf=2*x/(x^2-3);a=2;b=3;%f=(2/3)*(x^3)*exp(x^2);%a=1;%b=2;m=200;eps=0.5*10^(-8);flag=0;T=zeros(m,m);T(1,1)=(subs(f,a)+subs(f,b))*(b-a)/2;for k=2:mfor n=1:kif n==1k1=k-1;h=(b-a)/(2^k1);j=0:(2^(k1-1)-1);index=a+(2*j+1)*h;s1=sum(subs(f,index));T(k,n)=T(k-1,n)/2+h*s1;elseT(k,n)=(4^(n-1)*T(k,n-1)-T(k-1,n-1))/(4^(n-1)-1);if k==nerror=abs(T(k,k)-T(k-1,k-1));if error < epsflag=1;break;endendendendif flag==1break;endend计算结果:(1)精确解结果e4=54.598150033144236复化梯形公式:运行结果表明区间等分数n=3759时能达到收敛条件,复化梯形公式积分积分结果t=54.598159424955945,与精确解相比有7位有效数字。
复化辛普森公式:运行结果表明区间等分数n=110时达到收敛条件,simpson积分结果s=54.598150162289300,与精确解相比有8位有效数字。
龙贝格公式:运算结果表明通过通过7次龙贝格加速达到收敛条件,Romberg积分结果为r=54.598150033144250,有效数字达到14位(2)精确解ln6=1.791759469228055复化梯形公式:运行结果表明区间等分数n=764时达到收敛条件,复化梯形公式积分结果t=1.791761372801743,与精确解相比有5位有效数字。
复化辛普森公式:运行结果表明区间等分数n=51时达到收敛条件,simpson公式积分结果s=1.791759528661012,与精确解相比有7位有效数字。
龙贝格公式:运算结果表明通过通过7次龙贝格加速达到收敛条件,Romberg积分结果为r=1.791759469229068,有效数字达到12位。
分析与讨论上述计算结果表明,无论是收敛速度还是计算精度:龙贝格>复化辛普森>复化梯形。
3. 使用带选主元的分解法求解线性方程组,其中,,当时.对于的情况分别求解.精确解为.对得到的结果与精确解的差异进行解释.(1)源程序n=7;%可改变A=zeros(n,n);b=zeros(n,1);b(1,1)=n;for i=1:nfor j=1:nA(i,j)=i^(j-1);endendfor i=2:nb(i,1)=(i^n-1)/(i-1);endx=zeros(n,1);y=zeros(n,1);temprow=zeros(n,1);tempconstant=0;Pvector=zeros(n,1);for col=1:n-1[max_element,index]=max(abs(A(col:n,col)));temprow=A(col,:);A(col,:)=A(index+col-1,:);A(index+col-1,:)= temprow;tempconstant=b(col);b(col)=b(index+col-1,:);b(index+col-1,:)= tempconstant;if A(col,col)==0disp('error');return;endfor row =col+1:nmult=A(row,col)/A(col,col);A(row,col)=mult;A(row,col+1:n)=A(row,col+1:n)-mult*A(col,col+1:n);endendy(1)=b(1);for k=2:ny(k)=b(k)-A(k,1:k-1)*y(1:k-1);endx(n)=y(n)/A(n,n);for k=n-1:-1:1x(k)=(y(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);end(2)结果分析与讨论n=3时,解得结果x=[1, 1, 1]T ;n=7时,解得结果x=[1, 1, 1, 1, 1, 1, 1]T ;n=11时,解得结果x=[1.00018813717566 0.9994724273681641.00059684753418 0.999633779128393 1.000137302610610.999966682895782 1.00000535324216 0.9999994335023481.00000003798004 0.999999998538072 1.00000000002460]T从结果看出,n=3和7时,与精确解完全相同;n=11时,无限逼近精确解,这是由于进行数值计算时,计算机无法表示无限的小数,只能表示有限数位导致的。
4. 用4阶Runge-kutta 法求解微分方程t t t te e t u u u u u 222101)(,101)0(,2---+==-=' (1) 令1.0=h ,使用上述程序执行20步,然后令05.0=h ,使用上述程序执行40步(2) 比较两个近似解与精确解(3) 当h 减半时,(1)中的最终全局误差是否和预期相符?(4) 在同一坐标系上画出两个近似解与精确解.(提示输出矩阵R 包含近似解的x 和y 坐标,用命令plot(R(:,1),R(:,2))画出相应图形.)(1)源程序:runge.mfunction R=runge(a,h,n)syms t uf=t^2-u;Y=zeros(1,n+1);m=0:n;T=a+m*h;Y(1)=a;for k=1:nk1=h*subs(f,{t,u},{T(k),Y(k)});k2=h*subs(f,{t,u},{T(k)+h/2,Y(k)+k1/2});k3=h*subs(f,{t,u},{T(k)+h/2,Y(k)+k2/2});k4=h*subs(f,{t,u},{T(k)+h,Y(k)+k3});Y(k+1)=Y(k)+(k1+2*k2+2*k3+k4)/6;endR=[T; Y];测试部分程序test.msyms tft=-exp(-t)+t^2-2*t+2;h1=0.1;n1=20;R1=runge(0,h1,n1);m=0:n1;T=m*h1;real1=subs(ft,T);error1=sum(abs((R1(2,:)-real1)));plot(R1(1,:),R1(2,:),'r');gtext('近似解1');hold onh2=0.05;n2=40;R2=runge(0,h2,n2);plot(R2(1,:),R2(2,:),'b');gtext('近似解2');m=0:n2;T=m*h2;real2=subs(ft,T);error2=sum(abs(R2(2,:)-real2));plot(T,real2,'g');gtext('精确解');title('两个近似解与精确解图');xlabel('x');ylabel('y');(2)比较两个近似解与精确解令1.0 h ,使用上述程序执行20步时,节点值x=[0 0.100000000000000 0.200000000000000 0.300000000000000 0.400000000000000 0.500000000000000 0.6000000000000000.700000000000000 0.800000000000000 0.900000000000000 11.10000000000000 1.20000000000000 1.300000000000001.40000000000000 1.50000000000000 1.600000000000001.70000000000000 1.80000000000000 1.90000000000000 2]精确解y=[1 0.905162581964041 0.821269246922018 0.749181779318282 0.689679953964361 0.643469340287367 0.6111883639059740.593414696208590 0.590671035882779 0.6034303402594010.632120558828558 0.677128916301921 0.7388057880877980.817468206965988 0.913403036058394 1.026869839851571.15810348200535 1.30731647594727 1.474701111778411.66043138077737 1.86466471676339]近似解r=[1 0.905162708333333 0.821269495434896 0.749182145408906 0.689680432829764 0.643469926973935 0.6111890533816110.593415483422517 0.590671915814655 0.6034313079592760.632121609448935 0.677130045123084 0.7388069905373920.817469478633711 0.913404372706564 1.026871237422211.15810493662435 1.30731798392617 1.474702669614131.66043298515031 1.86466636453428]令05.0 h ,使用上述程序执行40步时,节点值x=[0 0.0500000000000000 0.100000000000000 0.150000000000000 0.200000000000000 0.250000000000000 0.3000000000000000.350000000000000 0.400000000000000 0.4500000000000000.500000000000000 0.550000000000000 0.6000000000000000.650000000000000 0.700000000000000 0.7500000000000000.800000000000000 0.850000000000000 0.9000000000000000.950000000000000 1 1.05000000000000 1.100000000000001.15000000000000 1.20000000000000 1.250000000000001.30000000000000 1.35000000000000 1.400000000000001.45000000000000 1.50000000000000 1.550000000000001.60000000000000 1.65000000000000 1.700000000000001.75000000000000 1.80000000000000 1.850000000000001.90000000000000 1.95000000000000 2]精确值y=[1 0.951270575499286 0.905162581964041 0.861792023574942 0.821269246922018 0.783699216928595 0.7491817793182820.717811910281287 0.689679953964361 0.6648718483782270.643469340287367 0.625550189619513 0.6111883639059740.600454223238984 0.593414696208590 0.5901334472589850.590671035882779 0.595085068051273 0.6034303402594010.615758976545499 0.632120558828558 0.6525622508888450.677128916301921 0.705863230620947 0.7388057880877980.775995203139810 0.817468206965988 0.8632597393541090.913403036058394 0.967929711906203 1.026869839851571.09025202617326 1.15810348200535 1.230450091379251.30731647594727 1.38872605654956 1.474701111778411.56526283368637 1.66043138077737 1.760225928413491.86466471676339]近似值r=[1 0.951270579427083 0.905162589754030 0.861792035158576 0.821269262228247 0.783699235884277 0.749181801848555 0.717811936309911 0.689679983414029 0.664871881170853 0.643469376344344 0.625550228861950 0.611188406254909 0.600454268615583 0.593414744534318 0.590133498455765 0.590671089873135 0.595085124758461 0.603430399607513 0.615759038459571 0.632120623234657 0.652562317714146 0.677128985474774 0.705863302070938 0.738805861745797 0.775995278938013 0.817468284837952 0.863259819234784 0.913403117884140 0.967929795614811 1.02686992538227 1.09025211346674 1.15810357100373 1.23045018202612 1.30731656818767 1.38872615032996 1.47470120704672 1.56526293039190 1.66043147887084 1.76022602784702 1.86466481749047](3)令1.0=h ,使用上述程序执行20步时,最终全局误差Error=2.029120120361494e-05;当h 减半时,令05.0=h ,使用上述程序执行40步时,最终全局误差Error=2.436187318766159e-06。