Weź losowy zestaw współrzędnych (x, y, z), który będzie centrum mojej macierzy 3x3x3 (również uważane za lokalne minimum). Mam funkcję J, która przyjmuje te współrzędne, wykonuje obliczenia i zwraca mi liczbę. Jeśli którykolwiek z tych 26 punktów będzie mniejszy, będzie to centrum mojego następnego macierzy. W przypadku, gdy nie znajdę mniejszej wartości, promień matrycy zostanie zwiększony o 1, a my uruchomimy pętlę ponownie. Moje pytanie brzmi: jak zapętlić tylko przez "powłokę" kostki i nie wywołać funkcji dla wcześniej testowanych wartości?Matlab Dla pętli tylko dla "powłoki" macierzy
Próbowałem zilustrować to poniżej (tutaj jest tutaj 2d, ale dostajesz punkt) .. kropki to wartości, które zostały przetestowane, "?" to te, które należy obliczyć i porównać z lokalnym min.
oto kod
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
Wygląda na to, że próbujesz przeprowadzić optymalizację. Czy rozważałeś użycie wbudowanej funkcji 'MATLAB', takiej jak [' fminsearch'] (http://www.mathworks.com/help/matlab/ref/fminsearch.html?requestedDomain=www.mathworks.com)? –
@Jeff Irwin Popraw mnie, jeśli się mylę, ale przy użyciu fminsearch lub innych metod optymalizacji, czy nie musisz mieć wszystkich zmiennych, zanim zaczniesz na nich działać? Moja funkcja jest wypukła (nie jest idealna !, dlatego użyłem zmiennej poziomu, jeśli zwiększam promień 10 razy, to jest 21x21x21 i nie znajduję innej zmiennej mniejszej niż lokalna min, stwierdzam, że jest to min globalny) i robię małe kroki w kierunku globalnego minimum bez obliczania wszystkich wartości – Mike
Nie jestem pewien, co masz na myśli przez "masz wszystkie zmienne". fminsearch ocenia twoją funkcję. Nie musisz oceniać funkcji z wyprzedzeniem. Niektóre algorytmy optymalizacji muszą również oceniać gradient funkcji, ale fminsearch nie potrzebuje gradientu. –