数值计算方法上机实习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值计算方法上机实习题

1. 设⎰+=1

05dx x

x I n

n , (1) 由递推公式n

I I n n 1

51+

-=-,从, 0=0.1823I 出发,计算20I ;

(2) 20=0I ,20=10000I , 用n

I I n n 51

5111+-

=--,计算0I ; (1)由I 0计算I 20

递推子程序:

function f=fib(n,i) if n>=1

f=fib(n-1,i)*(-5)+(1/(n)); elseif n==0 f=i; end

计算和显示程序:

I=0.1824; I1=0.1823; fib1=fib(20,I); fib2=fib(20,I1);

fprintf('I_0=0.1824时,I_20=%d\n',fib1); fprintf('I_0=0.1823时,I_20=%d\n',fib2);

计算结果显示:

I_0=0.1824时,I_20=7.480927e+09 I_0=0.1823时,I_20=-2.055816e+09

(2)由I 20计算I 0

程序:

n=21; i1=0; i2=10000; f1=i1; f2=i2; while n~=0;

f1=f1*(-1/5)+(1/(5*n)); f2=f2*(-1/5)+(1/(5*n)); n=n-1; end

fprintf('I_20=0 时,I_0=%4.8f\n',f1); fprintf('I_20=10000时,I_0=%4.8f\n',f2);

计算结果显示:

I_20=0 时,I_0=0.18232156 I_20=10000时,I_0=0.18232156

(3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 答:第一个算法可得出

易知第一个算法每一步计算都把误差放大了5倍,n次计算后更是放大了5n倍,可靠性低。

第二个算法可得出

可以看出第二个算法每一步计算就把误差缩小5倍,n次后缩小了5n倍,可靠性高。2.求方程0

2

10=

-

+x

e x的近似根,要求4

1

10

5-

+

<

-

k

k

x

x,并比较计算量。

(1)在[0,1]上用二分法;

(1)[0,1]上的二分法

二分法子程序:

function [root,n]=EFF3(f,x1,x2)

%第二题(1)二分法

f1=subs(f,symvar(f),x1);%函数在x=x1的值

f2=subs(f,symvar(f),x2);%x=x2

n=0;%步数

er=5*10^-4;%误差

if(f1==0)

root=x1;

return;

elseif(f2==0)

root=x2;

return;

elseif(f1*f2>0)

disp('两端点函数值乘积大于0!');

return;

else

while(abs(x1-x2)>er)%循环

x3=(x1+x2)/2;

f3=subs(f,symvar(f),x3);

n=n+1;

if(f3==0)

root=x3;

break;

elseif(f1*f3>0)

计算根与步数程序:

fplot(@(x) exp(x)+10*x-2,[0,1]);

grid on;

syms x;

f=exp(x)+10*x-2;

[root,n]=EFF3(f,0,1);

fprintf('root=%6.8f ,n=%d \n',root,n);

计算结果显示:

root=0.09057617 ,n=11

(2) 取初值00=x ,并用迭代10

21

x k e x -=+;

(3) 加速迭代的结果;

(4) 取初值00=x ,并用牛顿迭代法;

5) 分析绝对误差。

答:可以看到,在同一精度下,二分法运算了11次,题设迭代算式下运算了4次,加速迭代下运算了2次,牛顿迭代下运算了2次。因不动点迭代法和二分法都是线性收敛的,但二分法压缩系数比题设迭代方法大,收敛速度较慢。加速迭代速度是超线性收敛,牛顿法是二阶,收敛速度快。

3.钢水包使用次数多以后,钢包的容积增大,数据如下:

试从中找出使用次数和容积之间的关系,计算均方差。(用ax b

y c x

+=

+拟合)

%fval为极小值

k=2:100;

y1=(f(1).*k+f(2))./(f(3)+k);

figure1=figure('Color',[1 1 1]);

gxt=plot(x,y,'xr',k,y1,'k-');

legend('原数据','拟合曲线

','Location','northwest'); %y为数据点连接曲线,

y1为拟合曲线

title('函数y=(ax+b)/(x+c)的拟合

','FontSize',14,'FontWeight','Bold');

xlabel('次数','FontSize',14,'FontWeight','Bold');

ylabel('容积','FontSize',14,'FontWeight','Bold');

set(gxt,'LineWidth',1.5);

grid on;

%计算均方差

for i=1:15

y2(i)=(f(1).*x(i)+f(2))./(f(3)+x(i)); (接下页)

end

j=0;

for i=1:15

j=j+(y(i)-y2(i))^2;

end

jfc=sqrt(j/15);

fprintf('拟合出的方程

为:(x+%4.4f)y=%4.4fx+%4.4f \n均方差

为:%4.8f \n',f(3),f(1),f(2),jfc);

end

计算结果显示:

拟合出的方程为:(x+-0.7110)y=11.2657x+-15.5024

均方差为:0.33165089

总结:

指标选择,因题设方程为非线

性的,要转化为线性方程故需提指标为:

其驻点方程为:

相关文档
最新文档