Quelqu'un peut-il m'aider à fournir un moyen efficace ou m'aider à exécuter le code fourni pour faire les mêmes résultats dans les étapes minimales possibles. Je te serai reconnaissant.Fenêtre dynamique formant de manière efficace dans MATLAB
J'ai un tableau original:
A = [1 1 1 4.3 4.5 4 4.3 3 1 0 0 2 6.2 6.3 6 6.2 7.4 8 7.2 2 2 3 3 2];
résultat ressemble à:
A = [1 1 1 4 4 4 4 3 1 0 0 2 6 6 6 6 6 7 7 2 2 3 3 2];
J'applique certaines restrictions et supprimé certaines valeurs du tableau des maxima locaux de suite que j'ai reçu quelques nouveaux tableaux.
Yposlocfiltered = [6 15 23];
idx = [4 6 3];
Yneglocfiltered = [2 9 20];
idx_neg = [1 1 2];
Où je trouverai IDX (valeur maxima locaux) Je vais vérifier si les valeurs sont derrière et devant plus faire une fenêtre.
Exemple
If I will find 4 and 4.5, 4.3 is greater than 4 include it in backward window
4.3 is greater than 4 include it in forward window.
Je dois trouver plage de valeurs derrière maxima et maxima locaux avant local.
J'ai essayé d'écrire un code qui fonctionne bien, mais le problème c'est qu'il est trop long.
Quelqu'un peut-il me donner une idée pour effectuer cette action dans les étapes minimales et de manière plus rapide?
J'ai seulement fourni le code pour les maxima locaux positifs comme pour le code de maximum local négatif Est juste la réplique de ceci.
code: uniquement pour les maximas locaux positifs
clc
clear all
A = [1 0 1 4.3 4.5 5 4.3 3 0 0 0 2 6.2 6.3 7 6.2 7.4 8 7.2 1 2 3 4 2];
Yposlocfiltered = [ 6 15 23];
idx = [4 6 3];
Yneglocfiltered = [2 9 20];
idx_neg = [1 1 2];
for b = 1: numel(idx)
for c = 1:numel(A)
f = Yposlocfiltered(1,b)-c ;
g = Yposlocfiltered(1,b)+c ;
% if (f > 0 && g <= numel(X))
if(f > 0)
if (A(Yposlocfiltered(1,b)-c))> idx(1,b)
else
d= f+1;
z(b)= d;
backward_window = z;
break
end
end
end
end
for r = 1: numel(idx)
for s = 1:numel(A)
u = Yposlocfiltered(1,r)-s ;
v = Yposlocfiltered(1,r)+s ;
% if (f > 0 && g <= numel(X))
if(v <=numel(A))
if (A(Yposlocfiltered(1,r)+s))> idx(1,r)
else
w= v-1;
y(r)= w;
forward_window = y;
break
end
end
end
end
n=4
for i=1:length(backward_window)
range = backward_window(i): forward_window(i);
p = range
if n <= numel(p)
p = range(1:n)
A(p) = idx(i);
else
% if (size(range)<= 3)
A(p) = idx(i);
end
end
Anthony d'abord désolé pour un peu en retard réponse que je suis loin de mon PC. Merci beaucoup pour votre réponse si belle et précise et mature. Cela a fonctionné parfaitement pour moi. Merci d'avoir épargné votre temps et vos efforts pour moi. – Peter