Запускать ODE из нескольких файлов MATLAB одновременно - PullRequest
0 голосов
/ 30 октября 2018

Я создал ode в двух функциях, присутствующих в двух файлах .m. Я пытаюсь объединить оды из обеих функций и запустить его одновременно.

Ниже приведены функции,

Основная функция: runtoy - дважды использует ODE45 для решения проблемы присутствия оды в двух функциях toy и yot , по отдельности.

function runtoy()
%% toy
Nnodes = 5;
vc = 50;
vz0 = [280 100 150 180 110];
vz = vz0(2:4)';
tspan = [0 2];
[tz,dvzdt] = ode45(@(t,y) toy(t,y,vc), tspan,vz)
plot(tz,dvzdt)

hold all
plot(tz,vc,'*')
%% yot

[tc,dvcdt] = ode45(@(t,z) yot(t,z,vz(2)), tspan,vc)
hold all
plot(tc,dvcdt)
hold all
plot(tc,vz(2),'o')
legend({'toy-vz1','toy-vz2','toy-vz3','toy-vc','yot-vc','yot-vz2'})

%%EDIT

init = [vz' vc]; 
Combined = ode45(@(t,v) combined_ODEs(t,v), tspan ,init')
end

Первый набор присутствующих в ODE функций Игрушка

function dvz = toy(t,y,vc)
vz = y;
Matrix = [-2 0 0;1 -3 1;0 -4 1];
Connect = [0;conn(vz(1),vc);0]; 
dvz = Matrix*vz -Connect;
end

ODE присутствует в функции yot

function dvc=yot(t,z,vz)
dvc = conn(vz,z);
end

Функция conn , вызываемая внутри функции yot и toy

function c= conn(vz,vc)
c = vz - vc/3;
end

Может ли кто-нибудь дать советы о том, как решить оду, присутствующую в обеих функциях одновременно? Я могу иметь эти функции в одном файле. Но я использую это как контрольный пример для реализации в моей реальной системе.

РЕДАКТИРОВАТЬ: Испытание метода, предложенного в комментарии

function dV = combined_ODEs(t,V)
vz = V(1:3);
vc = V(4);
dV(1:3,1) = toy(t,vz,vc);
dV(4,1) = yot(t,vc,vz(2)); % not sure what z is here??
end

1 Ответ

0 голосов
/ 30 октября 2018

Поскольку два ODE являются парой, я предлагаю написать (еще) другую функцию, которая ссылается на две (или более) функции, которые определяют ODE и решают ее вместо этого, то есть что-то вроде этого:

function dV = combined_ODEs(t,V)
vz = V(1);
vc = V(2);
dV(1) = toy(t,vz,vc);
dV(2) = yot(t,z,vz); % not sure what z is here??
end
...