编程任务:编写一个程序,计算任意正实数的自然对数,要求误差不超过0.001。
知识点:
① 自然对数的泰勒展开式;
② 计算泰勒展开式前n项的和;
③ 绘制自然对数和泰勒展开式函数图像。
编程思路
应用自然对数的泰勒展开式进行计算,计算泰勒展开式前n项的和。编程的关键点是如何确定n?
自然对数函数ln(x),当x为正实数,且n趋向于无穷大时,自然对数函数的泰勒级数收敛于0。利用这个特征,在计算泰勒展开式前n项和的过程中,判断当前项的值是否小于给定的一个极小值(如1e-10),若小于该值停止计算,否则继续计算泰勒展开式的下一项。
自然对数函数的泰勒展开式
x的取值范围不同,ln(x)的泰勒展开式也不同。考虑到简单性,本程序仅计算x为正实数自然对数,其泰勒展开式为:
Python程序源代码清单
import math
#计算泰勒展开式的最大前n项
max_n = 100000
# 计算ln(x)函数的泰勒展开式第n项的值
def taylor(n,x):
value = (1/n)*(((x-1)/(x+1))**n)
return value
# 返回ln(x)泰勒展开式当前项数
def get_n():
n=1
while True:
# 若当前项数大于max_n,计算结束
if n > max_n:
break
yield n
n=n+2
# 计算ln(x)函数
def ln(x):
sum = 0
for n in get_n():
value = taylor(n,x)
sum += value
# 若当前项的值<1e-10,计算结束
if value <= 1e-10:
break
return 2 * sum
# 程序入口
if __name__ == '__main__':
x = float(input("请输入一个正实数:\n"))
print("ln函数计算值:%.3f" % ln(x))
print("math.log函数计算值:%.3f" % math.log(x))
绘制ln(x)图像和ln(x)的泰勒展开式
观察上图,ln(3)邻域内泰勒展开式完全拟合了ln(x)函数曲线。图中泰勒展开式取前10项,取的项数越多,拟合效果越好,函数值近似度越高。
下图泰勒展开式取前3项,在ln(3)邻域内的拟合效果就不是很好。
matlab程序源代码清单
%{
绘图:
(1)绘制ln(x)在区间[1,10]内的曲线
(2)绘制ln(x)在x=3邻域内的泰勒展开式
目的:观察泰勒展开式对函数的拟合
%}
% 绘制ln(x)函数曲线
% 区间[1,10]内创建100个点
x1 = linspace(1,10,100);
% 计算f(x)=log(x)函数的y坐标
y1 = log(x1);
% 绘制ln(x)函数曲线
plot(x1,y1)
hold on
% 绘制ln(x)在x=3邻域内的泰勒展开式曲线
% 定义符号变量x,y,f
syms x y f;
% 定义自然对数函数
% ln(x)在matlab为log(x)
y = log(x);
% 应用matlab的taylor函数获取log(3)泰勒展开式前10项
f = taylor(y,x,3,'order',10);
% log(3)邻域内内创建100个点
t = linspace(2,4,100);
% 使用t替换符号变量
f1=subs(f,'x',t);
% 绘制泰勒展开式图像
plot(t,f1,'.-r')
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有