Обзор: В основном я пытаюсь сделать что-то, что легко сделать в среде simulink, но я хочу сделать это с помощью команды Ode45. У меня есть два набора дифференциальных уравнений, и мне нужно связать их вместе. Я знаю, как использовать команду Ode45, когда существует только один набор дифференциальных уравнений, а также я знаю, как использовать команду Ode45 с зависящими от времени членами ( здесь используется ).
Итак, я пытаюсь имитировать приведенный ниже файл simulink, используя скрипт MATLAB и ode45:
- Block1 и Block2 содержат 2 набора ODE
- Входы Simulink 1, 2 и 3 являются зависимыми от времени входами
- Выход 1 Simulink, необходимо сохранить альфа и гамму
Ограничение для симуляции: дифференциал Уравнения Блока 1 должны быть записаны в отдельный файл функций, а также дифференциальные уравнения Блока 2.
Что я могу сделать:
- Я могу создать файл функций, содержащий дифференциальные уравнения блока 1: Блок1
[Xdot_Block1, beta] = Block1(t,X_Block1,input1_t,input1,alfa)
input1 = interp1(input1_t,input1,t);
...
end
- Аналогично дифференциальные уравнения для блока 2 в другом файле функций:
[Xdot_Block2, out1, alfa] = Block2(t,X_Block2,input2_t,input2,input3_t,input3,gamma)
input2 = interp1(input2_t,input2,t);
input3 = interp1(input3_t,input3,t);
...
end
ВОПРОС
Можете ли вы показать, как я могу смоделировать эти два набора дифференциальных уравнений, которые зависят друг от друга?
Для подхода я создал другой файл функций, который связывает их обоих и создает больший набор ODE, но я чувствую, что в этом есть ошибки:
[Xdot,out1,alfa,gamma]=system(t,X,input1,input1_t,input2,input2_t,input3,input3_t,alfa_initial,gamma_initial)
X_Block1=X(1:3);
X_Block2=X(4:11);
[Xdot_Block2, out1, alfa] = Block2(t,X_Block2,input2_t,input2,input3_t,input3,gamma)
[Xdot_Block1, beta] = Block1(t,X_Block1,input1_t,input1,alfa)
gamma=K*beta;
Xdot=[Xdot_Block1;Xdot_Block2];
end
Кроме того, как бы я использовал начальные значения альфа и гамма (которые мне известны)?