西安交通大学计算方法B上机试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.计算以下和式:0142118184858616
n
n S n n n n ∞
=⎛⎫=--- ⎪++++⎝⎭
∑
,要求: (1)若保留11个有效数字,给出计算结果,并评价计算的算法;
(2)若要保留30个有效数字,则又将如何进行计算。
(1)题目分析
该题是对无穷级数求和,因此在使用matlab 进行累加时需要一个累加的终止条件。这里令⎪⎭
⎫ ⎝⎛+-+-+-+=
681581482184161n n n n a n
n ,则()()1.016
1
6855844864816114851384128698161 681581482184161148113811282984161111<<
⎪
⎪⎭⎫ ⎝⎛⎪⎭⎫ ⎝⎛++++++⎪⎪⎭⎫ ⎝⎛⎪⎭⎫ ⎝⎛++++++=⎪⎭⎫
⎝⎛⎪⎭⎫ ⎝⎛+-+-+-+⎪⎭⎫ ⎝⎛⎪⎭⎫ ⎝⎛+-+-+-+=+++n n n n n n n n n n n n n n n n a a n n n n n n 故近似取其误差为1
+≈k a ε,并且有
m
-1m -11102
121
⨯=⨯=≈+βεk a ,
(2)算法依据
使用matlab 编程时用digits 函数和vpa 函数来控制位数。 (3)Matlab 运行程序
%%保留11位有效数字 k1=11;
s1=0;%用于存储这一步计算值 for n=0:50
a=(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6)); n1=n-1;
if a<=0.5*10^(1-k1) break end end;
for i=0:1:n1
t=(1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6)); s1=s1+t; end
s11=vpa(s1,k1);
disp('保留11位有效数字的结果为:');disp(s11); disp('此时n 值为:');disp(n1);
%%保留30位有效数字 clear all; k2=30;
digits(k2+2);
s2=vpa(0);%用于存储这一步计算值
for n=0:50
a=vpa((1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6)));
n2=n-1;
if a<=0.5*10^(1-k2)
break
end
end;
for i=0:1:n2
t=vpa((1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6)));
s2=vpa(s2+t);
end
s30=vpa(s2,k2);
disp('保留30位有效数字的结果为:');disp(s30);
disp('此时n值为:');disp(n2);
2.某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。已探测
(1)
(2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图;(2)算法选择
由于多项式插值只适用于数据点较少的插值案例,此时可以避免产生较大的误差;当数据点过多时,多项式插值中的龙格现象会使误差变大。因此当所用数据点过多时,我们采用分段插值方式,即用分段多项式代替单个多项式作插值。分段多项式是由一些在相互连接的区间上的不同多项式连接而成的一条连续曲线,其中三次样条插值方法是一种具有较好“光滑性”的分段插值方法。
(3)matlab算法
clear all;
x=0:1: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);%取样点数目
M=y;
for k=2:3;%计算二阶差商
for i=n:-1:k;
M(i)=(M(i)-M(i-1))/(x(i)-x(i-k+1));
end
end
h(1)=x(2)-x(1);
for 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);
end
M(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);
end
M(n)=y1(n)/u(n); %追赶法求解样条参数M(i)
for k=n-1:-1:1;
M(k)=(y1(k)-c(k)*M(k+1))/u(k);
end
x1=1:0.1:20; %确定取值点
n1=length(x1); %确定取值点个数
s=zeros(1,n1);