数值分析实验报告第一题实验题1.21、实验内容实验1.2体会稳定性在选择算法中的地位,误差扩张的算法不稳定,而误差衰竭的算法是稳定的。分别采用E.1.6(即E.1.4)𝐸1=1𝑒,𝐸𝑛=1−𝑛𝐸𝑛−1,𝑛=2,3…和算法算法E.1.7(即E.1.5)𝐸𝑛−1=1−𝐸𝑛𝑛,𝑛=𝑁−1,𝑁−2…,3,2两种算法。2、源程序%functiont_charpt1%数值试验1.2:误差传播与算法稳定性%输入:递推公式选择与递推步数%输出:各步递推值及误差结果,以及递推值和误差与递推步数的关系图clear;clc;promps={'请选择递推关系式,若选(1.4),请输人1,否则输入2:'};result=inputdlg(promps,'charpt1_2',1,{'1'});Nb=str2num(char(result));if((Nb~=1)&(Nb~=2))errordlg('请选择递推关系式,若选(1.4),请输人1,否则输人2!');return;endresult=inputdlg({'请输人递推步数n:'},'charpt1_2',1,{'10'});steps=str2num(char(result));if(steps1)errordlg('递推步数错误!');return;endresult=inputdlg({'请输入计算中所采用的有效数字位数:'},'charpt1_2',1,{'5'});Sd=str2num(char(result));formatlong%设置显示精度result=zeros(1,steps);%存储计算结果err=result;%存储计算的绝对误差func=result;%存储用库函数quadl计算出的积分的近似值%用库函数quadl计算积分的近似值forn=1:stepsfun=@(x)x.^n.*exp(x-1);func(n)=quadl(fun,0,1);endif(Nb==1)%用算法(1.4)计算digits(Sd);%控制有效数字位数result(1)=subs(vpa(1/exp(1)));forn=2:1:stepsresult(n)=subs(vpa(1-n*result(n-1)));enderr=abs(result-func);elseif(Nb==2)%用算法(1.5)计算digits(Sd);%控制有效数字位数result(steps)=0;forn=steps:-1:2result(n-1)=subs(vpa((1-result(n))/n));enderr=abs(result-func);endclf;%清除当前图像窗口disp('递推值:');disp(sprintf('%e',result));disp('误差:');disp(sprintf('%e',err));plot([1:steps],result,'-','LineWidth',2);set(gca,'linewidth',0.5,'fontsize',16);gridonholdon;plot([1:steps],err,'r--','LineWidth',2);xlabel('stepsn','FontSize',18);ylabel('En-andERRn--','FontSize',18);legend('En','err(n)');title(['Algorithm(1.',num2str(Nb+3),')SignificantDigits',num2str(Sd)],'FontSize',18);%text(2,err(2),'\uparrowerr(n)');%text(4,result(4),'\downarrowEn');3、实验结果(1)算法E1.6,有效数字5位递推值:3.678800e-012.642400e-012.072800e-011.708800e-011.456000e-011.264000e-011.152000e-017.840000e-022.944000e-01-1.944000e+00误差:5.588280e-071.117662e-063.352927e-061.341222e-056.705713e-054.023702e-042.816427e-032.253226e-022.027877e-012.02(2)算法E1.6,有效数字6位递推值:3.678790e-012.642420e-012.072740e-011.709040e-011.454800e-011.271200e-011.101600e-011.187200e-01-6.848000e-021.684800e+00误差:4.411720e-078.823378e-072.647073e-061.058778e-055.294287e-053.176298e-042.223573e-031.778774e-021.600923e-011.60(3)算法E1.6,有效数字7位递推值:3.678794e-012.642412e-012.072764e-011.708944e-011.455280e-011.268320e-011.121760e-011.025920e-017.667200e-022.332800e-01误差:4.117197e-088.233779e-082.470726e-079.877761e-074.942873e-062.962984e-052.075730e-041.659738e-031.494029e-021.49(4)算法E1.7,有效数字5位递推值:3.678800e-012.642400e-012.072800e-011.708900e-011.455300e-011.267900e-011.125000e-011.000000e-011.000000e-010.000000e+00误差:5.588280e-071.117662e-063.352927e-063.412224e-062.942873e-061.237016e-051.164270e-049.322618e-048.387707e-038.38(5)算法E1.7,有效数字6位递推值:3.678800e-012.642410e-012.072770e-011.708930e-011.455360e-011.267860e-011.125000e-011.000000e-011.000000e-010.000000e+00误差:5.588280e-071.176622e-073.529274e-074.122239e-073.057127e-061.637016e-051.164270e-049.322618e-048.387707e-038.38(6)算法E1.7,有效数字7位递推值:3.678795e-012.642411e-012.072768e-011.708929e-011.455357e-011.267857e-011.125000e-011.000000e-011.000000e-010.000000e+00误差:5.882803e-081.766221e-081.529274e-075.122239e-072.757127e-061.667016e-051.164270e-049.322618e-048.387707e-038.384、结果分析采用算法E1.7(即算法E1.5)能得到更精确的结果,当然,有效数字越多,结果越准确。当采用算法E.1.6(即算法E.1.4)时:设𝐸𝑛的真实值为𝐸𝑛∗,则真实值𝐸𝑛∗=1−𝑛𝐸𝑛−1∗(1)又有𝐸𝑛=1−𝑛𝐸𝑛−1(2)(1)−(2)得:𝐸𝑛∗−𝐸𝑛=−𝑛(𝐸𝑛−1∗−𝐸𝑛−1)(3)对(3)式两边取绝对值得𝑒𝑛=𝑛𝑒𝑛−1(4)由(4)可计算得𝑒𝑛=𝑛!𝑒1(5)当采用算法E.1.7(即算法E.1.5)时:同理:设𝐸𝑛的真实值为𝐸𝑛∗,则真实值𝐸𝑛−1∗=1−𝐸𝑛∗𝑛(6)又有𝐸𝑛−1=1−𝐸𝑛𝑛(7)(6)−(7)得:𝐸𝑛−1∗−𝐸𝑛−1=−(𝐸𝑛∗−𝐸𝑛)𝑛(8)对(8)式两边取绝对值得𝜀𝑛=1𝑛𝜀𝑛−1(9)由(9)可计算得𝜀𝑛=1𝑛1𝑛+1⋯1𝑁−11𝑁𝜀𝑁(10)算法E.1.6(即算法E.1.4)的𝑒1很小,当n增大时,𝑒𝑛增长速度很快,而算法E.1.7(即算法E.1.5)中的𝜀𝑁虽然比较大,但是当n减小时,𝜀𝑛呈现递减趋势。所以比较两个算法,当某一步产生误差后,算法E.1.6(即算法E.1.4)对后面的影响是扩张的,而算法E.1.7(即算法E.1.5)对后面的影响是衰减的。通过理论分析与计算实验,算法E1.7(即算法E1.5)更加稳定。第二题实验题3.11、实验内容实验3.1编制以函数n0kk}{x为基的多项式最小二乘拟合程序2、源程序functioncharpt3formatlong;%数值实验三:含实验3.1和实验3.2%子函数调用:dlsa%输入:实验选择%输出:原函数及求得的相应插值多项式的函数的图像以及参数alph和误差rresult=inputdlg({'请选择实验,若选3.1,请输入1,否则输入2:'},'charpt_3',1,{'1'});Nb=str2num(char(result));if(Nb~=1)&(Nb~=2)errordlg('实验选择错误!');return;endx0=-1:0.5:2;y0=[-4.447-0.4520.5510.048-0.4470.5494.552];n=3;%n为拟合阶次if(Nb==1)alph=polyfit(x0,y0,n);y=polyval(alph,x0);r=(y0-y)*(y0-y)';%平方误差x=-1:0.01:2;y=polyval(alph,x);plot(x,y,'k--');xlabel('x');ylabel('y');holdon;plot(x0,y0,'*');title('离散数据的多项式拟合');gridon;elseresult=inputdlg({'请输入权向量w:'},'charpt_3',1,{'[1111111]'});w=str2num(char(result));[a,b,c,alph,r]=dlsa(x0,y0,w,n);enddisp(['平方误差:',sprintf('%g',r)]);disp(['参数alph:',sprintf('%g\t',alph)])%-------------------------------------------------------------------------function[a,b,c,alph,r]=dlsa(x,y,w,n)%功能:用正交化方法对离散数据作多项式最小二乘拟合。%输入:m+1个离散点(x,y,w),x,y,w分别用行向量给出。%拟合多项式的次数n,0nm.%输出:三项递推公式的参数a,b,拟合多项式s(x)的系数c和alph,%平方误差r=(y-s,y-s),并作离散点列和拟合曲线的图形m=length(x)-1;if(n1|n=m)errordlg('错误:n1或者n=m!');return;end%求三项递推公式的参数a,b,拟合多项式s(x)的系数c,其中d(k)=(y,sk);s1=0;s2=ones(1,m+1);v2=sum(w);d(1)=y*w';c(1)=d(1)/v2;fork=1:nxs=x.*s2.^2*w';a(k)=xs/v2;if(k==1)b(k)=0;elseb(k)=v2/v1;ends3=(x-a(k)).*s2-b(k)*s1;v3=s3.^2*w';d(k+1)=y.*s3*