没有合适的资源?快使用搜索试试~ 我知道了~
数值分析上机作业代码及报告
需积分: 3 60 下载量 99 浏览量
2022-06-14
22:30:02
上传
评论 23
收藏 691KB PDF 举报
温馨提示
试读
23页
数值分析上机作业代码及报告
资源详情
资源评论
资源推荐
数值分析上机实验报告
零. 目录
一.舍入误差与有效数;
二.Newton 迭代法;
三.列主元 Guass 消去法
四.逐次超松弛迭代法
五.3 次样条插值函数
六.重积分的计算
七.常微分方程初值问题数值解
一. 舍入误差与有效数。
1.1 题目
设 ,其精确值为 。
(1)编制按从大到小的顺序 ,计算 的通用程序;
(2)编制按从小到大的顺序 ,计算 的通用程序;
(3)按两种顺序分别计算 , , ,并指出有效位数(编制程序时用单精度);
(4)通过本上机题你明白了什么?
1.2 代码及输出结果
%矩阵 A 存放计算结果,便于比较.
format long
A=[ S(10^2) S(10^4) S(10^6) %精确计算
S1(10^2) S1(10^4) S1(10^6); %从大到小
S2(10^2) S2(10^4) S2(10^6) %从小到大
];
%输出计算结果
disp(A);
0.7400495 0.7499000 0.7499990
0.7400495 0.7498521 0.7498521
0.7400495 0.7499000 0.7499990
function S = S(n) %计算近似精确值
S = single((3/2-1/n-1/(n+1))/2);
end
1
function S = S1(n) %从大到小计算
S=single(0);
for i = 2:n
S = S + 1/(i^2-1);
end
end
function S = S2(n) %从小到大计算
S=single(0);
for i = n:-1:2
S = S + 1/(i^2-1);
end
end
1.3 结果分析与解答
以函数 S 计算的结果作为精确值,列出 S1(从大到小计算),S2(从小到大计算)计算结果的有效位数表:
由表看出,从小到大计算得出的结果有效数字位数多于从大到小计算的。原因是:从大到小计算过程中容易出现
“大数吃小数”的现象,从而使得最终结果有效数字位数偏少。通过本上机题,我在实践中体会到了“大数吃小数”带
来的运算的误差,今后在用计算机计算一列数字相加时,尽量将这列数字先按从小到大排序再进行计算!
2
二. Newton 迭代法
2.1 题目
(1)给定初值 及容许误差 ,编制 Newton 法解方程 根的通用程序。
(2)给定方程 ,易知其有三个根 。
①由 Newton 方法的局部收敛性可知存在 ,当 时 Newton 迭代序列收敛于根 ,试确定尽可能大
的 ;
②试取若干初始值,观察当
时 Newton 迭代序列是否收敛以及收敛于
哪一个根。
(3)通过本上机题,你明白了什么?
2.2 通用程序
2.2.1 Newton 迭代法
文件: NewtonIterate.m
function NewtonIterate(x_0)
%迭代格式中的函数 g(x)
g = @(x)x - (x^3/3 - x)/(x^2 - 1);
%设置最大迭代次数 N
N = 50;
%设置精度
eps = 1e-5;
%设置迭代初值
x0 = x_0;
%初始化循环控制变量
eror = 1;
n = 0;
while eror>eps && n < N
x = g(x0);
eror = abs(x-x0);
x0 = x;
n = n+1;
fprintf('%f,%f',n,x)
end
disp(['Times: ',num2str(n)]) %迭代总次数
disp(['Result: ',num2str(x)]); %近似根
disp(['Eror= ',num2str(eror)]); %误差
end
2.2.2 寻找
问题分析: 是奇函数,故可以只在 上搜寻,又因为 在 无零点,
在 定号,所以确定搜索区间为 。
1
文件: Search.m
%迭代格式中的函数 g(x)
g = @(x)x - (x^3/3 - x)/(x^2 - 1);
iters = 20; %最大迭代次数
eps = 1e-5; %最小精度
step = 10^-5; %搜寻步长
for i = 0:step:1 %以 step 为步长在(0,1)搜寻
x0 = i; %迭代初值
iter = 1;eror = 1; %初始化循环控制变量
%牛顿迭代开始
while eror>eps&&iter<iters
x = g(x0);
eror = abs(x-x0);
x0 = x;
iter = iter+1;
end
%牛顿迭代结束
if iter == iters
delta = i-step; %取得满足条件的最大的 delta
break; %达到最大迭代次数仍未满足精度要求则退出 for 循环
end
end
disp(['搜寻结果:delta=',num2str(delta)]);
2.3 程序运行结果、分析与解答
2.3.1(2)①
运行 Search.m
Search
搜寻结果:delta=0.77461
所以在 上 Newton 迭代序列收敛于
2.3.2(2)②
(1) ,取 。
NewtonIterate(-1000);
1,-666.667333
2,-444.445889
3,-296.298759
4,-197.534756
5,-131.693212
6,-87.800538
7,-58.541286
8,-39.038915
9,-26.043032
10,-17.387658
11,-11.630240
12,-7.811242
13,-5.294264
2
14,-3.660091
15,-2.636899
16,-2.053223
17,-1.794478
18,-1.735164
19,-1.732059
20,-1.732051
Times: 20
Result: -1.7321
Eror= 8.3598e-06
NewtonIterate(-100);
1,-66.673334
2,-44.458891
3,-29.654263
4,-19.792016
5,-13.228447
6,-8.869651
7,-5.989231
8,-4.107324
9,-2.910755
10,-2.200189
11,-1.848687
12,-1.742235
13,-1.732139
14,-1.732051
15,-1.732051
Times: 15
Result: -1.7321
Eror= 6.7974e-09
NewtonIterate(-10);
1,-6.734007
2,-4.590570
3,-3.212840
4,-2.371653
5,-1.922981
6,-1.757175
7,-1.732580
8,-1.732051
9,-1.732051
Times: 9
Result: -1.7321
Eror= 2.4196e-07
由此可见在
,迭代序列收敛,收敛于-1.7321。
(2) ,取 。
NewtonIterate(-0.9);
1,2.557895
2,2.012915
3,1.781662
4,1.734049
5,1.732054
6,1.732051
Times: 6
3
剩余22页未读,继续阅读
FlowStar829
- 粉丝: 34
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0