因此,我尝试为一个学校项目创建一些基本的根查找函数,下面是我的代码:
import numpy as np
x = np.linspace(0, 3)
f = 14 * x * np.exp(x - 2) - 12 * np.exp(x - 2) - 7 * x ** 3 + 20 * x ** 2 - 26 * x + 12
def bolzano(function, lower, upper):
if function(lower) * function(upper) < 0:
return True
else:
return False
def bisection(function, lower, upper):
m = (lower + upper) / 2
while function(m) > 10 ** -6:
if bolzano(function, lower, m):
upper = m
else:
lower = m
m = (lower + upper) / 2
return float(m)
b = bisection(f, 0, 3)
print(b)
但是,当我试图运行它时,我得到了这个错误
Traceback (most recent call last):
File "C:/Users/user/PycharmProjects/untitled/Test.py", line 31, in <module>
b = bisection(f, 0, 3)
File "C:/Users/user/PycharmProjects/untitled/Test.py", line 22, in
bisection while function(m) > 10 ** -6:
TypeError: 'numpy.ndarray' object is not callable
我尝试将二分法函数中的元素强制转换为已知的数据类型,但没有成功。大多数关于Ndarray的帖子都是关于。。。嗯,数组,我不使用,所以在那里找不到解决方案。 有什么想法吗
问题是您的函数定义
f
目前不是一个函数。现在只是一个表达。您有两种选择:要么使用SymPy
,要么创建一个函数来计算f
,这样您就可以简单地使用普通函数调用来调用它,作为f(x)
,其中x
是您的参数,它可以是数组,也可以是单个数字。下面是如何使用第二个选项正如@hpaulj所指出的,因为您是在为标量输入计算函数,所以最好使用
math.exp
而不是np.exp
。前者只需要标量输入,而后者也接受向量相关问题 更多 >
编程相关推荐