Дан синусоїдальний високочастотний сигнал промодулірованний сигналом маятника. (Тобто згустки, невелике розрідження в точці зупинки і знову згустки)
Завдання - порахувати кількість максимумів в "згустках".
Я хотів написав програму на Matlab, яка б збільшувала K, як тільки з'являвся новий максимум і при цьому додавала до змінної ітерації 10, оскільки під мої умови (я брав околиця точки максимуму) потрапляли відразу 2-3 точки, але цього не вийшло так як matlab в циклі використовує масив i, якщо вводити меншу околиця, то програма пропускала деякі точки з похибкою 50%.
for # 40; i = 1: 1: 100000 # 41;
if abs # 40; y # 40; i # 41; # 41;<0.15 % окрестность нуля, в которую попадает значение сигнала
% Тут все одно вважати максимуми або переходи через нуль
% Так як максимуми = # 40; число переходів через нуль # 41; / 2
k = k + 1
i = i + 10
end
end
1) як можна реалізувати такий алгоритм?
2) як в циклі FOR організувати запис в масив всіх i-координат максимумів? (Matlab же працює з фіксованими масивами - а я не знаю скільки максимумів у мене буде)
3) чи є якась фунция пошуку максимумів?
Можу запропонувати оригінальний алгоритм без циклів:
Вважаю, що в масиві A вже містяться значення вашої функції. Тоді порахуємо кількість перетинів осі абсцис так:
Красиве рішення, правда?
я просто в дикому захваті від цього алгоритму.
Це ви звідки вичитали?
але все ж питання з приводу функції перестрибування ітерацій в циклі, як це можна зробити в будь-якій мові програмування
for # 40; i = 1: 100 # 41;
if бла бла бла i = i + 10
end
Це ви звідки вичитали?
відразу вичитав. - Я його придумав, коли побачив Вашу задачу
але все ж питання з приводу функції перестрибування ітерацій в циклі,
У Матлаб "нерозумно" стрибати в циклі - треба Вам брати кожне десяте значення, так і напишіть A (1: 10: end)
Та й взагалі Матлаб - така мова, що цикли можна використовувати рідко і працювати при цьому буде швидше, ніж з ними, часом у рази