1 / 11
文档名称:

数值分析matlab数值试验.doc

格式:doc   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数值分析matlab数值试验.doc

上传人:xxj16588 2015/10/4 文件大小:0 KB

下载得到文件列表

数值分析matlab数值试验.doc

文档介绍

文档介绍:实验一:
1、试验程序:
function charpt1_2
% 误差传播及算法稳定性实验
clc;clear all;
promps={'请选择递推关系式,若选E1=1/e,En=1-nEn-1,请输入1,若选EN=0,En-1=(1-En)/n,请输入2:'};
I=1;
while I
result=inputdlg(promps,'charpt1_2',1,{'1'});
Nb=str2num(char(result));
if ((Nb~=1)|(Nb~=2))
I=0;
end
end
%%%%%%%%%%%%%%%%%
I=1;
while I
result=inputdlg('请输入递推步数 n>=1:','charpt1_2',1,{'10'});
steps=str2num(char(result));
if (steps>0)&(steps==fix(steps)) %% 如果steps大于0且为整数
I=0;
end
end
%%%%%%%%%%%%%%%%%
result=inputdlg('请输入计算中所采用的有效数字位数n:','charpt1_2',1,{'5'});
Sd=str2num(char(result));
format long %% 设置显示精度
result=zeros(1,steps); %% 存储计算结果
err=result; %% 存储计算的绝对误差值
func=result; %% 存储用quadl计算的近似值
%%%%%%%%%%%%%%%%%
%% 用quadl计算积分近似值
for n=1:steps
fun=@(x) x.^n.*exp(x-1);
func(n)= quadl(fun,0,1);
end
%%%%%%%%%%%%%%%%%
%% 用自定义算法计算
if(Nb==1)
digits(Sd);
result(1)=subs(vpa(1/exp(1)));
for n=2:steps
result(n)=subs(vpa(1-n*result(n-1)));
end
err=abs(result-func);
elseif(Nb==2)
digits(Sd);
result(steps)=0;
for n=(steps-1):-1:1
result(n)=subs(vpa((1-result(n+1))/(n+1)));
end
err=abs(result-func);
end
%%%%%%%%%%%%%%%%%
%% 输出结果数值及图像
clf;
disp('库函数计算值:');
disp(sprintf('%e ',func));
disp('递推值:');
disp(sprintf('%e ',result));
disp('误差值:');
disp(sprintf('%e ',err));
if(Nb==1)
plot([1:steps],result,'-rs',[1:steps],func,':k*',[1:steps],err,'-.bo');
elseif(Nb==2)
plot([steps:-1:1],result,'-rs',[steps:-1:1],func,':k*',[steps:-1:1],err,'-.bo');
end
xlabel('第n步');
ylabel('计算值');
legend('自定义算法结果','库函数计算结果','误差值');
grid on
2、试验结果:
选择递推关系式1,递推步数为10,有效数字为5位,计算结果如下:
库函数计算值:
-001 -001 -001 -001 -001 -001 -001 -001 -002 -002
递推值:
-001 -001 -001 -001 -001 -001 -001 -002 -001 -+000
误差值:
-007 -006 -006 -005 -005