Как ODE решается в MATLAB? - PullRequest
0 голосов
/ 10 июня 2018

Мой проф.сделал два кода при выполнении ODE

function xdot= code(t,x);
A=[-.5 0; 1 0];
B=[1 ; 0];
K=[1.5 1];
U=-K*x;
xdot=A*x+B*U; `

, а второй был

[t,x]=ode23('code',[0 10],[1 1 ]');
figure(1);
plot(t,x);
grid

Я не уверен, почему он делает это так?Это то, что я пытаюсь сделать.Который, кажется, дает много ошибок.

function xdot= code3(t,x)
A=[-.5 0; 1 0];
B=[1 ; 0];
K=[1.5 1];
tspan=[0 10];
y0=[1 1];
U=-K*x;
[t,x]=ode23(@(t,x),U=-K*x;,tspan,y0);
xdot=A*x+B*U;

figure(1);
plot(t,x);
grid

code3 Ошибка: Файл: code3.m Строка: 8 Столбец: 19 Выражение или выражение неверно - возможно, несбалансировано (, {, или [.

В этом коде запрашивается формирование разомкнутого цикла. AB переменная K рассчитывается и модель U Когда два кода находятся в отдельном файле сценария, а второй запущен, вывод выводится по желанию. Я попытался объединить оба файла сценария и не могу его получить. Кроме того, я не могу понять, как этот кодрабочий

1 Ответ

0 голосов
/ 12 июня 2018

Если вы запускаете файл скрипта, первая строка файла скрипта вызывается, если это объявление функции, и это обычно без аргументов.

В вашем случае вы можете избежать этого, расположив двафрагменты кода в обратном порядке, сначала основная подпрограмма, а затем объявление функции.После загрузки объявления функций в скрипте анализируются первыми.Таким образом, размещение следующего в одном файле должно работать (пожалуйста, сообщайте об ошибках, если они есть)

[t,x]=ode23(@code,[0 10],[1 1 ]');
figure(1);
plot(t,x);
grid

function xdot= code(t,x);
  A=[-.5 0; 1 0];
  B=[1 ; 0];
  K=[1.5 1];
  U=-K*x;
  xdot=A*x+B*U; `
end
...