Section outline
-
-
本项目为2019年教育部产学研协作项目,感谢迈斯沃克软件(北京)有限公司的资金和技术支持!
有关本项目的资源使用和相关事宜,可联系MathWorks中国教育团队:academic_cn@mathworks.com
-
本课程是《数值分析》对应的实验课程,采用MATLAB软件为算法设计平台,主要通过上机实验的方式强化学生的算法实现能力,通过数值算例分析算法的性质,内容涵盖非线性方程求解、线性代数方程组求解、插值与拟合、数值优化、特征值计算和常微分方程数值求解等数值分析的主干问题,是信息与计算科学专业的核心专业课程。
-
1、实验目的
1) 掌握MATLAB的基本编程规范:自定义函数、基本流程控制、图形绘制;
2) 通过实验理解浮点数的精度和溢出;
3) 培养编程与上机调试能力。
2、实验要求
1) 编制M文件形式的MATLAB自定义函数,通过参数传递输入输出结果;
2) 使用顺序、条件分支和循环(while循环和for循环)来解决实际计算问题。
3、实验思考
1) 浮点数的表示范围和精度是由哪些因素决定的,浮点数在进行运算时要注意哪些事项。
2) MATLAB中的函数eps的含义是什么?
-
1、实验目的
1) 通过实验加深对浮点数计算时误差传播的规律的了解;
2) 掌握在加减乘除等基本运算中保持计算精度的基本原则。
2、实验思考
如何设计计算流程使得在四则混合运算时尽可能地保留数值的精度?
-
1、实验目的
1) 掌握常用的非线性方程的求解算法,包括不动点迭代、二分法、试值法、牛顿法和割线法;
2) 并通过数值算例理求根解算法的收敛速度和健壮性。
2、实验要求
将算法编写为MATLAB函数的形式,通过输入参数传递待求解的方程、区间和初值信息
3、实验思考
1) 二分法收敛速度慢,但是适用条件简单容易判断;牛顿法收敛速度快但收敛条件不易判断。能否设计一种混合算法,既保持计算过程的稳健性(不易失效),又能够在条件允许的情况下采用更高阶的计算格式。
2) MATLAB内置的求根函数fzero的算法逻辑是怎样的?
-
1、自编含根区间划分程序: approot.m
2、自编不动点迭代程序:fixpt.m
3、自编二分法程序:bisect.m
4、自编试值法程序:regula.m
5、自编牛顿法程序:newton.m
6、自编割线法程序:secant.m
-
1、实验目的
1) 掌握高斯消去法的编程,通过实例验证选主元高斯消去法的优点;
2) 掌握针对三对角矩阵的特殊的高斯消去法:追赶法。
2、实验要求
使用for循环和MATLAB的向量运算来实现两种算法的不同版本。
3、实验思考
在MATLAB中,for循环和向量运算对算法的效率有哪些影响?
-
1、实验目的
掌握LU分解的程序实现,从矩阵分解的角度理解求解方程组的高斯消元过程。
2、实验要求
使用MATLAB的向量运算实现算法。
3、实验思考
LU分解法求线性方程组相比高斯消去法有哪些优势?
-
1、自编带列选主元过程的LU分解法程序:lufact.m
2、自编利用LU分解求逆矩阵程序:luinv.m
3、自编LU分解前代法程序:forsub.m
4、自编LU分解后代法程序:backsub.m
5、自编使用MATLAB内置lu分解函数的求逆矩阵程序:fbinv.m
-
1、实验目的
掌握求解线性方程组的雅可比迭代法、高斯-赛德尔迭代法和逐次超松弛法的MATLAB实现。
2、实验内容
编程实现求解线性方程组的雅可比迭代法和高斯-赛德尔迭代法的MATLAB程序。
3、实验思考
1) 高斯-赛德尔迭代法从哪个方面对雅可比迭代法进行了改进?
2) 相比高斯消元法和LU分解这类“直接”的方法,迭代法求解线性方程组在计算过程的执行上有什么本质的区别?
-
1、实验目的
通过解线性方程组来确定多项式插值函数来了解数值计算问题的不稳定性。
2、实验要求
使用之前实验中所编写的求解线性代数方程组的函数来实现。
3、实验思考
通过解线性方程组来确定插值函数的方法从数值计算的角度看存在哪些缺点?如何根据多项式插值问题的自身特征来给出更有效的插值函数构造方法?
-
1、离心泵性能曲线插值程序:pumpCurveInt.m
2、离心泵性能曲线插值改进程序1:pumpCurveInt1.m
3、离心泵性能曲线插值改进程序2:pumpCurveInt2.m
4、范德蒙矩阵生成程序:vander.m
-
1、实验目的
1) 掌握常见插值多项式构造算法的MATLAB实现;
2) 编程实现多项式求定积分的快速算法:霍纳算法。
2、实验内容
1) 编程实现多项式插值的拉格朗日插值法、牛顿插值法、线性逐次插值法;
2) 编程实现多项式求定积分的快速算法霍纳算法。
3、实验思考
1) 拉格朗日插值法、牛顿插值法、线性逐次插值算法在计算机上实现时各有哪些优缺点?
2) 霍纳算法实现多项式求值的快速计算的基本出发点是什么?
-
1、自编拉格朗日插值法序:lagran.m
2、自编牛顿插值法程序:newpoly.m
3、自编Neville算法程序:Neville.m
4、自编霍纳算法程序:Horner3.m
-
1、实验目的
1) 通过数值算例体验高次插值多项式在插值点外产生的振荡现象。
2) 掌握分段三次艾米特插值的MATLAB实现。
2、实验内容
1) 对N+1个点作N次多项式插值。
2) 分段一阶多项式插值。
3) 分段三次Hermite插值。
3、实验要求
1) 利用实验8的插值方法求出插值给定数据点的多项式。
2) 编写分段三次Hermite插值多项式函数并用于求解问题。
4、思考
1) 除了使用分段多项式插值,是否有其他消除多项式摆动现象的办法?
2) 分段三次Hermite插值多项式的使用方便吗?
-
1、实验目的
构造经过数据点的无误差无多余振动的光滑曲线。
2、实验内容
通过给出不同的端点条件获得多种类型的样条函数表达式和图形。
3、实验要求
编写构造五种非周期三次插值样条多项式的函数。
4、思考
如果数据点具有周期性质,能否用样条函数来插值?该如何确定边界条件?
-
1、自编自然边界样条程序:cnsfit.m
2、自编端点曲率调整样条程序:cepcasfit.m
3、自编紧压样条程序:csfit.m
4、自编外推样条程序:cesfit.m
5、自编抛物线终结样条:cptsfit.m
-
1、实验目的
寻找能反映数据点的大致分布形态并满足均方根误差最小的最小二乘拟合表达式。
2、实验内容
1) 在指定次数的多项式函数集合中寻找最小二乘拟合多项式。
2) 对具有周期性特点的数据点集,用三角多项式进行最小二乘拟合。
3、实验要求
1) 编写可构造任意有限阶的最小二乘拟合多项式程序。
2) 编写可构造任意有限阶的最小二乘拟合三角多项式程序。
4、思考
如果数据点不具有多项式性质,还能用什么函数来进行拟合?
-
1、自编最小二乘拟合曲线生成函数程序:lsploy.m
2、自编三角多项式最小二乘拟合函数程序:tpcoeff.m
3、自编三角多项式最小二乘拟合曲线生成函数程序:tp.m
-
1、实验目的
利用不同的基函数分别构造Bézier曲线和B样条曲线。
2、实验内容
1) 利用数学定义构造Bézier曲线。
2) 利用de Casteljau算法构造Bézier曲线。
3) 利用MATLAB样条工具箱中的B样条构造函数spmak生成B样条曲线。
3、实验要求
1) 编写利用Bernstein多项式生成并绘制任意有限阶贝塞尔曲线的程序。
2) 编写利用de Casteljau算法生成并绘制任意有限阶贝塞尔曲线的程序。
4、思考
B样条曲线的造型灵活性比贝塞尔曲线强。可通过改变控制点重数或者基函数节点重数和距离来实现一些特殊造型。试考虑如下问题:如果希望某段三次B样条曲线成为直线,与其形状相关的4个控制点Pi、Pi+1、Pi+2、Pi+3应该满足什么条件?
-
1、自编递归方法生成伯恩斯坦(Bernstein)多项式程序:Bern.m
2、自编由伯恩斯坦(Bernstein)多项式生成并绘制任意有限阶的贝塞尔曲线程序:Bezier.m
3、自编de Casteljau算法生成并绘制任意有限阶的贝塞尔曲线程序:deCasteljau.m
4、自编利用spmak生成并绘制经过首尾两点的四阶B样条曲线的程序:Bspline.m
-
1、实验目的
了解数值微分和数值积分的基本原理,推导稳定高效的计算公式。
2、实验内容
1) 考察步长对数值微分计算结果的影响。
2) 通过插值多项式求插值节点上的数值微分。
3) 通过样条函数插值求非节点上的数值微分。
4) 比较不同阶的数值积分公式求得结果的数值精度。
5) 掌握自适应积分。
6) 掌握龙贝格积分计算。
7) 掌握高斯型数值积分公式。
3、实验要求
1) 编写变步长求数值微分的程序。
2) 编写利用插值多项式求插值节点上数值微分的程序。
3) 编写利用样条插值函数求非节点上数值微分的程序。
4) 编写复合梯形公式和复合Simpson公式求数值积分程序。
5) 编写基于Simpson公式的自适应数值积分程序。
6) 编写龙贝格递推计算程序。
7) 编写利用Gauss-Legendre公式求数值积分程序。
4、思考
牛顿-科特斯公式和高斯型求积公式分别有什么优缺点?
-
1、自编变步长求导数近似值程序:diffexp.m
2、自编三点公式求给定节点上的数值导数程序:difftripts.m
3、自编样条公式求非节点的数值导数程序:diffspline.m
4、自编复合梯形数值积分程序: contra.m
5、自编复合Simpson公式数值积分程序:consim.m
6、自编基于Simpson公式的自适应数值积分程序:adapt.m
7、自编利用Simpson公式计算单个区间上积分值的程序:srule.m
8、自编Romberg积分程序:romber.m
9、自编Gauss-Legendre积分程序:gaussleg.m
10、自编计算n阶公式的节点位置及权系数的Schwarz算法程序:Schwarz.m
-
1、实验目的
1) 掌握数值优化中的直接法,包括黄金分割搜索法、Fibonacci搜索法和抛物线搜索法的MATLAB实现;
2) 通过算例加深对数值优化算法收敛阶的理解。
-
1、自编黄金分割搜索法程序:golden.m
2、自编Fibonacci搜索法程序:fibonacci.m
3、自编Fibonacci序列生成程序:fib.m
4、自编抛物线搜索法函数程序:quadmin.m
5、绘制Rosenbrock函数的程序:FigBanana.m
6、拟牛顿法求解Rosenbrock函数最小值的程序:MinBanana.m
7、利用lsqnonlin函数求解Rosenbrock函数最小值的程序:LsqBanana.m
-
1、实验目的
1) 掌握求矩阵特征值和特征向量的幂法的MATLAB实现;
2) 通过数值算例理解幂法的各种变形在矩阵特征值计算问题中的应用。
2、实验思考
幂法的各种变形是如何求出矩阵的所有特征值和特征向量的?
-
1、自编标准幂法程序:powerm.m
2、自编降阶计算次大特征值和特征向量的幂法程序:decorder.m
3、自编位移反幂法程序:invpowerm.m
4、自编Aitken加速求主特征值的函数:aitkeneig.m
-
1、实验目的
1) 掌握常用的微分方程求解格式,如欧拉法、改进欧拉法、龙格-库塔法的MATLAB编程实现;
2) 通过数值算例了解微分方程求解格式的阶的概念;
3) 通过数值算例体验嵌入式龙格-库塔法在计算方面的优点。
2、实验思考
1) 改进欧拉法属于预报-校正格式,相比于欧拉法和隐式欧拉法,改进欧拉法有哪些优势?
2) MATLAB内置的微分方程求解器ODE45是通过何种机制来确保数值解的精度的?MATLAB内置的微分方程求解器ODE45所代表的自适应算法,算法复杂性体现在哪些方面?