Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 21

Как упростить код по поиску экстремумов функции и подсчете количества максимумов на каждом интервале

12.09.2020, 14:18. Показов 1443. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день!
Составил в матлабе вот такой код по поиску экстремумов функции и подсчете количества максимумов на каждом интервале в 10 значений.
Подскажите пожалуйста можно ли этот код как-то упростить и не использовать 2 цикла?
И можно ли както применить такой алгоритм для непрерывной обработки потока данных например с микрофона или датчика вибрации?

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
QWE = randn(100000,1);
[m,n] = findpeaks(QWE);
 
L = 1:length(QWE);
 
Lia = ismember(L,n);
Lia = Lia.';
 
QWE(Lia~=1) = 1;
 
K = 10;
k = 1;
p = 1;
for i = 1:length(QWE);
    if  k~=K
        dp(k,p)=QWE(i);
        k = k+1;
    else
        dp(k,p)=QWE(i);
        p = p+1;
        k=1;
    end
end
      
Logic = dp>1; 
[bm,bn]=size(Logic);
for bi=1:bn
    B(bi)=sum(Logic(:,bi));
end
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.09.2020, 14:18
Ответы с готовыми решениями:

Как упростить решение задачи о подсчете количества
Стояла задача: дан список учеников с фамилиями, именами, классом и баллами. Нужно найти максимумы оценок по всем классам и вывести...

Создать программу поиска локальных максимумов функции на интервале наблюдения
Всем привет. Подскажите с чего начать. Какую функцию мне брать? Создать программу поиска локальных максимумов функции на интервале...

Найти в каждом заданном массиве количество максимумов, и вывести на экран тот массив, в котором больше максимумов
Помогите пожалуйста) Даны массивы А(10), В(10), С(10). Надо найти в каждом массиве количество максимумов и вывести на экран тот массив в...

5
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
13.09.2020, 09:24
Лучший ответ Сообщение было отмечено Cansed как решение

Решение

Cansed, ваши два цикла, начиная с 11 строки, можно заменить одной командой
Matlab M
1
dp=reshape(QWE,10,[]);
И вместо третьего цикла со строки 25 можно просто написать
Matlab M
1
B=sum(dp>1);
1
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 21
13.09.2020, 15:12  [ТС]
Спасибо! Век живи - век учись!
Крайний вопрос если можно: Скользящее окно при обработке массива реализуется только через цикл или можно другим способом?
Matlab M
1
2
3
for i = 1:length(B)+1-window 
temp = B(i:i-1+window);
end
Можно ли подругому?

Добавлено через 10 минут
Но всетаки ругается матлаб так
Error using reshape
Product of known dimensions, 10, not divisible into total number of elements, 310735.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
13.09.2020, 23:04
Цитата Сообщение от Cansed Посмотреть сообщение
Но всетаки ругается матлаб
Неудивительно, ведь размер массива 310735 не кратен 10. Поэтому нужно расширить массив до длины, кратной 10, сделав дополнительные элементы нулями.
Matlab M
1
2
3
4
k=length(QWE);
d=10-mod(k,10);
dp=[QWE zeros(1,d)];
dp=reshape(dp,10,[]);
Цитата Сообщение от Cansed Посмотреть сообщение
Скользящее окно при обработке массива реализуется только через цикл или можно другим способом?
Matlab M
1
2
3
A=gallery('circul',B);
A=[A(1,:);flipud(A(2:end,:))];
temp=A(1:length(B)+1-window,1:window);
1
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 21
14.09.2020, 08:54  [ТС]
Спасибо Вам большое! Оконная обработка работает, но только не для больших массивов. Ругается так
Requested 310735x310735 (719.4GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a long time and cause MATLAB to become unresponsive. See array size limit or preference panel for more information.

Error in toeplitz (line 40)
ij = (0:m-1)' + (p:-1:1); % Toeplitz subscripts

Error in circul (line 27)
C = toeplitz( [ v(1) v(n:-1:2) ], v );

Error in gallery (line 240)
[varargout{1:max(nargout,1)}] = F(varargin{:});

Добавлено через 12 минут
По поводу разбиения массива там тоже поругался так на эту строку:
Matlab M
1
dp=[QWE zeros(1,d)];
Error using horzcat
Dimensions of arrays being concatenated are not consistent.

Я подправил так. То есть вместо сцепки удаляю неугодные значения. Спасибо Вам большое!
Matlab M
1
2
3
4
5
k=length(QWE);
d=10-mod(k,10);
sec = k-d+1;
QWE(sec:k) = [];
dp=reshape(QWE,10,[]);
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
14.09.2020, 20:56
Цитата Сообщение от Cansed Посмотреть сообщение
Оконная обработка работает, но только не для больших массивов.
У вашего компьютера памяти не хватает работать с такими большими массивами.
Цитата Сообщение от Cansed Посмотреть сообщение
По поводу разбиения массива там тоже поругался так на эту строку:
Да, там у вас вектор-столбец, а не строка. Поэтому правильно будет так:
Matlab M
1
dp=[QWE;zeros(d,1)];
Цитата Сообщение от Cansed Посмотреть сообщение
Я подправил так. То есть вместо сцепки удаляю неугодные значения.
У вас код работает? Он не универсальный. Например, при k=36 остаётся вектор длиной 32, а 32 не кратно 10, и при использовании команды reshape появится ошибка.
Если вы хотите уменьшить размер вектора до ближайшего числа, кратного 10, то можно сделать так:
Matlab M
1
2
3
4
k=length(QWE);
d=fix(k/10)*10;
QWE=QWE(1:d);
dp=reshape(QWE,10,[]);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.09.2020, 20:56
Помогаю со студенческими работами здесь

Построить круговую диаграмму распределения количества элементов в каждом интервале для каждой строки матрицы
"Дан массив А(10,60) значения элементов заданы случайными числами в пределах: 1,2,3,9 строки от А1 до В1 (А1=-10 , В1=300 ) ...

Упростить код нахождения количества и суммы делителей заданного числа
как можно упростить етот код до уровня школьника? var n,k,s,i:word; begin read(n); k:=0;s:=0; for i:=1 to n do if n mod...

Упростить код для подсчёта и вывода количества файлов в папке и её размера
В этом коде показывается количество файлов и их размер папки "common", можете изменить его так чтоб он показывал токо размер? @echo...

Как доказать что нет экстремумов функции на отрезке
Помогите пожалуйста Задана функция x=(x^2-e^2)/3 Как доказать,что у функции не существует экстремума на отрезке ?

Ошибка в подсчете количества инверсий
Здравствуйте, помогите разобраться с подсчетом количества инверсий, в случае повторяющихся элементов. Количество элементов в массиве 65537,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru