西南交大数值分析上机实习报告
西南交通大学数值分析上机实验报告

数值分析上机实习报告学号:姓名:专业:联系电话:任课教师:序 (3)一、必做题 (4)1、问题一 (4)1.1 问题重述 (4)1.2 实验方法介绍 (4)1.3 实验结果 (5)2、问题二 (7)2.1 问题重述 (7)2.2 实验原理 (7)雅各比算法:将系数矩阵A分解为:A=L+U+D,则推到的最后迭代公式为: (8)2.3 实验结果 (8)二、选做题 (10)3、问题三 (10)3.1 问题重述 (10)3.2 实验原理 (10)3.3 实验结果 (11)总结 (11)序伴随着计算机技术的飞速发展,所有的学科都走向定量化和准确化,从而产生了一系列的计算性的学科分支,而数值计算方法就是解决计算问题的桥梁和工具。
数值计算方法,是一种研究并解决数学问题的数值近似解方法,是在计算机上使用的解数学问题的方法。
为了提高计算能力,需要结合计算能力与计算效率,因此,用来解决数值计算的软件因为高效率的计算凸显的十分重要。
数值方法是用来解决数值问题的计算公式,而数值方法的有效性需要根据其方法本身的好坏以及数值本身的好坏来综合判断。
数值计算方法计算的结果大多数都是近似值,但是理论的严密性又要求我们不仅要掌握将基本的算法,还要了解必要的误差分析,以验证计算结果的可靠性。
数值计算一般涉及的计算对象是微积分,线性代数,常微分方程中的数学问题,从而对应解决实际中的工程技术问题。
在借助MA TLAB、JA V A、C++ 和VB软件解决数学模型求解过程中,可以极大的提高计算效率。
本实验采用的是MATLAB软件来解决数值计算问题。
MA TLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,其对解决矩阵运算、绘制函数/数据图像等有非常高的效率。
本文采用MATLAB对多项式拟合、雅雅格比法与高斯-赛德尔迭代法求解方程组迭代求解,对Runge-Kutta 4阶算法进行编程,并通过实例求解验证了其可行性,使用不同方法对计算进行比较,得出不同方法的收敛性与迭代次数的多少,比较各种方法的精确度和解的收敛速度。
数值分析2024上机实验报告

数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。
在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。
本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。
一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。
1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。
常见的数值方法有二分法、牛顿法、割线法等。
在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。
2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。
插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。
在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
3.数值积分这部分实验要求使用数值方法计算给定函数的积分。
常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。
在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。
4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。
常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。
在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。
结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。
2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。
结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。
数值分析上机实习报告

指导教师:姓名:学号:专业:联系电话:上海交通大学目录序言 (3)实验课题(一) 雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度 (4)数值分析 (6)实验课题(二) 松弛因子对SOR法收敛速度的影响 (6)数值分析 (12)总结 (13)附录(程序清单) (14)1.雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度 (14)雅可比迭代法: (14)高斯-塞得尔迭代法: (16)2.松弛因子对SOR法收敛速度的影响 (18)松弛法(SOR) (18)序言随着科学技术的发展,提出了大量复杂的数值计算问题,在实际解决这些计算问题的长期过程中,形成了计算方法这门学科,专门研究各种数学问题的数值解法(近似解法),包括方法的构造和求解过程的误差分析,是一门内容丰富,有自身理论体系的实用性很强的学科。
解决工程问题,往往需要处理很多数学模型,这就要花费大量的人力和时间,但是还有不少数学模型无法用解析法得到解。
使用数值方法并利用计算机,就可以克服这些困难。
事实上,科学计算已经与理论分析、科学实验成为平行的研究和解决科技问题的科学手段,经常被科技工作者所采用。
作为科学计算的核心内容——数值分析(数值计算方法),已逐渐成为广大科技工作者必备的基本知识并越来越被人重视。
由于数值方法是解数值问题的系列计算公式,所以数值方法是否有效,不但与方法本身的好坏有关,而且与数值问题本身的好坏也有关,因此,研究数值方法时,不但需要研究数值方法的好坏,即数值稳定性问题,而且还需要研究数值问题本身的好坏,即数值问题的性态,以及它们的判别问题。
数值计算的绝大部分方法都具有近似性,而其理论又具有严密的科学性,方法的近似值正是建立在理论的严密性基础上,根据计算方法的这一特点。
因此不仅要求掌握和使用算法,还要重视必要的误差分析,以保证计算结果的可靠性。
数值计算还具有应用性强的特点,计算方法的绝大部分方法如求微分方程近似解,求积分近似值,求解超越方程,解线性方程组等都具有较强的实用性,而插值法,最小二乘法,样条函数等也都是工程技术领域中常用的,有实际应用价值的方法。
数值分析第一次上机练习实验报告

数值分析第一次上机练习实验报告一、实验目的本次实验旨在通过上机练习,加深对数值分析方法的理解,并掌握实际应用中的数值计算方法。
二、实验内容1. 数值计算的基本概念和方法在本次实验中,我们首先回顾了数值计算的基本概念和方法。
数值计算是一种通过计算机进行数值近似的方法,其包括近似解的计算、误差分析和稳定性分析等内容。
2. 方程求解的数值方法接下来,我们学习了方程求解的数值方法。
方程求解是数值分析中非常重要的一部分,其目的是找到方程的实数或复数解。
我们学习了二分法、牛顿法和割线法等常用的数值求解方法,并对它们的原理和步骤进行了理论学习。
3. 插值和拟合插值和拟合是数值分析中常用的数值逼近方法。
在本次实验中,我们学习了插值和拟合的基本原理,并介绍了常见的插值方法,如拉格朗日插值和牛顿插值。
我们还学习了最小二乘拟合方法,如线性拟合和多项式拟合方法。
4. 数值积分和数值微分数值积分和数值微分是数值分析中的两个重要内容。
在本次实验中,我们学习了数值积分和数值微分的基本原理,并介绍了常用的数值积分方法,如梯形法和辛卜生公式。
我们还学习了数值微分的数值方法,如差商法和牛顿插值法。
5. 常微分方程的数值解法常微分方程是物理和工程问题中常见的数学模型,在本次实验中,我们学习了常微分方程的数值解法,包括欧拉法和四阶龙格-库塔法。
我们学习了这些方法的步骤和原理,并通过具体的实例进行了演示。
三、实验结果及分析通过本次实验,我们深入理解了数值分析的基本原理和方法。
我们通过实际操作,掌握了方程求解、插值和拟合、数值积分和数值微分以及常微分方程的数值解法等数值计算方法。
实验结果表明,在使用数值计算方法时,我们要注意误差的控制和结果的稳定性。
根据实验结果,我们可以对计算结果进行误差分析,并选择适当的数值方法和参数来提高计算的精度和稳定性。
此外,在实际应用中,我们还需要根据具体问题的特点和条件选择合适的数值方法和算法。
四、实验总结通过本次实验,我们对数值分析的基本原理和方法有了更加深入的了解。
西南交通大学-数值分析--报告

数值分析课程上机作业计算报告班级:学号:姓名:专业:大地测量学及测绘工程指导老师:联系电话:西南交通大学-数值分析--报告序言通过数值分析的理论知识的学习,此次实验将我们学过的理论知识运用于实践之中。
本次实验,我选用的计算机语言为MATLAB,其主要有一下几个特点。
1.编程效率高MATLAB是一种面向科学与工程计算的高级语言,允许使用数学形式的语言编写程序,且比BASIC、FORTRAN和C等语言更加接近我们书写计算公式的思维方式,用MATLAB编写程序犹如在演算纸上排列出公式与求解问题。
因此,MATLAB语言也可通俗地称为演算纸式科学算法语言。
由于它编写简单,所以编程效率高,易学易懂2. 用户使用方便MATLAB语言与其他语言相比,较好的解决了上述问题,把编辑、编译、链接和执行融为一体。
它能在同一画面上进行灵活操作,快速排除输入程序中的书写错误、语法错误以至语义错误,从而加快了用户编写、修改和调试程序的速度,可以说在编程和调试过程中它是一种比VB还要简单的语言。
3. 方便的绘图功能MATLAB的绘图是十分方便的,它有一系列绘图函数(命令),例如线性坐标、对数坐标、半对数坐标及极坐标,均只需调用不同的绘图函数(命令),在图上标出图题、XY轴标注,格(栅)绘制也只需调用相应的命令,简单易行。
另外,在调用绘图函数时调整自变量可绘出不变颜色的点、线、复线或多重线。
这种为科学研究着想的设计是通用的编程语言所不能及的。
目录1.实验一 (1)1.1题目 (1)1.2计算思路 (1)1.3计算结果 (1)1.4总结 (6)2.第二题 (7)2.1题目 (7)2.2 松弛思想分析 (7)2.3问题的求解 (7)2.4总结 (10)3.第三题 (11)3.1题目 (11)3.2 Runge-Kutta法的基本思想 (11)3.3 问题的求解 (12)3.4问题的总结 (14)总结 (15)附件 (16)实验一程序设计 (16)实验二程序设计 (16)实验三程序设计 (17)实验一:插值问题1.1题目已知:a=-5,b=5, 以下是某函数f(x)的一些点(x k,y k), 其中x k=a+0.1(k-1) ,k=1,..,101;(数据略)。
数值分析2016上机实验报告

序言数值分析是计算数学的范畴,有时也称它为计算数学、计算方法、数值方法等,其研究对象是各种数学问题的数值方法的设计、分析及其有关的数学理论和具体实现的一门学科,它是一个数学分支。
是科学与工程计算(科学计算)的理论支持。
许多科学与工程实际问题(核武器的研制、导弹的发射、气象预报)的解决都离不开科学计算。
目前,试验、理论、计算已成为人类进行科学活动的三大方法。
数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值计算方法及其理论与软件实现。
现在面向数值分析问题的计算机软件有:C,C++,MATLAB,Python,Fortran等。
MATLAB是matrix laboratory的英文缩写,它是由美国Mathwork公司于1967年推出的适合用于不同规格计算机和各种操纵系统的数学软件包,现已发展成为一种功能强大的计算机语言,特别适合用于科学和工程计算。
目前,MATLAB应用非常广泛,主要用于算法开发、数据可视化、数值计算和数据分析等,除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
本实验报告使用了MATLAB软件。
对不动点迭代,函数逼近(lagrange插值,三次样条插值,最小二乘拟合),追赶法求解矩阵的解,4RungeKutta方法求解,欧拉法及改进欧拉法等算法做了简单的计算模拟实践。
并比较了各种算法的优劣性,得到了对数值分析这们学科良好的理解,对以后的科研数值分析能力有了极大的提高。
目录序言 (1)问题一非线性方程数值解法 (3)1.1 计算题目 (3)1.2 迭代法分析 (3)1.3计算结果分析及结论 (4)问题二追赶法解三对角矩阵 (5)2.1 问题 (5)2.2 问题分析(追赶法) (6)2.3 计算结果 (7)问题三函数拟合 (7)3.1 计算题目 (7)3.2 题目分析 (7)3.3 结果比较 (12)问题四欧拉法解微分方程 (14)4.1 计算题目 (14)4.2.1 方程的准确解 (14)4.2.2 Euler方法求解 (14)4.2.3改进欧拉方法 (16)问题五四阶龙格-库塔计算常微分方程初值问题 (17)5.1 计算题目 (17)5.2 四阶龙格-库塔方法分析 (18)5.3 程序流程图 (18)5.4 标准四阶Runge-Kutta法Matlab实现 (19)5.5 计算结果及比较 (20)问题六舍入误差观察 (22)6.1 计算题目 (22)6.2 计算结果 (22)6.3 结论 (23)7 总结 (24)附录问题一 非线性方程数值解法1.1 计算题目编写不动点迭代法求根程序:把方程010423=-+x x 写成至少四种x=g (x )的形式,取初值5.1x 0=,进行不动点迭代求根,并比较收敛性及收敛速度。
数值分析上机实践报告

数值分析上机实践报告一、实验目的本次实验主要目的是通过上机操作,加深对数值分析算法的理解,并熟悉使用Matlab进行数值计算的基本方法。
在具体实验中,我们将实现三种常见的数值分析算法:二分法、牛顿法和追赶法,分别应用于解决非线性方程、方程组和线性方程组的求解问题。
二、实验原理与方法1.二分法二分法是一种常见的求解非线性方程的数值方法。
根据函数在给定区间端点处的函数值的符号,不断缩小区间的长度,直到满足精度要求。
2.牛顿法牛顿法是求解方程的一种迭代方法,通过构造方程的泰勒展开式进行近似求解。
根据泰勒展式可以得到迭代公式,利用迭代公式不断逼近方程的解。
3.追赶法追赶法是用于求解三对角线性方程组的一种直接求解方法。
通过构造追赶矩阵,采用较为简便的向前追赶和向后追赶的方法进行计算。
本次实验中,我们选择了一组非线性方程、方程组和线性方程组进行求解。
具体的实验步骤如下:1.调用二分法函数,通过输入给定区间的上下界、截止误差和最大迭代次数,得到非线性方程的数值解。
2.调用牛顿法函数,通过输入初始迭代点、截止误差和最大迭代次数,得到方程组的数值解。
3.调用追赶法函数,通过输入追赶矩阵的三个向量与结果向量,得到线性方程组的数值解。
三、实验结果与分析在进行实验过程中,我们分别给定了不同的参数,通过调用相应的函数得到了实验结果。
下面是实验结果的汇总及分析。
1.非线性方程的数值解我们通过使用二分法对非线性方程进行求解,给定了区间的上下界、截止误差和最大迭代次数。
实验结果显示,根据给定的输入,我们得到了方程的数值解。
通过与解析解进行比较,可以发现二分法得到的数值解与解析解的误差在可接受范围内,说明二分法是有效的。
2.方程组的数值解我们通过使用牛顿法对方程组进行求解,给定了初始迭代点、截止误差和最大迭代次数。
实验结果显示,根据给定的输入,我们得到了方程组的数值解。
与解析解进行比较,同样可以发现牛顿法得到的数值解与解析解的误差在可接受范围内,说明牛顿法是有效的。
数值分析上机实践报告

数值分析上机实践报告一、实验目的本实验的目的是通过编写数值分析程序,掌握解决数学问题的数值计算方法,并通过实际应用来检验其有效性和准确性。
具体包括以下几个方面的内容:1.掌握二分法和牛顿迭代法的基本原理和实现方法;2.熟悉利用矩阵的LU分解和追赶法解线性方程组的过程;3.通过具体的实例应用,比较不同方法的计算效果和精度。
二、实验内容本实验分为三个部分,每个部分包括一个具体的数学问题和相应的数值计算方法。
1.问题一:求方程f(x)=x^3-5x^2+10x-80=0的近似解。
在问题一中,我们通过二分法和牛顿迭代法来求解方程的近似解,并比较两种方法的精度和收敛速度。
2.问题二:用LU分解解线性方程组。
问题二中,我们通过矩阵的LU分解方法解线性方程组Ax=b,然后和直接用追赶法解线性方程组进行对比,验证LU分解的有效性和准确性。
三、实验结果及分析1.问题一的结果分析:通过二分法和牛顿迭代法求解方程f(x)=x^3-5x^2+10x-80=0的近似解,得到的结果如下:从结果来看,两种方法得到的近似解均与真实解x≈5非常接近。
但是,通过比较可以发现,牛顿迭代法的计算速度比二分法更快,迭代的次数更少。
因此,在需要高精度近似解的情况下,牛顿迭代法是一个更好的选择。
2.问题二的结果分析:通过LU分解和追赶法解线性方程组Ax=b,得到的结果如下:-用LU分解解线性方程组得到的结果为x1≈1.0,x2≈2.0,x3≈3.0;-用追赶法解线性方程组得到的结果为x1≈1.0,x2≈2.0,x3≈3.0。
从结果来看,两种方法得到的结果完全一致,而且与真实解非常接近。
这表明LU分解方法和追赶法均可以有效地解决线性方程组问题。
但是,在实际应用中,当方程组规模较大时,LU分解方法的计算复杂度较高,因此追赶法更加适用。
四、实验总结通过本实验,我掌握了二分法和牛顿迭代法以及LU分解和追赶法的基本原理和实现方法。
通过具体的数学问题实例应用,我比较了不同方法的计算效果和精度,得出以下结论:1.在求解函数的近似解时,牛顿迭代法相对于二分法具有更快的收敛速度和更高的计算精度;2.在解决线性方程组问题时,LU分解方法在计算准确性方面与追赶法相当,但在处理较大规模的问题时,计算复杂度较高,追赶法更适合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析上机实习报告(2015~2016学年第一学期)姓名:xxxxx xx学号:xxxxxxxxxx专业:岩土工程指导教师:***联系电话:xxxxxxxxxxx实习成绩:xxxxxxxxx2015年12月10日目录一序言 (3)二正文 (3)题目3 (3)原理3 (3)结果3 (4)分析3 (5)题目4 (6)原理4 (6)结果4 (7)分析4 (7)题目5 (7)原理5 (7)结果5 (8)分析5 (9)三总结 (9)四附录 (9)附录1雅格比迭代法程序代码 (9)附录2高斯-赛德尔迭代法程序 (10)附录3求解题目3程序代码 (11)附录4 SOR法程序代码 (12)附录5求解题目4程序代码 (13)附录6 Ru n ge-Kutt a 4阶算法程序代码 (13)附录7求解题目5程序代码 (14)一 序言MATLAB 的M 语言,一种演算纸方式的编程语言。
通过这种语言,用户可以用类似于数学公式的方式来编写算法,大大降低了编程所需的难度并节省了时间,从而让用户把主要的精力集中在算法的构思而不是编程上。
为便于检验结果,本上机实习全部使用M 语言编程,然后用内置函数求解进行对比。
二 正文题目3用雅格比法与高斯-赛德尔迭代法解下列方程组Ax =b ,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。
(1) 12621-3100142, b 2, b -2003144345A -⎛⎫⎛⎫⎛⎫⎪ ⎪ ⎪=-== ⎪ ⎪ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭ (2) 1210.80.8350.810.8, b 2, b 00.80.811-10A ⎛⎫⎛⎫⎛⎫⎪ ⎪ ⎪=== ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭(3) 134, b 716A ⎛⎫⎛⎫== ⎪ ⎪-⎝⎭⎝⎭原理: 雅格比迭代法:)b x a x a x a x a (a 1x )b x a x a x a (a 1x )b x a x a x a (a 1x n )1k (1n 1nn )1k (33n )1k (22n )1k (11n nn)k (n2)1k (n n 2)1k (323)1k (12122)k (21)1k (nn 1)1k (313)1k (21211)k (1-++++-=-+++-=-+++-=------------Jacobi 迭代也可看成简单迭代的一种,故对简单迭代的所有性质也成立。
从上可知:如果矩阵A 的主对角元不为零,则其Jacobi 迭代是唯一的。
如用矩阵形式表示:则迭代矩阵:B=I -A D 1-其中:g= b ,D=diag(a 11,…,a nn )Jacobi 迭代收敛的充要条件是ρ(I-1D -A)<1。
Gauss-Seidel 迭代法()(1)(1)(1)11221331111()()(1)(1)22112332222()()()()()112233111()1()1()k k k k n n k k k k n n k k k k k n n n n nn n n nnx a x a x a x b a x a x a x a x b a x a x a x a x a x b a -------=-+++-=-+++-=-++++-我们称它为方程组Ax=b 的Gauss-Seidel 迭代式,如写成矩阵形式为: x (k)= D -1 (L x (k)+Ux (k-1))+ D -1bx (k)= (D-L)-1U x (k-1)+ (D-L)-1b其中:L=-12121(1)1210000,00nn n n n nn a a aU a a a a --⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=-⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎢⎥⎣⎦D=diag(a 11,…,a nn )Gauss-Seidel 迭代法的迭代矩阵为(D -L 1)-U ,常数项为(D -L 1)-b ,收敛的充要条件是ρ((D -L 1)-U)<1 结果3取()(1)10^(8)k k x x ∞-≤--(1)分析3GS 迭代收敛速度一般比Jacobi 迭代收敛速度快,右端项对迭代是否收敛没有影响,但有时对迭代次数会产生较大的影响。
题目4松弛因子对SOR 法收敛速度的影响。
用SOR 法求解方程组Ax =b ,其中41-3141-2...-2, b ....141-214-3A -⎛⎫⎛⎫⎪ ⎪- ⎪ ⎪ ⎪ ⎪== ⎪ ⎪ ⎪ ⎪⎪ ⎪- ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭要求程序中不存系数矩阵A ,分别对不同的阶数取w=1.1, 1.2, ...,1.9进行迭代,记录近似解x (k)达到||x (k)-x (k-1)||<10-6时所用的迭代次数k ,观察松弛因子对收敛速度的影响,并观察当w ≤0或w ≥2会有什么影响? 原理:逐次超松弛迭代法(SOR-迭代法):选取矩阵A 的下三角矩阵分量并赋予参数w ,将之作为分裂矩阵M ,)(1wL D wM -=,其中,w>0,为可选择的松弛因子,又(1)公式构造一个迭代法,其迭代矩阵为A wL D w I B s 1)(---≡从而得到解b X A =*的逐次超松弛迭代法。
(0)(1)()k 0,1,2,....k k s XXB X f +⎧⎪⎨=+=⎪⎩ 其中:bwL D w f wU D w wL D B s 11)())1(()(---=+--=由此,解b X A =*的SOR-迭代法的计算公式为⎪⎩⎪⎨⎧--+==∑∑-=+=+++)(),....,(111)1()1()()1()0()0(2)0(1)0(i j n i j k j ij k j ij i ii k i k iTn X a X a b a w X X X X X X (2)观察(2)式,可得结论:(1)当w=1时,SOR-迭代法为J-迭代法。
(2)当w>1时,称为超松弛迭代法,当w<1时,称为低松弛迭代 结果4取()(1)10^(6)k k x x ∞-≤--时所用的迭代次数k 列表如下:分析4松弛因子的选取会对迭代次数及和是否收敛产生较大影响,松弛因子w 应该满足0<w<2,否则会出错或者出现发散的情况。
题目5用Ru n ge-Kutt a 4阶算法对初值问题y /=-20*y ,y (0)=1按不同步长求解,用于观察稳定区间的作用,推荐两种步长h=0.1,0.2。
注:此方程的精确解为:y =e -20x 原理:一阶常微分方程初值问题的数值解法是近似计算中很重要的部分。
0(,)()dyf x y dxy x y⎧=⎪⎨⎪=⎩ (5.1) 常微分方程初值问题的数值解法是求方程(5.1)的解在点列1(0,1,)n n n x x h n -=+=上的近似值n y ,这里n h 是1n x -到n x 的步长,一般略去下标记为h 。
常微分方程初值问题的数值解法一般分为两大类:(1)单步法:这类方法在计算n y 时,只用到1n x +、n x 和n y ,即前一步的值。
因此,在有了初值以后就可以逐步往下计算。
典型方法如龙格–库塔()R K -方法。
(2)多步法:这类方法在计算1n y +时,除用到1n x +、n x 和n y 以外,还要用(1,2,,;0)n p y p k k -=>,即前面k 步的值。
典型方法如Adams 方法。
经典的R K -方法是一个四阶的方法,它的计算公式是:112341213243(22)6(,)(,)22(,)22(,)n n n n n nn n n n h y y K K K K K f x y h h K f x y K h h K f x y K K f x h y hK +⎧=++++⎪⎪=⎪⎪⎪=++⎨⎪⎪=++⎪⎪=++⎪⎩ (6.2) R K -方法的优点是:单步法、精度高,计算过程便于改变步长,缺点是计算量较大,每前进一步需要计算四次函数值f 。
结果5分析5步长的选取会直接影响能否求出准确结果以及所求结果的准且性。
三 总结实际工程中的数学问题往往比较复杂,需要借助于计算机这一工具进行计算。
由于计算机实质上只会做加减乘除运算,所以研究怎样通过计算机所能执行的基本计算,求得数学问题的有效数值解是数值分析的最终任务。
数值分析计算原理一般都不会太难,但是运算量很大,尤其是问题中存在大型矩阵时,情况更是如此。
同时,运算方法的选择,初始参数的选择都会对能否得到正确结果和得到正确结果的运算量产生较大影响。
四附录附录1雅格比迭代法程序代码function [x,k]=Jacobimethod(A,b,x0,N,emg)% A:线性方程组左端矩阵% b:线性方程组右端向量% x0:迭代初值% N:迭代次数上界,若迭代次数大于n,则迭代失败% emg:精度指标% k:迭代次数% x:用迭代法求得的线性方程组的近似解n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0; k=0;r=max(abs(b-A*x1));while r>emgfor i=1:nsum=0;for j=1:nif i~=jsum=sum+A(i,j)*x1(j);endendx2(i)=(b(i)-sum)/A(i,i);endr=max(abs(x2-x1));x1=x2;k=k+1;if k>Ndisp('迭代失败,返回')return;endendx=x1;附录2高斯-赛德尔迭代法程序function [x,k]=Gaussmethod(A,b,x0,N,emg)% A:线性方程组左端矩阵% b:线性方程组右端向量% x0:迭代初值% N:迭代次数上界,若迭代次数大于n,则迭代失败% emg:精度指标% k:迭代次数% x:用迭代法求得的线性方程组的近似解n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0;r=max(abs(b-A*x1));k=0;while r>emgfor i=1:nsum=0;for j=1:nif j>isum=sum+A(i,j)*x1(j);elseif j<isum=sum+A(i,j)*x2(j);endendx2(i)=(b(i)-sum)/A(i,i);endr=max(abs(x2-x1));x1=x2;k=k+1;if k>Ndisp('迭代失败,返回')return;endendx=x1附录 3 求解题目3程序代码>>A=[6,2,-1;1,4,-2;-3,1,4]; b=[-3;2;4];x0=[0;0;0];>> [x,k]=Jacobimethod(A,b,x0,100,10^(-8))x =-0.72730.80810.2525k =31>> A=[6,2,-1;1,4,-2;-3,1,4]; b=[100;-200;345];x0=[0;0;0];>> [x,k]=Jacobimethod(A,b,x0,100,10^(-8))36.3636-2.0707114.0404k =37>>A=[1,0.8,0.8;0.8,1,0.8;0.8,0.8,1]; b=[3;2;2];x0=[0;0;0]; >> [x,k]=Jacobimethod(A,b,x0,100,10^(-8))迭代失败,返回>>A=[1,0.8,0.8;0.8,1,0.8;0.8,0.8,1]; b=[5;0;-10];x0=[0;0;0]; >> [x,k]=Jacobimethod(A,b,x0,100,10^(-8))迭代失败,返回>>A=[1,3;-7,1]; b=[4;6];x0=[0;0];>> [x,k]=Jacobimethod(A,b,x0,100,10^(-8))迭代失败,返回>>A=[6,2,-1;1,4,-2;-3,1,4]; b=[-3;2;4];x0=[0;0;0];>> [x,k]=Gaussmethod(A,b,x0,100,10^(-8))x =-0.72730.80810.2525k =19>>A=[6,2,-1;1,4,-2;-3,1,4]; b=[100;-200;345];x0=[0;0;0]; >> [x,k]=Gaussmethod(A,b,x0,100,10^(-8))x =36.3636-2.0707114.0404k =24>>A=[1,0.8,0.8;0.8,1,0.8;0.8,0.8,1]; b=[3;2;2];x0=[0;0;0]; >> [x,k]=Gaussmethod(A,b,x0,100,10^(-8))x =4.2308-0.7692-0.769255>>A=[1,0.8,0.8;0.8,1,0.8;0.8,0.8,1]; b=[5;0;-10];x0=[0;0;0];>> [x,k]=Gaussmethod(A,b,x0,100,10^(-8))x =32.69237.6923-42.3077k =65>>A=[1,3;-7,1]; b=[4;6];x0=[0;0];>> [x,k]=Gaussmethod(A,b,x0,100,10^(-8))迭代失败,返回附录4 SOR法程序代码function [x,k]=SORmethod(A,b,x0,N,emg,w)% A:线性方程组左端矩阵% b:线性方程组右端向量% x0:迭代初值% N:迭代次数上界,若迭代次数大于n,则迭代失败% emg:精度指标% w:松弛因子% x:用迭代法求得的线性方程组的近似解n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0;r=max(abs(b-A*x1));k=0;while r>emgfor i=1:nsum=0;for j=1:nif j>=isum=sum+A(i,j)*x1(j);elseif j<isum=sum+A(i,j)*x2(j);endendx2(i)=x1(i)+w*(b(i)-sum)/A(i,i);endr=max(abs(x2-x1));x1=x2;k=k+1;if k>Ndisp('迭代失败,返回')return;endendx=x1;附录5求解题目4程序代码(只有n=4,w=1.1的程序,其他类似)A=[-4 1 0 0;1 -4 1 0;0 1 -4 1;0 0 1 -4];b=[-3;-2;-2;-3];x0=[0;0;0;0];>> [x,k]=SORmethod(A,b,x0,10000,10^(-6),1.1)x =1.00001.00001.00001.0000k =8附录6 Ru n ge-Kutt a 4阶算法程序代码function R=Rungkuta4(f, a, b, n, ya)% f:微分方程右端函数句柄% a,b:自变量取值区间的两个端点% n:区间等分的个数% ya:函数初值y(a)% R=[x',y']:自变量X 和解Y 所组成的矩阵h=(b-a)/n;x=zeros(n+1);y=zeros(1,n+1);x=a:h:b;y(1)=ya;for i=1:nk1=h*feval(f,x(i),y(i));k2=h*feval(f,x(i)+h/2,y(i)+k1/2);k3=h*feval(f,x(i)+h/2,y(i)+k2/2);k4=h*feval(f,x(i)+h,y(i)+k3);y(i+1)=y(i)+(k1+2*k2+2*k3+k4)/6;endR=[x',y'];附录7求解题目5程序代码f=@(x,y)-20*y;R=Rungkuta4(f, 0, 1, 10, 1)R =0 1.00000.1000 0.33330.2000 0.11110.3000 0.03700.4000 0.01230.5000 0.00410.6000 0.00140.7000 0.00050.8000 0.00020.9000 0.00011.0000 0.0000f=@(x,y)-20*y;R=Rungkuta4(f, 0, 1, 5, 1)R =1.0e+003 *0 0.00100.0002 0.00500.0004 0.02500.0006 0.12500.0008 0.62500.0010 3.1250。