2015-06-11 2 views
0

This is part of a larger projectСоздать функцию для использования в ode45

Так что это является частью более крупного проекта, но я застрял на номер два раздела. Я переписал систему, чтобы получить его в требуемой форме:

дх (1)/DT = х (2)

дх (2)/дт = (- (М + М)/мл)) х (4) + 1/(мл) у

дх (3)/DT = х (4)

дх (4)/дт = - (мг/м) х (1) + (1/M) у

После подстановки переменных, приведенных в задаче я написал несильно:

function dx = fun(t,x) 
dx = zeros(4,1); 
dx(1) = x(2); 
dx(2) = -((2+.1)/(.1*.5)).*x(4); 
dx(3) = x(4); 
dx(4) = -((.1*9.81)/2).*x(1); 
end 

Я запутался в том, как реализовать u (t) = 0 и как создать функцию theta.

Любая помощь, даже если ее просто указывая на меня в правильном направлении, было бы удивительно. Заранее спасибо :)

ответ

0

Это очень просто. Вы реализуете theta как другое состояние. Это возможно, так как вы знаете производную, которая даже не зависит от других состояний. Чтобы быть более точным, вы должны добавить здесь еще два состояния. Один для theta и один для theta_dot.

dx(5) = x(6) % Theta' 
dx(6) = -0.1 % Theta'' 

И, кстати, вы также можете передать дополнительные переменные в свое дифференциальное уравнение. Вы просто добавить больше аргументов к нему

function dx = diffeq(t,x,parameters) 
    ... 
end 

и создать новую функцию ручки, где вы выполняете ОДУ решатель

[T,X] = ode45(@(t,x)diffeq(t,x,parameters),t_span,X0, ode_options); 

Это просто намек, так как вы используете magic numbers в функции дифференциального уравнения.

+0

Спасибо, что помогает тонну :), но как я могу построить график тета (t) против времени? Также u (t) = 0 по существу означает игнорировать u-часть системы? Я знаю, как построить x (t) по сравнению с временем, но если вы добавите эти состояния, как я могу построить только тэта (t) по сравнению с t? –

+0

@ Хлоя Кармайкл пока, да, вы полностью игнорируете 'u (t)'. Хотя я думаю, что это больше не будет игнорироваться в более поздней части вашего проекта. Как вы справитесь с этим, зависит от того, как вы даете. Если это внешняя функция, вы можете просто использовать ее в своем дифференциальном уравнении и передать время в качестве параметра: 'u = funct_u (t)', а затем использовать 'u' в вашем дифференциальном уравнении. – Cat

+0

Также вы уже должны определить 'u' и просто установить его на ноль. То, как вы сформулировали свои уравнения, теперь 'u' полностью отсутствует, что математически видно не так, но с кодовым. 'u' есть, это просто' 0'. – Cat