Я использую метод execute_ivp от scipy.integrate для решения 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, потому что для меня это потребовало бы значительного времени вычислений.