【发布时间】:2019-06-18 05:07:31
【问题描述】:
我正在使用 scipy.integrate 的 solve_ivp 方法来解决 ivp,我希望能够在我为集成提供的时间步长上评估一个函数,但我不知道该怎么做。
我可以回顾集成中的每个元素,但是除了解决 ivp 已经花费的时间之外,这将花费大量的时间,所以我宁愿能够计算它们与实际方法在积分期间计算值的同时。
import scipy.integrate
import numpy
class Foo:
def __init__(self):
self.foo_vector_1 = numpy.zeros(3)
self.foo_vector_2 = numpy.zeros(3)
self.foo_vector_3 = numpy.zeros(3)
foo = Foo()
d_vector_1 = lambda foo: # gets the derivative of foo_vector_1
d_vector_2 = lambda foo: # gets the derivative of foo_vector_2
def get_foo_vector_3_value(foo):
return # returns the ACTUAL VALUE of foo_vector_3, NOT its derivative
def dy(t, y):
foo.foo_vector_1 = numpy.array((y[0],y[1],y[2]))
foo.foo_vector_2 = numpy.array((y[3],y[4],y[5]))
return numpy.array((d_vector_1(foo),d_vector_2(foo))).flatten().tolist()
foo.foo_vector_1 = numpy.array((1,2,3))
foo.foo_vector_2 = numpy.array((4,5,6))
y0 = numpy.array((foo.foo_vector_1, foo.foo_vector_2)).flatten().tolist()
sol = scipy.integrate.solve_ivp(dy, (0,10), y0, t_eval=numpy.arange(0,1000,1))
foo_vectors_1 = numpy.column_stack((sol.y[0], sol.y[1], sol.y[2]))
foo_vectors_2 = numpy.column_stack((sol.y[3], sol.y[4], sol.y[5]))
foo_vectors_3 = ????????
理想情况下,我将能够获得 foo_vectors_3 的值,而不必在整个 foo 向量列表的循环中重置 foo,因为对我来说这实际上需要大量的计算时间。
【问题讨论】: