应用泰勒展开式计算自然对数
2027字,阅读需时7分钟
来自专栏
课程/专栏

编程任务:编写一个程序,计算任意正实数的自然对数,要求误差不超过0.001。

知识点:

① 自然对数的泰勒展开式;

② 计算泰勒展开式前n项的和;

③ 绘制自然对数和泰勒展开式函数图像。

编程思路

应用自然对数的泰勒展开式进行计算,计算泰勒展开式前n项的和。编程的关键点是如何确定n?

自然对数函数ln(x),当x为正实数,且n趋向于无穷大时,自然对数函数的泰勒级数收敛于0。利用这个特征,在计算泰勒展开式前n项和的过程中,判断当前项的值是否小于给定的一个极小值(如1e-10),若小于该值停止计算,否则继续计算泰勒展开式的下一项。

自然对数函数的泰勒展开式

x的取值范围不同,ln(x)的泰勒展开式也不同。考虑到简单性,本程序仅计算x为正实数自然对数,其泰勒展开式为:

01.PNG

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)的泰勒展开式

 02.png

观察上图,ln(3)邻域内泰勒展开式完全拟合了ln(x)函数曲线。图中泰勒展开式取前10项,取的项数越多,拟合效果越好,函数值近似度越高。

下图泰勒展开式取前3项,在ln(3)邻域内的拟合效果就不是很好。

03.png

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')
我要评论
全部评论