Решение систем ОДУ с использованием октавы - PullRequest
0 голосов
/ 08 ноября 2018
>>function dxdt = fff(x,t)
  %constants and parameters
  u=0;
  %equations
  dxdt(1)=0.11*x(3)/(0.006*x(1)+x(3))*x(1)-u*x(1)/(500*x(4));
  dxdt(2)=0.0055*x(3)/(0.001+x(3)*(1+10*x(3)))*x(2)-0.01*x(2)-u*x(2)/(500*x(4));
  dxdt(3)=-(h1*x(1)/0.47+0.0055*x(3)/(0.001+x(3)(1+10*x(3)))*x(1)/1.2+x(1)*x(3)*0.029/(0.001+x(3)))+(1-x(3)/500)*u/x(4);
  dxdt(4)=u/500;
  dxdt=dxdt';
endfunction

>>[x,t]=ode45(@dxdt,[1.5 0 0 7]',[0 120])

error: x(3): out of bound 1
error: called from
dxdt at line 5 column 10
starting_stepsize at line 46 column 5
ode45 at line 192 column 25

При выполнении кода появляются вышеуказанные ошибки. x0 = [1.5 0 0 7] 'и t имеет диапазон от 0 до 120. Я сохранил dxdt.m и выбрал правильный каталог. Кто-нибудь знает, что не так с кодом? Большое спасибо!

1 Ответ

0 голосов
/ 08 ноября 2018

Вы, кажется, называете свои аргументы наоборот. Из документации:

 -- [T, Y] = ode45 (FUN, TRANGE, INIT)

     FUN is a function handle, inline function, or string containing the
     name of the function that defines the ODE: 'y' = f(t,y)'.  The
     function must accept two inputs where the first is time T and the
     second is a column vector of unknowns Y.

Также обратите внимание на тот факт, что он ожидает вектор 'столбца'. Не уверен, что это важно, но это может объяснить, почему он жалуется, что имеет только индекс «1» (поскольку то, что вы передаете, имеет только строку «1»).

...