如何在python3.5中不使用数学模型计算taylor级数和Lewis-Carrol除数检验

2024-09-28 23:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

就像标题所说的,我需要找到泰勒级数以及编写除数测试程序,而不使用Python3.5中的数学模块。我会在一张纸上做数学,但实际上我在学校里从来没有教过这两样东西,所以老实说,我完全不知道怎么在纸上做。我已经完成了相当多的工作,但我需要一些帮助来完成它。我有一个朋友教我编程时使用的算法,所以我现在对这个有了一点了解。请看我遇到的主要编程问题的长注释。在

对于泰勒级数:在计算e^x/sinx/cosx的值时,您的程序应该继续添加幂级数的项,直到它达到一个绝对值小于10^-15乘以先前项和的绝对值的项。在

公式:

e^x = 1 + x + x^2/2! + x^3/3! + ...

cos x = 1- x^2/2! + x^4/4! - x6^/6! …

sin x = sin x = x- x^3/3! + x^5/5! - x^7/7!...

如果n是正整数: n!=n x(n-1)x(n-2)x…x 3 x 2 x 1

对于Lewis-Carrol可分性检验:

  • 只要数字有一个以上的数字,就可以通过删除单位数字并从结果数字中减去这个数字来缩短它。

  • 当且仅当最终数等于零时,原始数可被11整除

代码:

 #I don't know why, but for some reason n is automatically set to 5 once it is called in the recursion function for sin and cos x.
 #This causes the answers to for sin and cos x to be drastically incorrect.

 x = float(input("Please input a real number: "))
 def factorial(n):
      res = 1
      for i in range(1, n+1):
           res *= i
      return res

 def question1():
      ex = 1 + x
      for n in range(2,15):
          ex += (x**n)/factorial(n)
      print("e^{} = {}".format(x, ex))
 question1()

 def question2(): 
      cosx = 0
      for n in range(0, 15):
           cosx += ((-1)**n)/factorial(2*n)*(x**(2*n+1))
      print("cos {} = {}".format(x, cosx))
 question2()

 def question3():
      sinx = 0
      for n in range(0, 15):
           sinx += ((-1)**n)/factorial(2*n+1)*(x**(2*n+1)) 
      print("Sin {} = {}".format(x, sinx))
 question3()

 ##def question4():
 ##     while x > 9:
 ##          unit = x % 10
 ##          new_x = x // 10
 ##          print(new_x)
 ##          if new_x == 0:
 ##               break
 ##question4()

样本输出:

^{pr2}$

Tags: toinformatnewfordefrangeres
1条回答
网友
1楼 · 发布于 2024-09-28 23:29:16

question3()函数中的for循环中的计算有许多错误。在

  • (-1**n)中,**的优先级高于-。正确的表达式是((-1)**n)
  • 在除数中,(x*(2*n)+1)使用乘法而不是求幂。应该是:x**(...,而不是x*(...。在
  • 在除数中,*(修正为**)的优先级高于+1。应该是:(x**(2*n+1))。在
  • n -= 1没有效果,因为n在循环的下一次迭代的顶部立即反弹到一个新值。在
  • 循环迭代器应该从0开始,而不是2。在

旧版:

 for n in range(2, 15): #n is defined as 2 here
     sinx += (-1**n)/factorial((2*n+1))*(x*(2*n)+1)
     n -= 1

更好:

^{pr2}$

你还是有逻辑错误。赋值要求在单个项小于前面总和的10**-15倍时终止循环。你根本没有实现。在

question2()包含以下错误:

  • -1**n应该是(-1)**n
  • 你的除数中有一个无关的+1。在
  • 循环中有一个无意义的n -= 1。在

试试这个:

def question2():
     cosx = 0
     for n in range(0, 15):
          cosx += ((-1)**n)/factorial((2*n))*(x**(2*n))
     print(cosx)

相关问题 更多 >