Я пытаюсь провести анализ электрических цепей в Scilab
, решив ODE
. Но мне нужно изменить ODE
в зависимости от текущего значения функции. Я реализовал решение в Scala
, используя метод RK4
, и оно отлично работает. Теперь я пытаюсь сделать то же самое, но с использованием стандартных функций в Scilab
. И это не работает. Я попытался решить эти два ODE по отдельности, и это нормально.
clear
state = 0 // state 0 is charging, 1 is discharging
vb = 300.0; vt = 500.0;
r = 100.0; rd = 10.0;
vcc = 600;
c = 48.0e-6;
function dudx = curfunc(t, uu)
if uu < vb then state = 0
elseif uu > vt state = 1
end
select state
case 0 then // charging
dudx = (vcc - uu) / (r * c)
case 1 then // discharging
dudx = - uu / (rd * c) + (vcc - uu) / (r * c)
end
endfunction
y0 = 0
t0 = 0
t = 0:1e-6:10e-3
%ODEOPTIONS=[1, 0, 0, 1e-6, 1e-12, 2, 500, 12, 5, 0, -1, -1]
y = ode(y0, t0, t, 1e-3, 1e-6, curfunc)
clear %ODEOPTIONS
plot(t, y)
Итак, здесь я решаю для напряжения узла, если напряжение узла превышает верхний порог (vt), тогда используется разряд ODE
, если напряжение узла ниже нижнего напряжения (vb), тогда используется заряд ODE
. Я пробовал играть с %ODEOPTIONS
, но безуспешно