Graphing a hypersurface from two inequalities
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I am trying to graph a hypersurface with inputs in mu_i, alpha_i, b_i space.
I tried to do this with a for loop but I am just getting what looks like a stack of 2D surfaces, which I don't think is correct.
Looking at a slice of this, varying only X (mu_i) and Y (alpha_i) I am getting a curved cone-like area, so I am expecting something like a curved 3D cone shape.
%% initializing constants
g = 2.5;
muj=18.5;
aj=7.6;
bj=23.3;
%% define range of alpha, bi and mui values
Z=linspace(bj,100); %bi
Y=linspace(aj,100); %alpha_i
X=linspace(0,muj); %mu_i
%% Making a Matrix of mu_i and alpha_i and b_i values
[m,a,b] = meshgrid(X,Y,Z);
%% Defining the two inequalities I want to graph the intersection of as a
%hypersurface
Sij= ((1/2).*b.*bj.^(-1).*(b+(-1).*g+(-1).*m).^(-1).*(bj+(-1).*g+(-1).*muj).*(g+muj).^(-1).*(g+m+muj).^(-1).*(2.*g+m+muj).*(g+2.*muj))<(a.^(-1).*aj);
Sji= (a.^(-1).*aj)<(2.*b.*bj.^(-1).*(b+(-1).*g+(-1).*m).^(-1).*(g+m).*(g+2.*m).^(-1).*(bj+(-1).*g+(-1).*muj).*(g+m+muj).*(2.*g+m+muj).^(-1));
feas = Sij.*Sji;
feas(feas==0) = NaN;
%% Graphing
fig1=figure();
hold on
for i =1:100 % not sure if this is right?
surf(m(:,:,i),a(:,:,i),b(:,:,i),feas(:,:,i),'DisplayName','Feasibility','EdgeColor', 'none', 'FaceColor','k','FaceAlpha',1)
end
xlabel('\mu_i , mortality sp i','FontSize',14)
ylabel('\alpha_i , senstivity sp i','FontSize',14)
zlabel('b_i, birth sp i','FontSize', 14)
Thank you, I would appreciate any tips.
I will attach the code varying only two of the variables here.
%% initializing constants
meshsize = .01;
g = 2.5;
muj=18.5;
aj=7.6;
bj=23.3;
bi=23.3;
%% define range of alpha and mu values
alphai=aj:meshsize:100;
mui=0:meshsize/4.995:muj;
%% Making a Matrix of mu_i and alpha_i values
[m,a] = meshgrid(mui,alphai);
%% Defining the inequalities I want to graph the intersection of
Sij= ((1/2).*bi.*bj.^(-1).*(bi+(-1).*g+(-1).*m).^(-1).*(bj+(-1).*g+(-1).*muj).*(g+muj).^(-1).*(g+m+muj).^(-1).*(2.*g+m+muj).*(g+2.*muj))<(a.^(-1).*aj);
Sji= (a.^(-1).*aj)<(2.*bi.*bj.^(-1).*(bi+(-1).*g+(-1).*m).^(-1).*(g+m).*(g+2.*m).^(-1).*(bj+(-1).*g+(-1).*muj).*(g+m+muj).*(2.*g+m+muj).^(-1));
feas = Sij.*Sji;
feas(feas==0) = NaN;
%% Graphing
fig1=figure();
surf(m,a,feas,'DisplayName','Feasibility','EdgeColor', 'none', 'FaceColor','k','FaceAlpha',1)
xlabel('\mu_i , mortality sp i','FontSize',14)
ylabel('\alpha_i , senstivity sp i','FontSize',14)
0 comentarios
Respuestas (1)
Ishu
el 26 de Oct. de 2023
Hi Ursula,
I understand that you are trying to plot a hypersurface using "surf" function.
In your code you are using "hold on" before ant of the surface was plotted. In this case "hold on" by default assumes 2D axes and adjusts the surfaces according to that adn because of this you are getting a 2D plot instead of 3D plot.
You can change your code according to this:
fig1=figure();
for i =1:100 % not sure if this is right?
surf(m(:,:,i),a(:,:,i),b(:,:,i),feas(:,:,i),'DisplayName','Feasibility','EdgeColor', 'none', 'FaceColor','k','FaceAlpha',1)
hold on %shift hold on here
end
xlabel('\mu_i , mortality sp i','FontSize',14)
ylabel('\alpha_i , senstivity sp i','FontSize',14)
zlabel('b_i, birth sp i','FontSize', 14)
And as "surf" can only create a 3D surface plot, if you want to visualize more than 3D data, you can use "griddatan" to fit a hypersurface in 3D.
For more information on "griddatan: you can refer this documentation:
Hope it helps.
0 comentarios
Ver también
Categorías
Más información sobre Interpolation 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!