Зачем давать синтаксическую ошибку в октаве с системой ODE - PullRequest
0 голосов
/ 31 мая 2019

Кажется, это ошибка синтаксического разбора / синтаксиса для моей системы ODE, особенно xdot (2). Но я не могу понять,

Я проверил аналогичный вопрос в StackOverflow, но не нашел своего решения

function xdot = f3(x, t)
      xdot =zeros(2, 1);
      x=zeros(1, 2);

      r_1=4;
      R_1=1;
      p_1=8;
      l_1=0.2;
      r_2=10;
      p_2=10;
      R_2=2;
      l_2=50;
      rM= 0.01;
      d=2;

      xdot(1)= ((r_1*p_1*x(3))/(1+p_1*x(3)))*x(1)-r_1*x(1)^2-(R-1*x(1))/(1+r_1*x(3)-x(1)*x(2)
      xdot(2)= rM + ((r_2*p_2*x(3))/(1+p_2*x(3)))*x(2)-r_2*x(2)^2-(R_2*x(2))/(1+p_2*x(3))
      xdot(3)= d - (l_1*r_1*x(1))/(1+p_1*x(2))-(l_2*r_2*x(2)/(1+r_2*x(3))
endfunction

x0 = [1; 0; -1];
t = linspace(0, 2, 201);
x = lsode (@f3, x0, t);

figure(1);
plot(t, x(:,1));
xlabel('t');
ylabel('X');
title('X - component');


figure(2);
plot(t, x(:,2));
xlabel('t');
ylabel('Y');
title('Y - component');

должен решить системную оду, но дать мне

f3

parse error near line 18 of file C:/Users/Admin/Desktop\f3.m

syntax error

>>>   xdot(2)= rM + ((r_2*p_2*x(3))/(1+p_2*x(3)))*x(2)-r_2*x(2)^2- 
(R_2*x(2))/(1+p_2*x(3))

     ^

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Похоже, что есть несколько проблем.

  1. Вы создаете значения xdot и x размера 2, но получаете доступ / настройку по индексу 3.

  2. Для xdot(1)= ((r_1*p_1*x(3))/(1+p_1*x(3)))*x(1)-r_1*x(1)^2-(R-1*x(1))/(1+r_1*x(3)-x(1)*x(2)

    a) Вам не хватает ')', который вызывает синтаксическую ошибку.

    b) R-1 неверен - у вас нет 'R'так что это, вероятно, означает R_1

  3. В xdot(3)= d - (l_1*r_1*x(1))/(1+p_1*x(2))-(l_2*r_2*x(2)/(1+r_2*x(3)) вы пропускаете') '

0 голосов
/ 05 июня 2019

С функцией производных

function xdot = f3(x, t)
      xdot = 0*x;

      r_1=4;
      R_1=1;
      p_1=8;
      l_1=0.2;
      r_2=10;
      p_2=10;
      R_2=2;
      l_2=50;
      rM= 0.01;
      d=2;

      xdot(1)= ((r_1*p_1*x(3))/(1+p_1*x(3)))*x(1)-r_1*x(1)^2-(R_1*x(1))/(1+r_1*x(3)-x(1)*x(2));
      xdot(2)= rM + ((r_2*p_2*x(3))/(1+p_2*x(3)))*x(2)-r_2*x(2)^2-(R_2*x(2))/(1+p_2*x(3));
      xdot(3)= d - (l_1*r_1*x(1))/(1+p_1*x(2))-(l_2*r_2*x(2)/(1+r_2*x(3)));
end

, который исправляет все ошибки, упомянутые в комментариях и обобщенные в ответе @lostbard, я получаю решение для части интервала. Раствор взрывается в компоненте X для t около 0.3295, что также видно на полученном графике

enter image description here

...