9 / 9 / 0
Регистрация: 04.07.2014
Сообщений: 37
1

Скелетная линия колебательной системы с 3 степенями свободы

26.07.2014, 18:31. Показов 1156. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть диф. ур. второго порядка x''+x+0.5x^3=0
нужно построить скелетную линию данной функции.
Я как представляю план построения скелетной линии примерно следующий (если ошибаюсь исправьте):
1.Назначаем начальные условия x(0):=0.01, dx(0)/dt:=0
2.Выбираем промежуток [0,T],число точек N на нем и шаг интегрирования уравнения h=T/N
3.Проводим решение уравнения и формируем массив x(tk) значений функции x(t) в равноотстоящих узловых точках tk=k*h
4.Проводим разложение массива x(tk) в ряд Фурье , определяем первые три гармоники А1,А2,А3 и основную частоту om1
5.Эти значения запоминаем и постепенно формируем массив A1(om1),A2(om1),A3(om1)
6.Назначаем новые начальные условия,например, x(0):=x(0)+0.01,dx(0)/dt:=0
7.Этапы 2-6 повторяем какое-то достаточно большое число раз. Например, 1000 раз.
8.Зависимости A1(om1),A2(om1),A3(om1) выводим на один график. Это и будут скелетные линии

Мне кажется , что здесь проблемным будет вопрос о выборе промежутка интегрирования T

С помощью местных добрых людей у меня есть кое-какие наработки:

diffsys.m:
Matlab M
1
2
3
4
5
6
7
8
9
function dxdt = diffsys(t, x)
% обозначения:
% x(1) -> x(t) (искомая функция)
% x(2) -> dx/dt (производная)
% dxdt(1,1) -> dx/dt (первая производная)
% dxdt(2,1) -> d2x/dt2 (вторая производная)
dxdt(1,1) = x(2); 
dxdt(2,1) = x(1)-0.5*x(1).^3;
end
line.m:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
clear; clc; close all;
N=2^10;
T=2*pi;
T=32*T;
nfft=N;
t=0:T/N:T;
fs=1/(t(2)-t(1));
i_ot=0;
for i0=0.01:0.01:10
x0 = [i0 0];
[T0 X] = ode45('diffsys',t,x0);
X=X';
x=X(2,:);
S=fft(x,nfft)/nfft;
mag=2*abs(S);
mag(1)=mag(1)/2;
freg=fs/2*linspace(-1,1,nfft);
f_mag=fftshift(mag);
d_f=abs(freg(2)-freg(1))/2;
freg=freg-d_f;
s_freg=freg(nfft/2:end);
s_freg(2)=0;
s_mag=f_mag(nfft/2:end);
[pks locks]=findpeaks(s_mag);
i_ot=i_ot+1;
otX(i_ot)=s_freg(locks(1));
otY(1,i_ot)=pks(1);
otY(2,i_ot)=pks(2);
otY(3,i_ot)=pks(3);
end
plot (otX.*2*pi, otY([1 2 3],:))
legend('1я гармоника','2я гармоника','3я гармоника',3)
Скелетная линия колебательной системы с 3 степенями свободы
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.07.2014, 18:31
Ответы с готовыми решениями:

Уравнение Лагранжа 2-го рода системы с 2 степенями свободы
Однородный круглый цилиндр 1 массы m_1, и тонкостентонкостенный цилиндр 2 массы m_2 обмотаны двумя...

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

Система со многими степенями свободы
Доброго дня суток, задача такого типа, прошу помочь составить уравнение. Маятник состоит из...

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

16
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
28.07.2014, 18:42 2
Цитата Сообщение от bossuy Посмотреть сообщение
4.Проводим разложение массива x(tk) в ряд Фурье , определяем первые три гармоники А1,А2,А3 и основную частоту om1
ode45 возвращает Вам массив решения (2 вектора). Какой из них раскладывать и дальше анализировать будем?
0
9 / 9 / 0
Регистрация: 04.07.2014
Сообщений: 37
28.07.2014, 19:19  [ТС] 3
R2D2, я пытался раскладывал и анализировал второй вектор, хотя не уверен в правильности выбора вектор. Предлагаю так же анализировать 2й вектор.
0
5221 / 3552 / 372
Регистрация: 02.04.2012
Сообщений: 6,458
Записей в блоге: 17
29.07.2014, 08:43 4
Поделюсь мыслью, пока не забыл
Если сравнить спектры одиночного импульса и последовательности оных, то можно заметить, что чем длиннее последовательность, тем ярче выражены гармоники, посему длительность сигнала T нужно брать побольше, однако при фиксированном кол-ве точек N (кстати длинна массива t будет N+1) шаг времени также станет больше и при относительно высокой частоте сигнала могут получится неверные результаты.
Логика программы верная, но нужно посмотреть что получается при промежуточных вычислениях.
1
5221 / 3552 / 372
Регистрация: 02.04.2012
Сообщений: 6,458
Записей в блоге: 17
29.07.2014, 10:55 5
таки да, если менять длительность сигнала, то спектр заметно меняется:
Тестовая программка
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
clear; clc
 
dsys = @(t,x) [x(2); 
               x(1)-0.5*x(1)^3];
Tk = [0 500];
x0 = [0.2, 0];
[t X] = ode45(dsys,Tk,x0);
x = X(:,2);
subplot(211)
plot(t,x)
title(['x0=',num2str(x0(1)),' , T=',num2str(t(end))])
 
nfft = 2^10;
ti = linspace(0,t(end),nfft);
xi = spline(t,x, ti);
 
 
S=fft(xi,nfft)/nfft;
mag=2*abs(S);
mag(1)=mag(1)/2;
f_mag=fftshift(mag);
s_mag=f_mag(nfft/2:end);
 
fs=1/(ti(2)-ti(1));
freq=fs/2*linspace(-1,1,nfft);
d_f=abs(freq(2)-freq(1))/2;
freq=freq-d_f;
s_freq=freq(nfft/2:end);
s_freq(2)=0;
 
subplot(212)
plot(s_freq,s_mag,'r')
xlim([0 0.55])

Скелетная линия колебательной системы с 3 степенями свободы

Скелетная линия колебательной системы с 3 степенями свободы

Скелетная линия колебательной системы с 3 степенями свободы
2
9 / 9 / 0
Регистрация: 04.07.2014
Сообщений: 37
29.07.2014, 14:22  [ТС] 6
Зосима,
Цитата Сообщение от bossuy Посмотреть сообщение
Мне кажется , что здесь проблемным будет вопрос о выборе промежутка интегрирования T
Мне тоже показалось что ошибка возникает при выборе промежутка. Все равно не могу понять как именно стоит варьировать промежуток, кол. точек.
0
9 / 9 / 0
Регистрация: 04.07.2014
Сообщений: 37
11.08.2014, 15:34  [ТС] 7
ап!
0
9 / 9 / 0
Регистрация: 04.07.2014
Сообщений: 37
25.08.2014, 17:11  [ТС] 8
Зосима, R2D2, Уважаемые, модераторы, помогите разобраться с программой. Уже почти месяц топчусь на одном месте и никакого прогресса. Видимо малёхо туповат
Последняя надежда остается только на вас.
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
26.08.2014, 10:28 9
bossuy, давай по порядку. Программа предложенная модератором у тебя работает? Если да - то вставлял ли ты ее в свой цикл?
0
5221 / 3552 / 372
Регистрация: 02.04.2012
Сообщений: 6,458
Записей в блоге: 17
26.08.2014, 10:43 10
R2D2, загвоздка в том, что человеку нужны графики зависимости первых трех гармоник от нач. условий, однако выделить эти гармоники далеко не всегда представляется возможным!
у меня уже была мысль сделать поверхность - зависимость спектра от нач. условий
0
9 / 9 / 0
Регистрация: 04.07.2014
Сообщений: 37
26.08.2014, 15:32  [ТС] 11
R2D2,
Цитата Сообщение от R2D2 Посмотреть сообщение
Программа предложенная модератором у тебя работает?
Программа работает, но я не могу сообразить как и к чему мне привязать длину промежутка чтобы в цикле варьировать

Добавлено через 2 минуты
Зосима,
Цитата Сообщение от Зосима Посмотреть сообщение
была мысль сделать поверхность - зависимость спектра от нач. условий
Вы может решить мою проблему? Подскажите пожалуйста как это можно реализовать..
0
5221 / 3552 / 372
Регистрация: 02.04.2012
Сообщений: 6,458
Записей в блоге: 17
27.08.2014, 14:02 12
Я думал над таким вариантом
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
clear; clc
 
dsys = @(t,x) [x(2);
    x(1)-0.5*x(1)^3];
Tk = [0 100];
nfft = 2^10;
ti = linspace(0,Tk(end),nfft);
fs=1/(ti(2)-ti(1));
freq=fs/2*linspace(-1,1,nfft);
d_f=abs(freq(2)-freq(1))/2;
freq=freq-d_f;
s_freq=freq(nfft/2:end);
s_freq(2)=0;
 
x0 = 0.1:0.1:1;
 
[F X0] = meshgrid(s_freq, x0);
S = zeros(size(F));
for i = 1:length(x0)
    [t X] = ode45(dsys,Tk,[x0(i),0]);
    x = X(:,2);
    xi = spline(t,x, ti);
    s=fft(xi,nfft)/nfft;
    mag=2*abs(s);
    mag(1)=mag(1)/2;
    f_mag=fftshift(mag);
    s_mag=f_mag(nfft/2:end);
    S(i,:) = s_mag;
end
 
surf(F,X0,S,'FaceAlpha',0.5,'MeshStyle','row')
 
view(30,30)
xlim([0 1])
xlabel('частота')
ylabel('нач. условия')
title(['Длительность Т=',num2str(Tk(end))])
Скелетная линия колебательной системы с 3 степенями свободы
2
9 / 9 / 0
Регистрация: 04.07.2014
Сообщений: 37
27.08.2014, 15:47  [ТС] 13
Зосима, этот вариант интересный, но не то
Мне постоянно (после каждого повторения цикла) нужно запоминать частоту (первой гармоники) и значение первых трех гармоник. Но как Вы и сами увидели что нужно к чему-то "привязать" длительность, и этот вопрос остается открытым =(

В моем понимание должно получиться что-то такое:
Скелетная линия колебательной системы с 3 степенями свободы

Это и есть так называемая скелетная линия...

Может у Вас есть еще какие-либо предположения?
0
5221 / 3552 / 372
Регистрация: 02.04.2012
Сообщений: 6,458
Записей в блоге: 17
27.08.2014, 16:22 14
Да, я представляю, что нужно получить, но не знаю как трудность именно в выделении гармоник, т.к. мы получаем сплошной спектр с флуктуациями и нельзя так просто взять три пика и сохранить, гармоники должны быть на кратных частотах. Т.о. нужно найти первую гармонику, а от нее смотреть амплитуды второй и третьей, но не всегда первая гармоника больше второй
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
27.08.2014, 21:13 15
bossuy, Зосима абсолютно прав. Что бы говорить о гармониках у Вас должен быть строго периодический сигнал. А судя по картинкам выше у Вас там что то явно непериодическое.
Есть, конечно, лобовой вариант - увеличивать временной промежуток до тех пор, пока вы не увидите вожделенные 3 гармоники... Или же поднять частоту дискретизации.
Матлабом пока помочь не могу, извините.
1
9 / 9 / 0
Регистрация: 04.07.2014
Сообщений: 37
01.09.2014, 19:56  [ТС] 16
R2D2, если взять заведомо периодический сигнал (sin(x)) и тестовую программку Зосима, и все это впихнуть в цикл, то у меня вышло следующее:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
clear; clc
 
dsys = @(t,x) [x(2); 
                -sin(x(1))];
Tk = [0 64*pi];
count=0;
iN=0.01;
iK=5;
iH=0.01;
for i0=iN:iH:iK
    count=count+1;
x0 = [i0, 0];
[t X] = ode45(dsys,Tk,x0);
x = X(:,2);
 
nfft = 2^10;
ti = linspace(0,t(end),nfft);
xi = spline(t,x, ti);
 
 
S=fft(xi,nfft)/nfft;
mag=2*abs(S);
mag(1)=mag(1)/2;
f_mag=fftshift(mag);
s_mag=f_mag(nfft/2:end);
 
fs=1/(ti(2)-ti(1));
freq=fs/2*linspace(-1,1,nfft);
d_f=abs(freq(2)-freq(1))/2;
freq=freq-d_f;
s_freq=freq(nfft/2:end);
s_freq(2)=0;
[pks locks]=findpeaks(s_mag);
xFin(count)=s_freq(locks(1));
yFin(1,count)=pks(1);
yFin(2,count)=pks(2);
yFin(3,count)=pks(3);
end
 
subplot(211)
plot(t,x)
title(['x0=',num2str(iN),':',num2str(iH),':',num2str(iK),' , T=',num2str(t(end)/pi),'\pi'])
 
subplot(212)
plot(xFin*2*pi,yFin)
Скелетная линия колебательной системы с 3 степенями свободы

Скелетная линия колебательной системы с 3 степенями свободы

Скелетная линия колебательной системы с 3 степенями свободы


Результаты на первом скрине относительно нормальные, а вот второй и третий оставляют желать лучшего.
Как можно это подправить? На сколько я понимаю, то вопрос в том же, не верно выбрано Т.
0
5221 / 3552 / 372
Регистрация: 02.04.2012
Сообщений: 6,458
Записей в блоге: 17
02.09.2014, 09:37 17
в данном случае неправильно вычисляются гармоники, потому как в спектре множество пиков, которые между собой не являются гармониками (частоты не кратные)
Matlab M
33
34
35
36
37
[pks locks]=findpeaks(s_mag);
xFin(count)=s_freq(locks(1));
yFin(1,count)=pks(1);
yFin(2,count)=pks(2);
yFin(3,count)=pks(3);
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2014, 09:37
Помогаю со студенческими работами здесь

Робо рука с 6 степенями свободы манипулятор
Доброго Времени суток. Буду краток. нужно написать программу на ПК которая будет управлять...

Манипулятор с 7-ю степенями свободы, прямая задача
дравствуйте, столкнулся с проблемой написания диплома), написал .m файл этого самого манипулятора с...

Inventor 2008: задать закон движения телу с 3 степенями свободы на перемещение.
Задал графики углов поворота двух шарниров по времени через Input grapher, получил траектории ...

Построение эмпирической функции распределения Хи-квадрат с n степенями свободы в среде Matlab 2018a
Здравствуйте! В ВУЗе дали задание построить ЭФР Хи-квадрат с n степенями свободы, причем без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru