计算方法算法的数值稳定性实验报告
- 格式:doc
- 大小:59.00 KB
- 文档页数:6
专业 序号 姓名 日期
实验1 算法的数值稳定性实验
【实验目的】
1.掌握用MATLAB 语言的编程训练,初步体验算法的软件实现;
2.通过对稳定算法和不稳定算法的结果分析、比较,深入理解算法的数值稳定性及其重要性。
【实验内容】
1.计算积分 ()dx a x x I n
⎰+=1
0)
(n (n=0,1,2......,10) 其中a 为参数,分别对a=0.05及a=15按下列两种方案计算,列出其结果,并对其可靠性,说明原因。
2.方案一 用递推公式 n
aI I n 1
1n +
-=- (n=1,2,......,10) 递推初值可由积分直接得)1
(
0a
a In I += 3. 方案二 用递推公式 )1
(11-n n
I a I n +-=
(n=N,N-1,......,1) 根据估计式 ()()()11111+<<++n a I n a n 当1
n a +≥n
或
()()n
1
111≤<++n I n a
当1
n n
a 0+<
≤ 取递推初值为
()()()()
11212])1(1111[21N +++=++++≈N a a a N a N a I
当1
a +≥
N N
或
()()]1111[21N
N a I N +++=
当1
a 0+<
≤N N
计算中取N=13开始
【解】:手工分析怎样求解这题。
【计算机求解】:怎样设计程序?流程图?变量说明?能否将某算法设计成具有形式参数的函数
形式?
【程序如下】:
% myexp1_1.m --- 算法的数值稳定性实验 % 见 P11 实验课题(一) %
function try_stable global n a
N = 20; % 计算 N 个值 a =0.05;%或者a=15
% %-------------------------------------------- % % [方案I] 用递推公式 %I(k) = - a*I(k-1) + 1/k %
I0 =log((a+1)/a); % 初值
I = zeros(N,1); % 创建 N x 1 矩阵(即列向量),元素全为零 I(1) =-a*I0+1; for k = 2:N
I(k) =-a*I(k-1)+1/k; end
% %--------------------------------------------
% % [方案II] 用递推公式
%I(k-1) = ( - I(k) + 1/k ) / a
%
II = zeros(N,1);
if a >= N/(N+1)
II(N)=(2*a+1)/(2*a*(a+1)*(N+1));
else
II(N) =(1/(a+1)/(N+1)+1/N)/2;
end
for k = N:-1:2
II(k-1) =(-II(k)+1/k)/a;
end
% %--------------------------------------------
% % 调用 matlab 高精度数值积分命令 quadl 计算以便比较
III = zeros(N,1);
for k = 1:N
n = k;
III(k) = quadl(@f,0,1);
end
% %--------------------------------------------
% % 显示计算结果
clc
fprintf('\n 方案I结果方案II结果精确值') for k = 1:N,
fprintf('\nI(%2.0f) %17.7f %17.7f %17.7f',k,I(k),II(k),III(k))
end
% %--------------------------------------------
function y = f(x) % 定义函数
global n a % 参量 n 为全局变量
y =x.^n./(a+x); % ★注意:这里一定要 '点' 运算
return
% %--------------------------------------------
【运行结果如下】:
当a=0.05
方案I结果方案II结果精确值
I( 1) 0.8477739 -919648916620722180000.0000000 0.8477739
I( 2) 0.4576113 45982445831036109000.0000000 0.4576113
I( 3) 0.3104528 -2299122291551805700.0000000 0.3104528
I( 4) 0.2344774 114956114577590290.0000000 0.2344776
I( 5) 0.1882761 -5747805728879515.0000000 0.1882761
I( 6) 0.1572529 287390286443975.9400000 0.1572529
I( 7) 0.1349945 -14369514322198.6540000 0.1349945
I( 8) 0.1182503 718475716110.0577400 0.1182503
I( 9) 0.1051986 -35923785805.3917770 0.1051986