暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

编程实践楼 2021-10-07
645

编程任务:编写一个程序,计算任意正实数的自然对数,要求误差不超过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')




      文章转载自编程实践楼,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论