编程任务:编写一个程序,计算任意正实数的自然对数,要求误差不超过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=1while True:# 若当前项数大于max_n,计算结束if n > max_n:breakyield nn=n+2# 计算ln(x)函数def ln(x):sum = 0for n in get_n():value = taylor(n,x)sum += value# 若当前项的值<1e-10,计算结束if value <= 1e-10:breakreturn 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,fsyms 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')
文章转载自编程实践楼,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




