#matlab
#matlab
Вопрос:
Допустим, у меня есть график, содержащий 300 кривых. Есть ли какой-либо метод в Matlab 2014a, чтобы я мог определить, какие кривые идентичны друг другу? Чтобы быть более конкретным, если у меня есть 10 кривых на одной фигуре, кривая 1 идентична и очень близка к кривой 2, то же самое происходит с кривыми 3,4 и 5. Есть ли какой-либо автоматизированный способ для Matlab сделать это вместо визуального осмотра?
Спасибо
Джордж
Комментарии:
1. Какая информация у вас есть о кривых? Как вы их генерируете?
2. У меня есть температура на 24-часовой основе для каждого дня. Я хотел бы определить температуры дней, которые идентичны и очень близки друг к другу, чтобы я мог представить их в среднем.
Ответ №1:
Может занять некоторое время, но если ваши 300 кривых находятся в массиве, скажем c(n,300)
. n
является произвольным и представляет собой количество точек, которые у вас есть на каждой кривой.
Для i in 1:300
и j in i:300
вы хотите сравнить c(:,i) - c(:,j)
с заданным порогом (который зависит от того, насколько вы хотите, чтобы две кривые отличались друг от друга). Я делаю это с помощью: abs(sum(c(:,i) - c(:,j))) < thresh
-> суммирую разницу для всех точек между 2 кривыми, разница должна быть небольшой, если кривые похожи.
Когда вы обнаружите, что a c(:,j)
ниже порогового значения, вы хотите удалить его из пула 300 кривых. Это делается с помощью c = c(:,~ismember(1:size(c,2),j));
которого вы получаете код, подобный:
i = 1;
thresh = 1; %arbitrary threshold here adapt to you needs
while i<size(c,2)
j = i 1;
while j<size(c,2)
if abs(sum(c(:,i) - c(:,j))) < thresh
c = c(:,~ismember(1:size(c,2),j)); %remove the curve j from c
else
j = j 1;
end
end
i = i 1;
end
Редактировать
Когда вы выполняете сравнение с пороговым значением, которое вы на самом деле хотите сравнить с абсолютным значением суммы.
Изменил свой код, чтобы отразить это.
Комментарии:
1. @user3775255 Можете ли вы принять ответ, если он отвечает на ваш вопрос?
2. Я попробовал ваш код с 12 кривыми, но для завершения моделирования требуется очень много времени. На самом деле я не мог ждать, и мне пришлось выйти из Matlab. Это нормально?
3. @Джордж Стрэндж, ты можешь где-нибудь опубликовать свои данные? На матрице
c
, которую я произвольно создал, она работает очень быстро.4. Как я могу опубликовать свои данные? Матрица c представляет собой матрицу 24×12.
5. Я также хотел бы знать, какие столбцы были удалены, и сохранить их в другой матрице. Вместо удаления кривых я хотел бы сохранить их в другой матрице, чтобы я мог видеть, какие столбцы матрицы c идентичны или близки друг к другу. Как это можно сделать?