Я хочу решить какую -то оду только на один временный шаг. Временный шаг решается внутренне решателем, а не мной. Есть ли питоне, адаптивный решатель ODE-шаг, который мог бы сделать это? Для иллюстрации решатель может выглядеть так < /p>
solution = solve(ode_func, t_span, init_cond, step_num)
if step_num = n , тогда решатель вычисляет и возвращает решение для t 1 , t 2 , ..., t n (начальное время t 0 ). Эти t 1 , t 2 , ..., t n определяются решателем, используя его алгоритм адаптивного времени, я просто предоставляю значение n . В моем случае я установлю step_num = 1 . Если кто-то задается вопросом, этот одноразовый решатель требуется, потому что мне нужно обновить ODE_FUNC каждый раз. Это очень неэффективно, так как у решателей MATLAB нет возможности интеграции в один шаг. < /P>
sol_t = 0; % initial time
sol_y = 1; % initial value
window = 2; % time window (2 sec)
tmax = 6;
ode = @(t,y) 0.25*(1+sin(t))-0.1*sqrt(y);
step = 1;
while sol_t(end) < tmax
% solve ode for 2 sec time interval.
% this will produce solution (t0,y0),(t1,y1),...,(tn,yn).
sol = ode45(ode, [sol_t(end) sol_t(end)+window], sol_y(end));
% take just (t1,y1) and discharge the rest
sol_t = [sol_t sol.x(step+1)];
sol_y = [sol_y sol.y(step+1)];
% do something here
end
stem(sol_t,sol_y)
Подробнее здесь: https://stackoverflow.com/questions/796 ... on-for-ode
Одно адаптивное решение для ODE для ODE ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение