How to find min/max points on a surface inside a given area
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mattias Hertzberg
el 8 de Feb. de 2023
Comentada: Mathieu NOE
el 15 de Feb. de 2023
Hello!
I'e been sitting with this for hours and I need to find the highest and lowest point inside the given triangle and I cannot find any way to do this.
I suspect the highest point is in the upper left corner and the lowest point is lower centre and a bit to the left but how do I get the exact nubers?
And how can I plot the surface in only the triangle?
Very thankful for any answers :)
clf,clear,clc
y=linspace(-3, 1);
x=linspace(0,6);
[X,Y]=meshgrid(x,y);
Z=-9.*X.*Y-12.*X+27.*Y;
contourf(x,y,Z, 50);
hold on
% This is just to show the triangle
% Corners on (3,-3)(6,-2)(0,1)
a=[1 -3]; b=[0 3]; plot(b,a, 'k')
c=[3 6]; d=[-3 -2]; plot(c,d, 'k')
e=[6 0]; f=[-2 1]; plot(e,f, 'k')
1 comentario
Fifteen12
el 8 de Feb. de 2023
This seems like more of a mathematics question than a MATLAB question, but I'll take a stab at it. You've given the elevation as Z = -9 .* X. * Y - 12 .* X + 27 .* Y. If you know the elevation everywhere, you can solve this using general optimization methods. I'm no expert on optimization, but I know outside a convenient analytical solution, normally a restricted boundary optimization problem is best solved numerically. How you do this is up to you-you can develop your own bisection method to converge to the solution, or you might can use the MATLAB Optimization toolbox. You'll likely want to use the linear programming toolbox: https://www.mathworks.com/help/optim/ug/linprog.html
Respuesta aceptada
Mathieu NOE
el 9 de Feb. de 2023
hello
try this
using inpolygon allows you to define the points inside your triangle
the max point is given by the red diamond (top left corner) and the min is the blue diamond
clf,clear,clc
N = 100;
y=linspace(-3, 1, N);
x=linspace(0,6, N);
[X,Y]=meshgrid(x,y);
Z=-9.*X.*Y-12.*X+27.*Y;
figure(1)
contourf(x,y,Z, 50);
hold on
% This is just to show the triangle
% Corners on (3,-3)(6,-2)(0,1)
a=[1 -3]; b=[0 3]; plot(b,a, 'k')
c=[3 6]; d=[-3 -2]; plot(c,d, 'k')
e=[6 0]; f=[-2 1]; plot(e,f, 'k')
% use inpolygon to select points inside the triangle
xv = [0 3 6 0];
yv = [1 -3 -2 1];
in = inpolygon(X,Y,xv,yv);
[r,c] = ind2sub(size(X),find(in));
Xin = X(in);
Yin = Y(in);
Zin = Z(in);
plot(Xin,Yin,'c.') % points inside
[mmax,imax]= max(Zin,[],'all','linear'); % nb linear indice of max value
plot(Xin(imax),Yin(imax),'rd','markersize',15) % points inside
[mmin,imin]= min(Zin,[],'all','linear'); % nb linear indice of max value
plot(Xin(imin),Yin(imin),'bd','markersize',15) % points inside
figure(2) % plot the surface only for the triangle area
ZZ = NaN(N); % create some "empty" plot correponding to the points outside the triangle
ZZ(in) = Zin; % now fill the inside with the correct values
contourf(x,y,ZZ, 50);
hold on
plot(Xin(imax),Yin(imax),'rd','markersize',15) % points inside
plot(Xin(imin),Yin(imin),'bd','markersize',15) % points inside
2 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Calculus en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!