2017-01-11 9 views
0

MATLAB У меня есть ниже системы уравненийMATLAB: Решить систему нелинейных второго порядка оде с

enter image description here

Можно ли решить эту проблему с ode45 в MATLAB? Я знаю, что мне нужно преобразовать уравнения второго порядка в два порядка первого порядка, но мое замешательство происходит от термина, который является произведением производных от s и theta.

P.S. Бета только константа

я определил множество уравнений как функции, как:

function dy = pend(t,y) 
beta = 1; 
dy(1) = y(2); 
dy(2) = -1/(1+y(3))*sin(y(1))-2/(1+y(3))*y(2)*y(4); 
dy(3) = y(4); 
dy(4) = (1+y(3))*y(2)*y(2)+cos(y(1))-1-beta^2*y(3); 
y=y'; 
end 

рассмотрении у (1), чтобы быть тета, у (2) быть производной тета, у (3) be s и y (4) - его производная по времени.

Тогда я решить ее с помощью

[t,y] = ode45(@pend,[0 20],[pi/4 ; 0 ; 0 ; 0]); 

ответ

1

Да, это должно быть возможно решить, используя ode45.

Пусть

theta = x1 
s  = x2 
thetadot = x3 
sdot  = x4 

Тогда вы будете иметь следующий набор уравнений:

x1dot = x3 
x2dot = x4 
x3dot + sin(x1)/(1 + x2) + 2/(1+x2).x4.x3 = 0 
x4dot - (1 + x2).(x3)^2 = cos(x1)-1-beta^2*x2 

Теперь дают эти набор уравнений для ode45 с начальными значениями x1, x2, и x4. Вам необходимо переписать 3 rd и 4 th уравнение надлежащим образом.

EDIT1:

Вы написали систему уравнений уже. Так что теперь использовать

y0 = [pi/4; 0; 0; 0]; 
tspan = [0 20]; 
[t,y] = ode45(pend, tspan, y0); 

edit2:

function dy = pend(t,y) 

    beta = 1; 

    dy = [y(2); 
      -1/(1 + y(3))*sin(y(1)) - 2/(1 + y(3))*y(2)*y(4); 
      y(4); 
      (1 + y(3))*y(2)*y(2) + cos(y(1)) - 1 - beta^2*y(3)]; 
end 

Это должно работать для вас.