【发布时间】:2016-11-10 22:24:02
【问题描述】:
所以我为欧拉方法编写了一个函数。但是,我希望它能够使用具有任意尺寸的初始条件。例如,目前我的函数使用这个:
>>>Euler(f, x0, t0, h, N)
其中 x0 是一个浮点数。但是我希望它能够使用它:
>>>Euler(f, [x0], t0, h, N)
其中 x0 现在是浮点数列表。 (使其多维)
f = 函数,x0 = t0 时刻的初始条件,
t0 = 初始时间,h = 步长,N = 步数。
我尝试过使用 for 循环:
def Euler(f,x0,t0,h,N):
t = t0
y = x0
z = []
v = []
for i in y:
while t <= N:
xval = t
yval = [y]
t += h
y += h * f(t,y[i]) #i have also tried y+= h*f(t, i)
z.append(xval)
v.append(yval)
return z, v
我得到的错误是 TypeError:列表索引必须是整数或切片,而不是浮点数。我理解,这意味着我必须索引 y,例如使用 y[0]、y[1] 等...但是当我这样做时
y+= h* f(t, y[:])
它给了我一个关于文件中其他函数的错误:f = >
TypeError: a float is required
line 22, in <module> vv = -x**3 - x + sin(t)
当我也尝试时
y += h * f(t, y[0])
然后我进入
>>>Euler(f, [0., 1.], 0., 1, 10)
line 15, in <module>
y += h * f(t,y[0])
builtins.TypeError: 'float' object is not iterable
我基本上想返回 2 个列表,第一个列表是 z,它返回时间值列表,第二个列表 v,它返回每个步骤中每个结果的列表列表。到目前为止,它在我使用浮点数而不是列表的地方工作。那么我缺少什么代码?
【问题讨论】:
-
如果您将
x0定义为numpy.array,它可能会在更多地方工作。