返回函数值时处理复数
Handling Complex Numbers while returning function values
我正在尝试求解方程
f(x) = cos(x) - sqrt(x)
在 python
中使用 Newton-Raphson 方法
f'(x) = -sin(x) - (1/2*sqrt(x))
对于我的初步猜测,我正在尝试从 0 到 4 的值。它在 0.00001 到 2.45 的范围内工作正常
图形看起来像这样
问题是2.45以后,进入虚数(复数)。我如何处理生成复数?
import numpy as np
def eqn(x):
return np.cos(x) - np.sqrt(x)
def eqn_derivation(x):
return (-(1/(2*(np.sqrt(x)))) - (np.sin(x)))
def new-raphson(eqn,eqn_derivation,start_guess,eps):
x0=start_guess
if funDeriv(x0) != 0:
x1=x0-fun(x0)/funDeriv(x0)
while np.abs(x1-x0)>eps:
x0=x1
if funDeriv(x0) != 0:
x1=x0-fun(x0)/funDeriv(x0)
return x1
Wolfram Alpha suggests that 2nd iteration spits out complex numbers. I'm not sure how to return/generate/convert/handle function values returning complex numbers
(1) 你没有。
通常(或默认情况下),我们假设搜索 space 在真正的笛卡尔平面上。对于 x < 0,您的函数和导数未定义。因此,您需要朝该方向迈出较小的一步,或者在过程的收敛半径内搜索 x
的值。
(2) 你已经这样做了。
另一种可能性是像您一样继续搜索 4D 复数 space。您得到的答案在 space 中是相当合理的。看看你的答案:实部就是你想要的,虚部非常接近于零。
如果您需要一个证明收敛的纯实数答案,则取该实数部分并将其作为初始猜测反馈回您的算法。您将在两次迭代中收敛到经过验证的结果。
我能够使用 CMATH Library
来解决这个问题
import numpy as np
def eqn(x):
return cmath.cos(x) - cmath.sqrt(x)
def eqn_derivation(x):
return (-(1/(2*(cmath.sqrt(x)))) - (cmath.sin(x)))
def new-raphson(eqn,eqn_derivation,start_guess,eps):
x0=start_guess
if funDeriv(x0) != 0:
x1=x0-fun(x0)/funDeriv(x0)
while np.abs(x1-x0)>eps:
x0=x1
if funDeriv(x0) != 0:
x1=x0-fun(x0)/funDeriv(x0)
return x1
输出 -
(0.6417, (0.6417-5.61e-28j))
我正在尝试求解方程
f(x) = cos(x) - sqrt(x)
在 python
中使用 Newton-Raphson 方法f'(x) = -sin(x) - (1/2*sqrt(x))
对于我的初步猜测,我正在尝试从 0 到 4 的值。它在 0.00001 到 2.45 的范围内工作正常
图形看起来像这样
问题是2.45以后,进入虚数(复数)。我如何处理生成复数?
import numpy as np
def eqn(x):
return np.cos(x) - np.sqrt(x)
def eqn_derivation(x):
return (-(1/(2*(np.sqrt(x)))) - (np.sin(x)))
def new-raphson(eqn,eqn_derivation,start_guess,eps):
x0=start_guess
if funDeriv(x0) != 0:
x1=x0-fun(x0)/funDeriv(x0)
while np.abs(x1-x0)>eps:
x0=x1
if funDeriv(x0) != 0:
x1=x0-fun(x0)/funDeriv(x0)
return x1
Wolfram Alpha suggests that 2nd iteration spits out complex numbers. I'm not sure how to return/generate/convert/handle function values returning complex numbers
(1) 你没有。
通常(或默认情况下),我们假设搜索 space 在真正的笛卡尔平面上。对于 x < 0,您的函数和导数未定义。因此,您需要朝该方向迈出较小的一步,或者在过程的收敛半径内搜索 x
的值。
(2) 你已经这样做了。
另一种可能性是像您一样继续搜索 4D 复数 space。您得到的答案在 space 中是相当合理的。看看你的答案:实部就是你想要的,虚部非常接近于零。
如果您需要一个证明收敛的纯实数答案,则取该实数部分并将其作为初始猜测反馈回您的算法。您将在两次迭代中收敛到经过验证的结果。
我能够使用 CMATH Library
来解决这个问题import numpy as np
def eqn(x):
return cmath.cos(x) - cmath.sqrt(x)
def eqn_derivation(x):
return (-(1/(2*(cmath.sqrt(x)))) - (cmath.sin(x)))
def new-raphson(eqn,eqn_derivation,start_guess,eps):
x0=start_guess
if funDeriv(x0) != 0:
x1=x0-fun(x0)/funDeriv(x0)
while np.abs(x1-x0)>eps:
x0=x1
if funDeriv(x0) != 0:
x1=x0-fun(x0)/funDeriv(x0)
return x1
输出 -
(0.6417, (0.6417-5.61e-28j))