Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТАУ_курс.docx
Скачиваний:
24
Добавлен:
16.04.2015
Размер:
143.21 Кб
Скачать

3. Исследование автоколебаний в нелинейной системе

Для существования периодических колебаний в замкнутой системе характеристическое уравнение системы должно иметь мнимые корни:

, где – амплитуда колебаний.

Коэффициенты гармонической линеаризации для данной нелинейности:

Эту систему можно решать в Matlab с помощью функции fsolve, но этой функции надо задавать начальные значения переменных. При разных начальных значениях получается разный результат. Поэтому будем перебирать начальные значения до тех пор, пока не получим вещественные и положительные корни, которые будут соответствовать устойчивым колебаниям. Для устойчивости найденных периодических решений должно быть выполнено следующее неравенство:

Для предварительной оценки диапазона, в котором следует перебирать начальные значения амплитуды и частоты можно воспользоваться частотным методом и получить значения амплитуды и частоты при заданных параметрах системы.

Частотный метод:

Построим графики этих функций с помощью Matlab:

K=20; D=2; T1=0.5; T2=0.1; T3=2; T4=1; b=1; c=2;

w = 3.5:0.0001:100;

sys1 = tf( [ K*D*T3, K*D ], [ T1*T2*T4, T1*T2+T2*T4+T1*T4, T1+T2+T4, 1, 0 ] );

figure

nyquist( sys1, w );

hold on

a = 0.5:0.5:25;

WN = 4*c/pi./a.*sqrt(1-(b/2)^2./a.^2)-j*2*c*b/pi./a.^2;

plot(-1./WN)

Обозначим вещественную часть функции буквой U:

Зависимость амплитуды и частоты колебаний от K2:

Зависимость амплитуды и частоты колебаний от Ti:

Код для расчёта и построения зависимостей в Matlab:

K=20; D=2; T1=0.5; T2=0.1; T3=2; T4=1; b=1; c=2;

%% зависимость от К

K = 1:40;

x0 = [1;1]; % начальные значения

res = zeros(length(K),2); % для записи результатов

for i=1:length(K) % цикл по значениям К

found = false;

for a=1:30 % перебираем начальные значения амплитуды

for w=1:10 % перебираем начальные значения частоты

x0(1)=a; x0(2)=w;

x = fsolve( @(X) [ T1*T2*T4*X(2)^4 - (T1+T2+T4)*X(2)^2 + 2*c*K(i)*D/pi/X(1)*(2*sqrt(1-(b/2)^2/X(1)^2) + b*T3*X(2)/X(1));

2*c*K(i)*D/pi/X(1)*(2*T3*X(2)*sqrt(1-(b/2)^2/X(1)^2)-b/X(1))-(T1*T2+T1*T4+T2*T4)*X(2)^3+X(2) ], x0, optimset('Display','off') );

if ( imag(x(1))==0 && imag(x(2))==0 && x(1)>0 && x(2)>0 ) % если полученные а и w вещественны и > 0

sq = sqrt(x(1)^2-(b/2)^2); % то проверим их на устойчивость

dx_da = 4*c*K(i)*D/pi/x(1)^3*(x(1)^2/sq-2*sq-b*T3*x(2)); % производная уравнения вещественной части по а

dx_dw = 4*T1*T2*T4*x(2)^3-2*(T1+T2+T4)*x(2)+2*K(i)*D*T3*b*c/pi/x(1)^2;

dy_da = 4*c*K(i)*D/pi/x(1)^3*(T3*x(2)*x(1)^2/sq-2*T3*x(2)*sq+b); % производная уравнения мнимой части по а

dy_dw = -3*(T1*T2+T1*T4+T2*T4)*x(2)^2+1+4*c*K(i)*D*T3/pi/x(1)^2*sq;

if ( dx_da*dy_dw > dx_dw*dy_da ) % это условие должно быть выполнено для устойчивости

found = true; % если оно выполнено, значит мы нашли подходящее решение

break % прекращаем перебирать начальные значения

end

end

end

if found

break

end

end

if ~found

disp([ 'Устойчивое решение для К=', num2str(K(i)), ' не найдено.' ])

continue

end

res(i,1) = x(1);

res(i,2) = x(2);

end

figure

subplot(2,1,1)

plot(K,res(:,1))

grid on

title('a(K_2)')

subplot(2,1,2)

plot(K,res(:,2))

grid on

title('w(K_2)')

%% зависимость от Т

T = [ 0.01:0.01:0.5, 0.6:0.1:5];

x0 = [1;1]; % начальные значения

res = zeros(length(T),2); % для записи результатов

for i=1:length(T) % цикл по значениям T

found = false;

for a=1:20 % перебираем начальные значения амплитуды

for w=1:50 % перебираем начальные значения частоты

x0(1)=a; x0(2)=w;

x = fsolve( @(X) [ T1*T2*T(i)*X(2)^4 - (T1+T2+T(i))*X(2)^2 + 2*c*K*D/pi/X(1)*(2*sqrt(1-(b/2)^2/X(1)^2) + b*T3*X(2)/X(1));

2*c*K*D/pi/X(1)*(2*T3*X(2)*sqrt(1-(b/2)^2/X(1)^2)-b/X(1))-(T1*T2+T1*T(i)+T2*T(i))*X(2)^3+X(2) ], x0, optimset('Display','off') );

if ( imag(x(1))==0 && imag(x(2))==0 && x(1)>0 && x(2)>0 )

sq = sqrt(x(1)^2-(b/2)^2);

dx_da = 4*c*K*D/pi/x(1)^3*(x(1)^2/sq-2*sq-b*T3*x(2));

dx_dw = 4*T1*T2*T(i)*x(2)^3-2*(T1+T2+T(i))*x(2)+2*K*D*T3*b*c/pi/x(1)^2;

dy_da = 4*c*K*D/pi/x(1)^3*(T3*x(2)*x(1)^2/sq-2*T3*x(2)*sq+b);

dy_dw = -3*(T1*T2+T1*T(i)+T2*T(i))*x(2)^2+1+4*c*K*D*T3/pi/x(1)^2*sq;

if ( dx_da*dy_dw > dx_dw*dy_da ) % это условие должно быть выполнено для устойчивости

found = true; % если оно выполнено, значит мы нашли подходящее решение

break % прекращаем перебирать начальные значения

end

end

end

if found

break

end

end

if ~found

disp([ 'Устойчивое решение для Ti=', num2str(T(i)), ' не найдено.' ])

continue

end

res(i,1) = x(1);

res(i,2) = x(2);

end

figure

subplot(2,1,1)

plot(T,res(:,1))

grid on

title('a(T_i)')

subplot(2,1,2)

plot(T,res(:,2))

grid on

title('w(T_i)')

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]