- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算方法上机实践一二四
计算方法上机课实验报告
第一次实验
一 实验目的:
验证和比较各种递推公式的稳定性,从而加深对算法的数值稳定性的认识。
二 实验课题:递推计算的稳定性
三 采用的具体算法
实验一:
% 求ax2+bx+c=0的根,其中a=1, b=-(5×10^8),c=5×10^8。
a=1;
b=-(5*10^8+1);
c=5*10^8;
x1=(-b+sqrt (b^2-4*a*c))/(2*a)
x2=(-b-sqrt (b^2-4*a*c))/(2*a)
X1=-(b-sqrt(b^2-4*a*c))/(2*a)
X2=c/(a*X1)
实验二:
function try_stable
global n a
N = 20; % 计算 N 个值
a =0.05;
%--------------------------------------------
% [方案I] 用递推公式
% I (k) = - a*I (k-1) + 1/k
I0 = log ((a+1)/a); % 初值
I = zeros (N,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) = 0.5*(1/((a+1)*(N+1))+1/(a*(N+1)));
else
II (N) = 0.5*(1/((a+1)*(N+1))+1/N);
end
for k = N:-1:2
II (k-1) = ( - I(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 (\n I (%2 .0f) %17 .7f %17 .7f %17 .7f,k,I (k),II (k),III (k))
end
%% 把下面的这段保存为f.m
function y = f (x) % 定义函数
global n a % 参量 n 为全局变量
y =x.^n./(a+x); % 注意:这里一定要 点 运算
return
实验结果:
实验一:
x1=500000000 x2=0
X1=500000000 X2=1
实验二:
a=0.05
方案I结果 方案II结果 精确值
I ( 1) 0.8477739 0.8477739 0.8477739
I ( 2) 0.4576113 0.4576113 0.4576113
I ( 3) 0.3104528 0.3104528 0.3104528
I ( 4) 0.2344774 0.2344774 0.2344776
I ( 5) 0.1882761 0.1882761 0.1882761
I ( 6) 0.1572529 0.1572529 0.1572529
I ( 7) 0.1349945
文档评论(0)