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

 채택된 답변

Walter Roberson
Walter Roberson 2019년 5월 31일

0 개 추천

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

Dereje
Dereje 2019년 5월 31일
Thanks a lot!!
Dereje
Dereje 2019년 5월 31일
@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 2019년 6월 1일
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 2019년 6월 1일
But it returns an error which says, Z must be a matrix, not a scalar or vector.
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');

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

태그

질문:

2019년 5월 31일

댓글:

2019년 6월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by