导数与newton-raphson

我制作了一个用于查找导数的代码,现在我试图使用它来帮助我使用牛顿拉夫森方法的代码:

选择 | 换行 | 行号
  1. def derivative (f,x,h):
  2.     import math
  3.     return float(1/(2*h)) * (f(x+h) - f(x-h))
  4.  
  5. def solve (f,x0,h):
  6.     delta= f(x(n))/fp(x(n)
  7.         for x(n+1) in solve():
  8.             x(n)-delta

第一个DEF工作正常,但我无法让第二个DEF上班,任何人都可以看到我在做什么错吗?

# 回答1


在函数solve()中,您已经传递了参数'f','x0'和'h'。 " x"," fp"和" n"定义在哪里?您正在递归调用函数" solve()",但您没有传递任何参数。 " solve()"需要三个论点。 a" for"循环的格式是:

选择 | 换行 | 行号
  1. for item in iterable:
  2.     ......code......

"项目"不能是表达式。

选择 | 换行 | 行号
  1. >>> for x+1 in range(10):
  2. ...     print x
  3. Traceback (SyntaxError: can't assign to operator
  4. >>> 
# 回答2


我应该如何修复它?求解中的FP是FISRT函数。 u使用第一个函数在第一个函数中获取F的导数。你知道我如何解决这个问题吗?
# 回答3


我不熟悉您正在尝试的计算。我知道,如果" fp()"在" solve()"中或在您的模块上全球范围内定义,则它将不起作用。
# 回答4


在模块中全球?
# 回答5


假设您的代码位于名为function.py的文件中。

选择 | 换行 | 行号
  1. # code.py
  2. def fp():
  3.     ....code....
  4.  
  5. def derivative (f,x,h):
  6.     import math
  7.     return float(1/(2*h)) * (f(x+h) - f(x-h))
  8.  
  9. def solve (f,x0,h):
  10.     delta= f(x(n))/fp(x(n)
  11.         for x(n+1) in solve():
  12.             x(n)-delta
  13.  
  14. if __name__ == __main__:
  15.     ....call your functions...

函数'fp()'是全局到模块'函数'。

# 回答6


好的。是否有一种更简单的方法来编写Python中的Newton Raphsons方法?香港专业教育学院(Ive)研究了这里的论坛上的讨论,还没有发现任何可以帮助Mefurther的东西。您对如何编写该方法有任何线索吗?
# 回答7


Newton Raphson方法使用迭代过程来近似函数的根。这就是我对这个主题的了解,我必须查找。
# 回答8


这是我想到的:
导入数学

选择 | 换行 | 行号
  1. def derivative (f, x, h):
  2.     return float((f(x + h) - f(x))) / h
  3.  
  4. def solve(f, x0, h, depth):
  5.     if depth > 0:
  6.         delta = f(x0) / derivative(f, x0, h)
  7.         return solve(f, x0 - delta, h, depth - 1)
  8.     else:
  9.         return x0

我将您的功能中的公式更改为更熟悉的功能,并且我不得不添加参数"深度"才能告诉求解功能何时停止。这是必要的,因为在使用Newton-Raphson方法时,您必须选择使用多少次。
要使用求解功能,您可以做这样的事情:

选择 | 换行 | 行号
  1. def function(x):
  2.     return math.cos(x) - x**3
  3.  
  4. solve(function, 0.5, 0.001, 6)

或者:

选择 | 换行 | 行号
  1. function = lambda x: math.cos(x) - x**3
  2. solve(function, 0.5, 0.001, 6)

在该示例中,无论哪种方式,您都通过使用牛顿 - 拉夫森方法6次使用" 0.5"的牛顿 - 拉夫森方法来近似" cos(3) - x ** 3"。 " 0.001"是用于近似您的导数的" H"值。衍生物的准确性越低。

# 回答9


那是很棒的Kaezarrex-解决一个有趣的问题的很好解决方案。
BV
# 回答10


你好!
(牛顿 - 拉夫森法)
谁能描述该代码如何工作?
什么是深度,如何解决工作?
该函数导数仅给我们一个函数的导数:
例如:

选择 | 换行 | 行号
  1. >>> derivative(math.sin, math.pi, 0.0001)
  2. -0.9999999983354435
  3.  

但是如何解决工作?
求解使用衍生功能。

选择 | 换行 | 行号
  1. def derivative (f, x, h):
  2.     return float((f(x + h) - f(x))) / h
  3.  
  4. def solve(f, x0, h, depth):
  5.     if depth > 0:
  6.         delta = f(x0) / derivative(f, x0, h)
  7.         return solve(f, x0 - delta, h, depth - 1)
  8.     else:
  9.         return x0
  10.  

标签: python

添加新评论