实验八:近似计算
练习三
1. 按要求完成下面的任务:
(1)求出函数 处的泰勒展开式,由此计算无理数e的近似值;
clc;clear;
f=@(x)exp(-x^2);
syms x
y=f(x);
y1=matlabFunction(taylor(y,'order',20));
1/y1(1)
ans =2.718283693893450
(2)在精确位数相同的情况下,同函数f(x)= 在x= 处的泰勒展开式比较,哪一个展开式计算无理数e需要选取的项数较多?
clc;clear;
f=@(x)exp(x);
syms x
y=f(x);
for i=2:20%这里不能从1开始,因为泰勒展开一项是一个常数,在下边的fix一行会出错;
y1=matlabFunction(taylor(y,'order',i));
if fix(y1(1)*10^5)==271828ireturn;
end
end
i=10;e= 2.718281828459045;
经过比较易知,(1)的泰勒展开需要的项数较多。
2. 自己选取 ≠0,求出函数f(x)= 在x= 处的泰勒展开式,并利用此展开式计算无理数e的近似值,在相同精度的要求下,同前题比较,哪一种更优?
clc;clear;
f=@(x)exp(x);
syms x
y=f(x);
for i=2:20y1=matlabFunction(taylor(y,x,1,'order',i));if fix(y1(1)*10^5)==271828ireturn;end
end
i=2;
由此可见,当在非零处泰勒展开后,收缩速度更快,方法更优。
3. 编写程序完成无理数e的数值模拟实验.
clc;clear;
n=100;%这里可以更改n的次数
sum=0;sum1=0;
for k=1:10000
for i=1:n
x1=fix(rand(1)*n);
x2=fix(rand(1)*n);
if x1==x2
sum=sum+1;
end
end
if sum>0sum1=sum1+1;
end
sum=0;
end
(1-sum1/k)^-1
ans =
2.718868950516585(随机的,每次运行结果不一样)
本文由作者自创,由于时间原因,难免出现些许错误,还请大家多多指正。创作不易,请大家多多支持。