前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序与数学:应用泰勒展开式计算自然对数

程序与数学:应用泰勒展开式计算自然对数

原创
作者头像
郎宏林
修改2021-10-11 18:03:50
2.3K0
修改2021-10-11 18:03:50
举报
文章被收录于专栏:程序与数学

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

知识点:

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

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

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

编程思路

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

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

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

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

01.PNG
01.PNG

Python程序源代码清单

代码语言:javascript
复制
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
02.png

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

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

03.png
03.png

matlab程序源代码清单

代码语言:javascript
复制
%{
绘图:
(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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档