Как я могу построить частотную характеристику для колебательной системы с нелинейными дифференциальными уравнениями?

#plot #octave #differential-equations #vibration #nonlinear-equation

#график #октава #дифференциальные уравнения #вибрация #нелинейное уравнение

Вопрос:

У меня есть система нелинейных дифференциальных уравнений для колебательной системы с 3 степенями свободы. система дифференциальных уравнений

Сначала я хочу построить y, y_L и y_R в зависимости от времени (для заданного значения для Omega), а затем я хочу построить домены (максимальные значения y, y_L и y_R) для различных значений Omega. К сожалению, я не силен в октаве. Я написал следующий код в Octave (на основе образца, предоставленного одним из пользователей), но он заканчивается этой ошибкой: «анонимные функциональные тела должны быть одиночными выражениями».

Я был бы признателен, если кто-нибудь сможет мне помочь.

Вот код:

 Me = 4000;
me = 20;
c = 2000;
c1 = 700;
c2 = 700;
k = 20000;
k1 = 250000;
k2 = 20000;
a0 = 0.01;
om = 25;
mu1 = (c 2*c2)/(Me);
mu2 = (c2)/(Me);
mu3 = (c1 c2)/(me);
mu4 = (c2)/(me);
w12 = (2*k2)/(Me);
w22 = (k1 k2)/(me);
a1 = (k2)/(me);
a2 = (k)/(Me);
F0 = (k1*a0)/(Me);
couplode = @(t,y) [y(2); mu4*y(4) - mu3*y(2) - w22*y(1)   a1*y(3)   F0*cos(om*t); y(4); mu2*(y(2) y(6)) - mu1*y(4) - w12*y(3)   0.5*w12*(y(1) y(5))   a2((y(3)).^3; y(6); mu4*y(4) - mu3*y(6) - w22*y(5)   a1*y(3)   F0*cos(om*t)];

[t,y] = ode45(couplode, [0 0.49*pi], [1;1;1;1;1;1]*1E-8); 

figure(1)
plot(t, y)
grid
str = {'$$ dot{y_L} $$', '$$ y_L $$', '$$ dot{y} $$', '$$ y $$', '$$ dot{y_R} $$', '$$ y_R $$'};
legend(str, 'Interpreter','latex', 'Location','NW')
  

Комментарии:

1. Вы пропустили определение me и Me . Что вы получаете, если оцениваете couplode(t0,y0) , получаете ли вы плоский вектор желаемого размера? Пробелы в определениях массива и матрицы могут давать забавные результаты.

2. Извините, они были оставлены при копировании и вставке. Я отредактировал код. Что я должен добавить в код для оценки couplode(t0, y0)?

Ответ №1:

У вас есть странный термин, а в конце определения вектора

 ...   a2((y(3)).^3
  

Вы, конечно, имели в виду

 ...   a2*y(3).^3
  

Вы получаете лучшую наглядность и упрощаете отладку, разбивая ее на отдельные строки

 couplode = @(t,y) [ y(2); 
                    mu4*y(4)-mu3*y(2)-w22*y(1) a1*y(3) F0*cos(om*t); 
                    y(4); 
                    mu2*(y(2) y(6)) - mu1*y(4) - w12*y(3)   0.5*w12*(y(1) y(5))   a2*y(3).^3; 
                    y(6); 
                    mu4*y(4)-mu3*y(6)-w22*y(5) a1*y(3) F0*cos(om*t)];
  

По крайней мере, в этой форме пробелы или отсутствие пробелов не имеет значения. В общем случае в matlab / octave [a b -c] совпадает с [a, b, -c] , поэтому нужно быть осторожным, чтобы выражение не интерпретировалось как строка матрицы. Пробелы в обоих местах знака операции переключаются обратно на интерпретацию с одним выражением.