计算方法上机报告姓名:学号:班级:上课班级:本次上机实验使用得编程语言就是M at lab语言,编译环境为MAT LAB 7、11、0,运行平台为W indows 7。
1. 对以下与式计算:,要求:① 若只需保留11个有效数字,该如何进行计算;ﻫ② 若要保留30个有效数字,则又将如何进行计算; (1) 算法思想1、根据精度要求估计所加得项数,可以使用后验误差估计,通项为: 142111416818485861681n n n a n n n n n ε⎛⎫=---<< ⎪+++++⎝⎭; 2、为了保证计算结果得准确性,写程序时,从后向前计算; 3、使用Matlab 时,可以使用以下函数控制位数: digits (位数)或vpa(变量,精度为数)(2)算法结构1、ﻩ; 2、ﻩfo r ifen d;3、 for(3)M atl ab 源程序clear; %清除工作空间变量c lc; %清除命令m=input('请输入有效数字得位数m='); %输入有效数字得位数s=0;for n=0:50t=(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6));if t<=10^(-m) %判断通项与精度得关系break;endend;fprintf('需要将n值加到n=%d\n',n-1); %需要将n值加到得数值for i=n-1:-1:0t=(1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6));s=s+t; %求与运算ends=vpa(s,m)%控制s得精度(4)结果与分析当保留11位有效数字时,需要将n值加到n=7,s =3、1415926536;当保留30位有效数字时,需要将n值加到n=22,s =3、149323846264338328。
通过上面得实验结果可以瞧出,通过从后往前计算,这种算法很好得保证了计算结果要求保留得准确数字位数得要求。
2.某通信公司在一次施工中,需要在水面宽度为20米得河沟底部沿直线走向铺设一条沟底光缆。
在铺设光缆之前需要对沟底得地形进行初步探测,从而估计所需光缆得长度,为工程预算提供依据。
已探测到一组等分点位置得深度数据(单位:米)如下表所示:①请用合适得曲线拟合所测数据点;②预测所需光缆长度得近似值,作出铺设河底光缆得曲线图;(1)算法思想如果使用多项式差值,则由于龙格现象,误差较大,因此,用相对较少得插值数据点作插值,可以避免大得误差,但就是如果又希望将所得数据点都用上,且所用数据点越多越好,可以采用分段插值方式,即用分段多项式代替单个多项式作插值。
分段多项式就是由一些在相互连接得区间上得不同多项式连接而成得一条连续曲线,其中三次样条插值方法就是一种具有较好“光滑性”得分段插值方法。
在本题中,假设所铺设得光缆足够柔软,在铺设过程中光缆触地走势光滑,紧贴地面,并且忽略水流对光缆得冲击。
海底光缆线得长度预测模型如下所示,光缆从A点铺至B 点,在某点处得深度为。
海底光缆线得长度预测模型计算光缆长度时,用如下公式:(2)算法结构1、ﻩFor1、12、ﻩFor2、1 For2、1、13、ﻩ4、ﻩFor4、14、24、35、6、ﻩ7、获取M得矩阵元素个数,存入m8、 For8、1 8、2 8、3 9、 10、ﻩFor10、1 11、 获取x得元素个数存入s 12、13、 For13、1 if th en ;bre akels e14、ﻩy h x h M y x h M y x M x M k k k k k k ~/]ˆ)6()6(6ˆ6[2211331⇒-+-++---(3)Matlab 源程序cle ar;c lc;x=0:1:20; %产生从0到20含21个等分点得数组 X=0:0、2:20;y =[9、01,8、96,7、96,7、97,8、02,9、05,10、13,11、18,12、26,13、28,13、32,12、61,11、29,10、22,9、15,7、90,7、95,8、86,9、81,10、80,10、93]; %等分点位置得深度数据n=length(x); %等分点得数目 N =l engt h(X);%%求三次样条插值函数s(x)M=y;for k=2:3; %计算二阶差商并存放在M 中for i=n:-1:k;M(i)=(M(i)-M(i-1))/(x(i)-x(i-k+1));endendh(1)=x(2)-x(1); %计算三对角阵系数a,b,c及右端向量dfor i=2:n-1;h(i)=x(i+1)-x(i);c(i)=h(i)/(h(i)+h(i-1));a(i)=1-c(i);b(i)=2;d(i)=6*M(i+1);endM(1)=0; %选择自然边界条件M(n)=0;b(1)=2;b(n)=2;c(1)=0;a(n)=0;d(1)=0;d(n)=0;u(1)=b(1); %对三对角阵进行LU分解y1(1)=d(1);for k=2:n;l(k)=a(k)/u(k-1);u(k)=b(k)-l(k)*c(k-1);y1(k)=d(k)-l(k)*y1(k-1);endM(n)=y1(n)/u(n); %追赶法求解样条参数M(i) for k=n-1:-1:1;M(k)=(y1(k)-c(k)*M(k+1))/u(k);ends=zeros(1,N);for m=1:N;k=1;for i=2:n-1if X(m)<=x(i);k=i-1;break;elsek=i;endendH=x(k+1)-x(k); %在各区间用三次样条插值函数计算X点处得值x1=x(k+1)-X(m);x2=X(m)-x(k); s(m)=(M(k)*(x1^3)/6+M(k+1)*(x2^3)/6+(y(k)-(M(k)*(H^2)/6))*x1+(y(k+1)-(M(k+1)*(H^2)/6))*x2)/H;end%% 计算所需光缆长度L=0; %计算所需光缆长度fori=2:NL=L+sqrt((X(i)-X(i-1))^2+(s(i)-s(i-1))^2);enddisp('所需光缆长度为L=');disp(L);figureplot(x,y,'*',X,s,'-') %绘制铺设河底光缆得曲线图xlabel('位置','fontsize',16);%标注坐标轴含义ylabel('深度/m','fontsize',16);title('铺设河底光缆得曲线图','fontsize',16);grid;(4)结果与分析铺设海底光缆得曲线图如下图所示:仿真结果表明,运用分段三次样条插值所得得拟合曲线能较准确地反映铺设光缆得走势图,计算出所需光缆得长度为L=26、4844m。
3、假定某天得气温变化记录如下表所示,试用数据拟合得方法找出这一天得气温变化得规律;试计算这一天得平均气温,并试估计误差。
时刻01112平均气温516 8时刻8 1920 21222324平均气温 324 22 20 1817 16(1)算法思想在本题中,数据点得数目较多。
当数据点得数目很多时,用“多项式插值”方法做数据近似要用较高次得多项式,这不仅给计算带来困难,更主要得缺点就是误差很大。
用“插值样条函数”做数据近似,虽然有很好得数值性质,且计算量也不大,但存放参数得量很大,且没有一个统一得数学公式来表示,也带来了一些不便。
另一方面,在有得实际问题中,用插值方法并不合适。
当数据点得数目很大时,要求通过所有数据点,可能会失去原数据所表示得规律。
如果数据点就是由测量而来得,必然带有误差,插值法要求准确通过这些不准确得数据点就是不合适得。
在这种情况下,不用插值标准而用其她近似标准更加合理。
通常情况下,就是选取使最小,这就就是最小二乘近似问题。
在本题中,采用“最小二乘法”找出这一天得气温变化得规律,使用二次函数、三次函数、四次函数以及指数型函数,计算相应得系数,估算误差,并作图比较各种函数之间得区别。
(2)算法结构本算法用正交化方法求数据得最小二乘近似。
假定数据以用来生成了,并将作为其最后一列(第列)存放。
结果在中,就是误差。
I、使用二次函数、三次函数、四次函数拟合时1、将“时刻值”存入,数据点得个数存入2、ﻩ输入拟合多项式函数得最高项次数,则拟合多项式函数为, 根据给定数据点确定ForFor2、12、23、 For3、1 [形成矩阵]3、1、13、1、23、1、3For3、1、3、13、1、43、2[变换到]3、2、1For3、2、23、2、3 For3、2、3、14、[解三角方程]4、14、2 For4、2、15、ﻩ[计算误差]II、使用指数函数拟合时现将指数函数进行变形:将,代入得:对上式左右取对数得:令则可得多项式:(3)Matlab源程序clear; %清除工作空间变量clc; %清除命令窗口命令x=0:24;%将时刻值存入数组y=[15,14,14,14,14,15,16,18,20,20,23,25,28,31,34,31,29,27,25,24,22,20,18,17,16];[~,m]=size(x); %将数据点得个数存入mT=sum(y(1:m))/m;fprintf('一天得平均气温为T=%f\n',T);%求一天得平均气温%%二次、三次、四次函数得最小二乘近似h=input('请输入拟合多项式得最高项次数=');%根据给定数据点生成矩阵G n=h+1;G=[];for j=0:(n-1)g=x、^j; %g(x)按列排列G=vertcat(G,g);%g垂直连接G endG=G'; %转置得到矩阵Gfori=1:m %将数据y作为G得最后一列(n+1列)G(i,n+1)=y(i);endG;fork=1:n %形成矩阵Q(k)ifG(k,k)>0;sgn=1;elseifG(k,k)==0;sgn=0;elsesgn=-1;endsgm=-sgn*sqrt(sum(G(k:m,k)、^2));w=zeros(1,n);w(k)=G(k,k)-sgm;for j=k+1:mw(j)=G(j,k);endbt=sgm*w(k);G(k,k)=sgm;%变换Gk-1到Gk forj=k+1:n+1t=sum(w(k:m)*G(k:m,j))/bt;fori=k:m;G(i,j)=G(i,j)+t*w(i);endendendA (n)=G(n,n+1)/G(n,n); %解三角方程求系数Afori=n-1:-1:1A (i)=(G(i,n+1)-sum(G(i,i+1:n)、*A (i+1:n)))/G(i,i);ende=sum(G(n+1:m,n+1)、^2);%计算误差efprintf('%d次函数得系数就是:',h); %输出系数a及误差e disp(A);fprintf('使用%d次函数拟合得误差就是%f:',h,e);t=0:0、05:24;A=fliplr(A); %将系数数组左右翻转Y=poly2sym(A);%将系数数组转化为多项式subs(Y,'x',t);Y=double(ans);figure(1)plot(x,y,'k*',t,Y,'r-'); %绘制拟合多项式函数图形xlabel('时刻'); %标注坐标轴含义ylabel('平均气温');title([num2str(n-1),'次函数得最小二乘曲线']);grid;%% 指数函数得最小二乘近似yy=log(y);n=3;G=[];GG=[];for j=0:(n-1)g=x、^j; %g(x)按列排列G=vertcat(G,g);%g垂直连接Ggg=t、^j; %g(x)按列排列GG=vertcat(GG,gg); %g垂直连接G endG=G'; %转置得到矩阵Gfori=1:m %将数据y作为G得最后一列(n+1列)G(i,n+1)=yy(i);endG;for k=1:n %形成矩阵Q(k) ifG(k,k)>0;sgn=1;elseifG(k,k)==0;sgn=0;else sgn=-1;endsgm=-sgn*sqrt(sum(G(k:m,k)、^2));w=zeros(1,n);w(k)=G(k,k)-sgm;forj=k+1:mw(j)=G(j,k);endbt=sgm*w(k);G(k,k)=sgm; %变换Gk-1到G kfor j=k+1:n+1t=sum(w(k:m)*G(k:m,j))/bt;fori=k:m;G(i,j)=G(i,j)+t*w(i);endendendA(n)=G(n,n+1)/G(n,n); %解三角方程求系数Afor i=n-1:-1:1A(i)=(G(i,n+1)-sum(G(i,i+1:n)、*A (i+1:n)))/G(i,i);endb=-A(3);c=A(2)/(2*b);a=exp(A(1)+b*(c^2));G(n+1:m,n+1)=exp(sum(G(n+1:m,n+1)、^2));e=sum(G(n+1:m,n+1)、^2); %计算误差efprintf('\n指数函数得系数就是:a=%f,b=%f,c=%f',a,b,c); %输出系数及误差e fprintf('\n使用指数函数拟合得误差就是:%f',e);t=0:0、05:24;YY=a、*exp(-b、*(t-c)、^2);figure(2)plot(x,y,'k*',t,YY,'r-'); %绘制拟合指数函数图形xlabel('时刻');%标注坐标轴含义ylabel('平均气温');title(['指数函数得最小二乘曲线']);grid;(4)结果与分析a、二次函数:一天得平均气温为: 21、20002次函数得系数: 8、3063 2、6064 -0、0938使用2次函数拟合得误差就是:280、339547二次函数得最小二乘曲线如下图所示:b、三次函数:一天得平均气温为: 21、20003次函数得系数: 13、3880-0、2273 0、2075 -0、0084使用3次函数拟合得误差就是:131、061822三次函数得最小二乘曲线如下图所示:ﻩc、四次函数:一天得平均气温为: 21、20004次函数得系数: 16、7939 -3、7050 0、8909-0、0532 0、0009使用4次函数拟合得误差就是:59、04118四次函数得最小二乘曲线如下图所示:d、指数函数:一天得平均气温为: 21、2000指数函数得系数就是:a=26、160286,b=0、004442,c=14、081900使用指数函数拟合得误差就是:57、034644指数函数得最小二乘曲线如下图所示:通过上述几种拟合可以发现,多项式得次数越高,计算拟合得效果越好,误差越小,说明结果越准确;同时,指数多项式拟合得次数虽然不高,但误差最小,说明结果最准确。