Я пытаюсь перенести мой быстрый прототип с Python на C ++.Я пытаюсь проверить обозначения с помощью простого дифференциального уравнения, но результаты сильно отличаются для начального значения [2,0].Python снижается, в то время как решение C ++ сильно растет.
Он работал для примера, найденного здесь: Как включить изменяющиеся во времени параметры из справочной таблицы в boost :: odeint, c ++
но это не работает для моего примера
TransferF::TransferF(const double& deltaT) : dt(deltaT), t(0.0), y(2)
{
// initial values
y[0] = 2.0; // x1
y[1] = 0.0; // x2
}
void TransferF::ode(const state_type &x, state_type &y, double t)
{
y[0] = x[0];
y[1] = x[1];
y[2] = (-2*y[1] - y[0] + 1) / (pow(y[0],2));
}
и то же самое в py:
def modelt(x,t):
y = x[0]
dydt = x[1]
dy2dt2 = (-2*dydt - y + 1)/ (y **2)
return [dydt,dy2dt2]
x3 = odeint(modelt,[2,0],timev)
Я ожидал те же результаты для временного ряда, но решение питоновпадает, C ++ поднимается.