Найдите минимум и максимум функции двух переменных на фиксированном интервале в Matlab и отобразите эти точки на том же графике с помощью функции

У меня есть эта функция ниже, и мне нужно вычислить минимум и максимум этой функции U, а также отобразить максимальное и минимальное значение на трехмерном графике вместе с функцией.

Как я могу написать код?


[x,y]=meshgrid(0:0.1:pi,0:0.1:2*pi);% x-theta,y-phi

a=90.7;b=36.2;c=12.9; 
E=1.44;

U=-E.^2*(a.*sin(x).^2.*cos(y).^2+b.*sin(x).^2.*sin(y).^2+c.*cos(x).^2);

meshc(x,y,U)

xlabel('\theta')
ylabel('\Phi ')

zlabel('U')

Я устал таким образом находить макс, но я не знаю, правильно ли я это сделал

max(U,[],1) %max row-wise
max(U,[],2) %max column-wise

и для минимума не сработала та же идея, также я не получил точное значение максимума


person Yammus    schedule 10.08.2018    source источник


Ответы (2)


Как указано выше, чтобы просто найти максимум/минимум выбранной вами функции, используйте m = min(U(:)); M = max(U(:)). Чтобы иметь возможность построить их, вам не хватает координат, которые дают вам эти значения. Для этого вам понадобится второй вывод мин./макс. функций, которые дают вам индекс, где происходит экстремум.

Возможная реализация (возможно, не самая лучшая) будет (может работать не идеально, у меня нет под рукой матлаба):

[Ms,I] = max(U,[],1); %row-wise maximum and their indexes
[M,j] = max(Ms); %maximum among all rows and its index

Теперь i = I(j) является местом максимума. Наконец, вы можете сделать plot3(x(i,j),y(i,j),U(i,j),'ro'), чтобы нарисовать большой красный круг в месте максимума, или что угодно.

Примечание. У меня может быть это наоборот, и это может быть x(j,i) и так далее. Просто проверьте. Конечно, вы можете сделать то же самое для min().

РЕДАКТИРОВАТЬ: я только что вспомнил функцию ind2sub , который решит все ваши проблемы. Следуя синтаксису, использованному выше:

[M,ind] = max(U(:));
[i,j] = ind2sub(size(U),ind)

Остальное остается без изменений.

person Puff    schedule 10.08.2018

Вы можете просто использовать что-то вроде

max(max(U))

это найдет максимум для вашей 2D-матрицы. Для минимума вам просто нужно заменить max на min.

person AkariYukari    schedule 10.08.2018
comment
max(U(:)) лучше - person Ander Biguri; 10.08.2018