I need help on how to plot the following 2D plot in to a 3D plot.
zspan=[0,400];
v0mat = [1 0.01 1];
zsol = {};
v1sol = {};
v2sol = {};
v3sol = {};
for k=1:size(v0mat,1)
v0=v0mat(k,:);
[z,v]=ode45(@rhs,zspan,v0);
zsol{k}=z;
v1sol{k}=v(:,1);
v2sol{k}=v(:,2);
v3sol{k}=v(:,3);
end
for k=1:size(v0mat,1)
figure(1)
plot(v2sol{k},zsol{k},'g')
hold on
xlabel('Velocity,w')
ylabel('Height, z')
grid on
end
function parameters=rhs(z,v)
alpha=0.116;
db= 2*alpha-(v(1).*v(3))./(2*v(2).^2);
dw= (v(3)./v(2))-(2*alpha*v(2)./v(1));
dgmark= -(2*alpha*v(3)./v(1));
parameters=[db;dw;dgmark];
end

 Respuesta aceptada

Walter Roberson
Walter Roberson el 31 de Mayo de 2019

0 votos

It wasn't clear what you wanted the z to be, so I guessed that it was the initial dw, which presumably later you will vary.
zspan = linspace(0,400,50);
v0mat = [1 0.01 1];
N = size(v0mat, 1);
zsol = cell(N,1);
v1sol = cell(N,1);
v2sol = cell(N,1);
v3sol = cell(N,1);
v2in = cell(N,1);
for k=1:size(v0mat,1)
v0 = v0mat(k,:);
[z,v] = ode45(@rhs,zspan,v0);
zsol{k} = z;
v1sol{k} = v(:,1);
v2sol{k} = v(:,2);
v3sol{k} = v(:,3);
v2in{k} = v0mat(2) * ones(size(v2sol{k}));
end
all_z = [zsol{:}];
all_v2 = [v2sol{:}];
all_v2in = [v2in{:}];
plot3(all_v2, all_z, all_v2in);
xlabel('Velocity,w')
ylabel('Height, z')
zlabel('initial dw')

5 comentarios

Dereje
Dereje el 31 de Mayo de 2019
Thanks a lot!!
Dereje
Dereje el 31 de Mayo de 2019
@Walter How can I convert the inputs into matrix so that I can do Surf plot. As it is,
surf (all_v2, all_z, all_v2in) couldn't work.
Walter Roberson
Walter Roberson el 1 de Jun. de 2019
What problem do you observe with the above surf() call? It appears to me to work.
Note that initial velocities (all_v2in) are inputs, and height (all_z) are inputs, and that your ode output is in all_v2, so you would normally have all_v2 in the third ("z") dependent-variable position.
Dereje
Dereje el 1 de Jun. de 2019
But it returns an error which says, Z must be a matrix, not a scalar or vector.
Walter Roberson
Walter Roberson el 1 de Jun. de 2019
This is because you only have one row in v0mat so what should be 2D arrays are coming out as vectors.
Also, all of the interesting height (z_span) is between 0 and 2, and going up to 400 is losing all of the important information.
zspan = linspace(0,2,50);
v2in_vals = linspace(0.01,0.05,10);
v0mat = [1 0.01 1];
N = size(v0mat, 1);
zsol = cell(N,1);
v1sol = cell(N,1);
v2sol = cell(N,1);
v3sol = cell(N,1);
v2in = cell(N,1);
for k=1:length(v2in_vals)
v0 = v0mat;
v0(2) = v2in_vals(k);
[z,v] = ode45(@rhs,zspan,v0);
zsol{k} = z;
v1sol{k} = v(:,1);
v2sol{k} = v(:,2);
v3sol{k} = v(:,3);
v2in{k} = v0mat(2) * ones(size(v2sol{k}));
end
all_z = [zsol{:}];
all_v2 = [v2sol{:}];
all_v2in = [v2in{:}];
subplot(1,2,1);
plot3(all_v2, all_z, all_v2in);
xlabel('Velocity,w')
ylabel('Height, z')
zlabel('initial dw')
subplot(1,2,2)
v2in_vec = v2in_vals;
z_vec = all_v2(:,1);
surf(z_vec, v2in_vec, all_v2.')
xlabel('Height, z');
ylabel('initial dw');
zlabel('Velocity,w');

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Preguntada:

el 31 de Mayo de 2019

Comentada:

el 1 de Jun. de 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by