Prendere un insieme casuale di coordinate (x, y, z) che sarà il centro della mia matrice 3x3x3 (considerato minimo locale). Ho una funzione J che prende quelle coordinate, esegue i calcoli e mi restituisce un numero. Se uno qualsiasi di questi 26 punti sarà più piccolo, quello sarebbe il centro della mia prossima matrice. Nel caso in cui non trovassi un valore inferiore, il raggio della matrice è aumentato di 1 e eseguiamo nuovamente il ciclo. La mia domanda è: come eseguire il ciclo solo attraverso la "shell" del cubo e non chiamare la funzione per i valori precedentemente testati?Matlab Solo per il ciclo "shell" della matrice
Ho provato ad illustrarlo di seguito (è in 2d qui, ma si ottiene il punto) .. i punti sono i valori che sono stati testati, il "?" sono quelli che devono essere calcolati e confrontati con il locale min.
Ecco il codice
minim=100;
%%the initial size of the search matrix 2*level +1
level=1;
x=input('Enter the starting coordinate for X : ');
y=input('Enter the starting coordinate for Y : ');
z=input('Enter the starting coordinate for Z : ');
%%The loop
if(level<=10)
for m=x-level:x+level
for n=y-level:y+level
for p=z-level:z+level
A(m,n,p)=J(m,n,p);
if A(m,n,p)<minim
minim=A(m,n,p);
x=m;y=n;z=p;
level=1;
else
level=level+1;
%<<----shell loop here ---->>
end
end
end
end
else
%Display global min
display(minim, 'Minim');
%Coordinates of the global min
[r,c,d] = ind2sub(size(A),find(A ==minim));
display(r,'X');
display(c,'Y');
display(d,'Z');
end
Sembra che tu stia cercando di fare qualche ottimizzazione. Hai preso in considerazione l'utilizzo di una funzione 'MATLAB' integrata, come [' fminsearch'] (http://www.mathworks.com/help/matlab/ref/fminsearch.html?requestedDomain=www.mathworks.com)? –
@Jeff Irwin Correggetemi se ho torto, ma con fminsearch o altri metodi di ottimizzazione, non è necessario avere tutte le variabili prima di operare su di esse? La mia funzione è convessa (non perfetta!, È per questo che ho usato la variabile di livello ... Se aumento il raggio 10 volte, cioè 21x21x21 e non trovo un'altra variabile più piccola del minimo locale, concludo che è il minimo globale) e sto facendo piccoli passi verso il minimo globale senza calcolare tutti i valori – Mike
Non sono sicuro di cosa intendi con "avere tutte le variabili". fminsearch valuta la tua funzione come va. Non è necessario valutare la funzione prima del tempo. Alcuni algoritmi di ottimizzazione devono anche valutare il gradiente della funzione, ma fminsearch non ha bisogno del gradiente. –