Lấy một tập hợp ngẫu nhiên các tọa độ (x, y, z) sẽ là trung tâm của ma trận 3x3x3 của tôi (được coi là tối thiểu cục bộ). Tôi có một hàm J lấy các toạ độ đó, tính toán và trả về cho tôi một số. Nếu bất kỳ trong số 26 điểm đó sẽ nhỏ hơn, đó sẽ là trung tâm cho matrice tiếp theo của tôi. Trong trường hợp tôi không tìm thấy một giá trị nhỏ hơn, bán kính của matrice được tăng lên 1, và chúng tôi chạy vòng lặp một lần nữa. Câu hỏi của tôi là: làm thế nào để lặp lại chỉ thông qua "vỏ" của khối lập phương và không gọi hàm cho các giá trị được kiểm tra trước đó?Matlab Đối với vòng lặp chỉ cho "vỏ" của ma trận
Tôi đã cố gắng minh họa nó bên dưới (trong 2d ở đây, nhưng bạn nhận được điểm) .. các dấu chấm là các giá trị được kiểm tra, "?" là những cái cần được tính toán và so sánh với min cục bộ.
đây là mã
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
Có vẻ như bạn đang cố gắng thực hiện một số tối ưu hóa. Bạn đã cân nhắc sử dụng chức năng 'MATLAB' có sẵn, chẳng hạn như [' fminsearch'] (http://www.mathworks.com/help/matlab/ref/fminsearch.html?requestedDomain=www.mathworks.com)? –
@ Jeff Irwin Sửa tôi nếu tôi sai, nhưng với fminsearch hoặc bất kỳ phương pháp tối ưu hóa nào khác, bạn không cần phải có tất cả các biến trước khi hoạt động trên chúng? Chức năng của tôi là lồi (không hoàn hảo!, Đó là lý do tại sao tôi sử dụng biến cấp .. nếu tôi tăng bán kính 10 lần, đó là 21x21x21 và tôi không tìm thấy một biến nhỏ hơn min địa phương, tôi kết luận đó là min toàn cầu) và tôi đang thực hiện các bước nhỏ hướng tới mức tối thiểu toàn cầu mà không tính tất cả các giá trị – Mike
Tôi không chắc chắn ý của bạn là "có tất cả các biến". fminsearch đánh giá chức năng của bạn khi nó đi. Bạn không cần phải đánh giá hàm trước thời hạn. Một số thuật toán tối ưu hóa cũng cần phải đánh giá độ dốc của hàm, nhưng fminsearch không cần gradient. –