我的代码出了问题。我想得到一个模型的参考解决方案,该模型将描述熊和鳟鱼的种群及其相互连接。
我找不到我做错了什么,但python调用三行有问题并以错误'numpy.ndarray'对象结束'不可调用'。我做错了什么?
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import interp1d
def referenz_loesung(f, ref_loeser, x0, t0, T):
print "Berechne Referenzloesung..."
h_ref = 0.0001
#it mentions the following line as problematic
t_punkte, x_punkte = ref_loeser(f, x0, t0, T, h_ref) #it mentions this line as problematic
print "Erstelle Funktionen aus Referenzloesungen mit Hilfe von Splines."
a = interp1d(t_punkte, x_punkte[: , 0])
b = interp1d(t_punkte, x_punkte[: , 1])
return a, b
if __name__ == "__main__":
def f(x, t): # Funktion aus vorherigen Uebungen der DGL: x'(t) = f(x(t), t)
y = np.zeros(2)
y[0] = -2*x[0] + 10 * x[1]
y[1] = -x[0]
return y
x0 = np.array([1., 0.])
t0 = 0
T = 10
h = 0.5
from unsersolver import integriere
#it mentions the following line as problematic
t_punkte, x_werte = integriere (f, x0, t0, T, h)
from implEuler import integriere as ref_loeser
#it mentions the following line as problematic
x1_ref, x2_ref = referenz_loesung(f,ref_loeser, x0, t0, T)
ref_punkte = np.linspace(t0, T, 1000)
from woche1_1_m import auswerten_nx1
ref_werte1 = auswerten_nx1(x1_ref, ref_punkte)
ref_werte2 = auswerten_nx1(x2_ref, ref_punkte)
我导入的内容来自前几周的其他文件,所有工作都能正常工作。 知道我能做什么吗?我正处于学习python的最开始,所以我真的没有线索。 谢谢!
答案 0 :(得分:1)
如果您可以发布integriere()或ref_loeser()的代码会更有帮助。 有了这些信息,我让你试着回溯到问题的根源:
问题的开始是t_punkte, x_werte = integriere(f, x0, t0, T, h)
,你说它给出了一个numpy错误,并且由于你传递给它的唯一numpy参数是x0,我建议检查你{{1}中x0的用法代码。
接下来,我建议不要将函数作为参数传递,我不认为这是一个标准约定。您可以在integriere()
函数调用之外定义def ref_loeser(parameters..)
,然后像调用它一样调用它。
由于refrenz_loesung()
调用referenz_loesung()
与ref_loeser()
相同,我强烈建议您检查此功能中的代码。
答案 1 :(得分:1)
x_lsg = berechne_nullstelle(x_werte(n-1))
< ---错误
x_lsg = berechne_nullstelle(x_werte[n-1])
有效吗?
x_werte是一个ND阵列,你需要访问n-1个元素,而是使用x_werte [n-1]。 ()用于函数调用,因此python解释器假设您正在调用numpy.ndarry并因此抛出该错误
答案 2 :(得分:0)
如果是,例如,您会收到此错误你把x0()
放在你的代码中。如果没有其他模块的来源,我们无法告诉真正的错误是什么。
我最好的猜测:您是否可能以错误的顺序获取integriere
的参数?如果是这样,也许该函数试图调用该参数,期望它是一个函数,但是因为你在该参数中放置了一个numpy数组,它被称为"被称为"代替?
答案 3 :(得分:0)
因此,这是implEuler文件的代码。 ' unsersolver'应该是正确的,因为老师给了我......
import matplotlib.pyplot as plt
import numpy as np
from newton import berechne_nullstelle
def integriere(f, x0, t0, T, h):
d = len(x0)
t_punkte = np.arange(t0, T, h)
N = len(t_punkte)
x_werte = np.zeros ((N, d))
x_werte[0] = x0
for n in range(1, N):
def f_implEuler(x):
x_werte^(n-1) + h * f(x_werte, t_punkte^(n)) - x_werte
x_lsg = berechne_nullstelle(x_werte(n-1))
x_werte[n] = x_lsg
print integriere
这有什么用?