我在试着解这个方程
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)你没有
通常(或默认情况下),我们假设搜索空间在真实的笛卡尔平面上。您的函数和导数对于x<;因此,您需要在该方向上采取较小的步骤,或者在进程的收敛半径内搜索值
x
(2)你已经做到了
另一种可能是继续你有,搜索4D复杂的空间。你得到的答案在那方面是相当合理的。看看你的答案:实部正是你想要的,虚部非常接近于零
如果你需要一个收敛性很强的纯实数答案,那么把这个实数分量作为初始猜测反馈到你的算法中。您将在两次迭代中收敛到一个经过验证的结果
我能用CMATH Library解出答案
输出-
相关问题 更多 >
编程相关推荐