使用fsolve(python)的迭代过程查找N个根



我想知道如何在一段时间内使用fsolve实现迭代根查找器,直到它找到N个根?(假设我知道在手术过程中获得每个根的步骤应该有多小(有没有一种方法可以通过一个简单的double-for-loop来做到这一点?

以下是";简单的";函数(cos(x(*x(:

import numpy as np
from scipy.optimize import fsolve
import numpy as np

def f(x):
return np.cos(x)*x
for n in range(1,10) :
a = 0
k = 0
while k < 1000 :
k = fsolve(f,a)
if k == a :
a = a+0.01
k = fsolve(f,a)
else : 
print(k)

但我不能这样做。我不能用支票,因为我的真实函数更复杂(涉及贝塞尔函数(,而chepby没有似乎接受这样的功能作为论据。

编辑:修正了缩进,这个程序产生0(第一个解决方案(无限次不停止。

你能分享你的错误吗?可能与f(x(函数的缩进有关,请尝试将代码更改为:

def f(x):
return np.cos(x)*x

我找到了一个解决方案,可以完成目前的工作。它包括传递一个与搜索间隔相对应的数组,然后排序解决方案(在我的情况下,只查看正解,删除重复项等(

这可能不是最好的方法,但它对我有效:

在这个例子中,我正在寻找cos(x(*x=0的10个第一正解假设它们在[0100]中。

import numpy as np
from scipy.optimize import fsolve

def f(x):
return np.cos(x)*x
int = np.arange(0,100,1)
arr = np.array([int])
roots=fsolve(f,arr)
# print(roots)

roots=np.around(roots, decimals=5, out=None)       
a = roots[roots >= 0]
b = np.unique(a)
b=(b[:10])
print(b)
Result : 
[ 0.       1.5708   4.71239  7.85398 10.99557 14.13717 17.27876 20.42035
23.56194 26.70354]

我必须使用np.around,否则np.unique将不起作用。再次感谢。

最新更新