(完整版)MATLAB数值分析实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2016-2017 第一学期数值分析
上机实验报告
姓名: xxx
学号: 20162…….
学院:土木工程学院
导师:………..
联系电话:…………..
指导老师:………..
目录
第一题 (1)
1.1题目要求 (1)
1.2程序编写 (1)
1.3计算结果及分析 (2)
第二题 (4)
2.1题目要求 (4)
2.2程序编写 (4)
2.3计算结果及分析 (6)
第三题 (7)
3.1题目要求 (7)
3.2程序编写 (7)
3.3计算结果及分析 (8)
第四题 (9)
4.1题目要求 (9)
4.2程序编写 (9)
4.3计算结果及分析 (10)
第五题 (11)
5.1题目要求 (11)
5.2程序编写 (12)
5.3计算结果及分析 (13)
第六题 (17)
6.1题目要求 (17)
6.2程序编写 (17)
6.3计算结果及分析 (18)
6.4程序改进 (18)
第一题
选做的是第(1)小问。

1.1题目要求
编出不动点迭代法求根的程序;把??3+4??2-10=0写成至少四种??=g(??)的形式,取初值??0=1.5,进行不动点迭代求根,并比较收敛性及收敛速度。

1.2程序编写
1.3计算结果及分析
①第一种迭代公式:??=??3+4??2+??-10;matlab计算结果如下:(以下为命令行窗口的内容)
2;matlab计算结果如下:
②第二种迭代公式:??=√(10-??3)/4
(以下为命令窗口内容)
2;matlab计算结果如下:
③第三种迭代公式:??=√10(??+4)
?
(以下为命令窗口内容)
④第四种迭代公式:??=10(??2+4??)
?;matlab计算结果如下:
(以下为命令窗口内容)
上述4种迭代公式,1、4两种由于在x真实值附近|g`(x)|>1,不满足迭代局部收敛条件,所以迭代序列不收敛。

对于2、3两种式子,由于在x真实值附近|g`(x)|<=L<1,满足迭代局部收敛条件,所以迭代序列收敛。

对于2、3两迭代公式,由于L3<L2,所以第3个迭代公式比第2个迭代公式收敛更快。

第二题
选做的是第(2)小问
2.1题目要求
编写有效程序解线性方程组A??=b。

2.2程序编写
2.3计算结果及分析
(命令行窗口显示内容)数据太多截取一部分
第三题
3.1题目要求
在区间[-1,1]上取????=-1+0.2??(??=0,1,2?,10),
对函数??(??)=1
1+25??2
(a)对函数进行多项式插值和三次样条插值,并画出插值函数及??(??)的函数;
(b)对函数求其三次拟合曲线并画出拟合曲线的图像,与(a)中结果进行比较。

3.2程序编写
3.3计算结果及分析
matlab画出的图像如下:
从上图可以清晰的看到,三次样条插值曲线与原始曲线最为接近,作为f(x)的插值函数比较理想。

而三次多项式拟合的话,与原始结果偏差很大。

第四题
选择的是第一小问
4.1题目要求
编写Gauss -Legendre 求积公式程序,并计算下列积分
(1)∫??-(????????)2????1-1
(2)∫??-(????????)2????20
(3)∫??10
|sin?(1???)|????(4)∫ln?(1+??)???1
0????4.2程序编写
4.3计算结果及分析
(a)∫??-(????????)2????
1-1(以下为命令行窗口的内容)
(b)∫??-(????????)2????
20(以下为命令行窗口的内容)
(c)∫??1
0|sin?(1???)|????(以下为命令行窗口的内容)
(d)∫log?(1+??)???1
0????(以下为命令行窗口的内容)
第五题
5.1题目要求
给定初值问题
??(??)={y`=-50y+50??2+2??,0≤x≤1
y(0)=13
????
用经典的四阶Lunge-Kutta方法求解,步长分别取为?=0.1,0.025,0.01,计算并打印??=0.1??(??=1,2,?,10)各点的值,并与准确解y(??)=1
3
??-50??+??2作比较。

5.2程序编写
5.3计算结果及分析
(以下为命令行窗口的内容)请输入步长h:0.1
从上面的结果可以看到,当步长为0.1时,求解是很不准确的,可能是步长过大导致的,所以应适当减小步长,再尝试进行计算。

下面的运算取步长为0.025,再进行试算。

(以下为命令行窗口的内容)
请输入步长h:0.025
从上面的结果可以看到,由于步长h取值减小,误差变得很小,可以看出其误差限是呈线性增加的。

(以下为命令行窗口的内容)
请输入步长h:0.01
从上面的结果可以看到,当步长取0.01时,误差减小了10多倍。

此外,我也尝试了采用更小的步长进行计算,计算所得的相对误差随步长减小也越来越小,
限于篇幅,也就不再一一罗列计算结果。

所以减小步长,可以很好地提高该算法的精确度,若我们把计算结果看成关于步长h的序列,该序列的收敛速度还比较快。

而在这一点上,我们也可以通过理论证明,当步长h趋于零时,计算结果就趋于真实结果,即收敛性。

第六题
6.1题目要求
编程计算∑1????
∞??=1,其中c =4.4942×10307,给出并观察计算结果,若有问题,分析之。

要求逐项相加编程求解,不允许使用
matlab 中的现有函数。

6.2程序编写
6.3计算结果及分析
根据我们所学的数学知识,这个关于n的求和序列实际是不收敛的,但是由于计算机计算时的大数吃掉了小数后,数值无法累加。

所以显示为上面的收敛结果。

6.4程序改进
上面的算法发生了大数吃小数的现象,为了避免大数吃小数,可以第一步设
n个数相加,然后把这些数分为两个一组,每组两个数相加,然后再分为两个一组,循环下去。

这样应该能避免大数吃小数。

相关文档
最新文档