def _exec(self, X): y0 = X[0] a = X[1] b = X[2] phi_ab = ot.ParametricFunction(self.phi_, [2, 3], [a, b]) phi_t = ot.ParametricFunction(phi_ab, [0], [0.0]) solver = ot.RungeKutta(phi_t) initialState = [y0] values = solver.solve(initialState, self.ticks_) return values * [1.0e-6]
#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m ot.TESTPREAMBLE() f = ot.NumericalMathFunction(['t', 'y0', 'y1'], ['dy0', 'dy1'], ['t - y0', 'y1 + t^2']) phi = ot.TemporalFunction(f) solver = ot.RungeKutta(phi) print('ODE solver=', solver) initialState = [1.0, -1.0] nt = 100 timeGrid = list(map(lambda i: (i**2.0) / (nt - 1.0)**2.0, range(nt))) print('time grid=', ot.NumericalPoint(timeGrid)) result = solver.solve(initialState, timeGrid) print('result=', result) print('last value=', result[nt - 1]) t = timeGrid[nt - 1] ref = ot.NumericalPoint(2) ref[0] = -1.0 + t + 2.0 * m.exp(-t) ref[1] = -2.0 + -2.0 * t - t * t + m.exp(t) print('ref. value=', ref)