在 Python 中找到函数 x = a*sin(x) 的所有根
Finding all the roots of the function x = a*sin(x) in Python
我必须根据参数 a 找到解决方案的数量。在使用 scipy.optimize.root 数值求解方程时,我得到一些不是函数根的数字。例如对于
x = 7*sin(x) 我得到数字 -7.71046524 和 7.71046524。我的代码是:
a = np.linspace(-5, 5)
def fun(x):
return x - b*np.sin(x)
for i in a:
solutions = []
b = i
c = abs(int(round(i)))
for j in range(-c, c+1):
y = root(fun, j)
if (round(y.x[0], 3) not in solutions):
solutions.append(round(y.x[0], 3))
print(len(solutions))
如果使用 scipy.optimize.root
,return 值包含 x
解数组 和 success
布尔标志。您需要过滤掉 success
为 False
.
的所有结果
import numpy as np
from scipy.optimize import root
a = np.linspace(-7, 7)
def fun(x):
return x - b*np.sin(x)
for i in a:
solutions = []
b = i
c = abs(int(round(i)))
for j in range(-c, c+1):
y = root(fun, j)
if y.success and (round(y.x[0], 6) not in solutions):
solutions.append(round(y.x[0], 3))
print(i, solutions)
我必须根据参数 a 找到解决方案的数量。在使用 scipy.optimize.root 数值求解方程时,我得到一些不是函数根的数字。例如对于 x = 7*sin(x) 我得到数字 -7.71046524 和 7.71046524。我的代码是:
a = np.linspace(-5, 5)
def fun(x):
return x - b*np.sin(x)
for i in a:
solutions = []
b = i
c = abs(int(round(i)))
for j in range(-c, c+1):
y = root(fun, j)
if (round(y.x[0], 3) not in solutions):
solutions.append(round(y.x[0], 3))
print(len(solutions))
如果使用 scipy.optimize.root
,return 值包含 x
解数组 和 success
布尔标志。您需要过滤掉 success
为 False
.
import numpy as np
from scipy.optimize import root
a = np.linspace(-7, 7)
def fun(x):
return x - b*np.sin(x)
for i in a:
solutions = []
b = i
c = abs(int(round(i)))
for j in range(-c, c+1):
y = root(fun, j)
if y.success and (round(y.x[0], 6) not in solutions):
solutions.append(round(y.x[0], 3))
print(i, solutions)