Surface Plot for ODE solution

6 views (last 30 days)
Folke Voß
Folke Voß on 22 Apr 2019
Commented: Star Strider on 7 Dec 2022
How can I make a surface plot for the ODE solution for different constants z?
w = 1;
k=1;
figure
tspan = [0 5];
for z=0.1:0.01:0.5
f = @(t,x) [-1i.*(2*w + 2*z).*x(1) + -1i.*sqrt(2).*k.*x(2);-1i.*sqrt(2).*k.*x(1) + -1i.*2*w*x(2)+-1i.*sqrt(2).*k.*x(3);-1i.*sqrt(2).*k.*x(2)+-1i.*2*w*x(3)];
[t,xa] = ode45(f,tspan,[0 1 0]);
gs = abs(xa).^2;
surf(t,z,gs(:,2))
end
  2 Comments
T K
T K on 7 Dec 2022
Please, when I run this code, this problem appears.
Error in Untitled7 (line 15)
surf(t,zv,gs2')
Star Strider
Star Strider on 7 Dec 2022
@T K — Check to see if you have a variable or user function called ‘surf’ by running this from a script or your Command Window —
which surf -all
/MATLAB/toolbox/matlab/graph3d/surf.m
It should give only this result. If it returns anything else, that points to the problem. The solution is to rename the other function or variable.
.

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 22 Apr 2019
You need to make a few changes in your code:
w = 1;
k=1;
figure
tspan = linspace(0, 5); % Create Constant ‘tspan’
zv=0.1:0.01:0.5; % Vector Of ‘z’ Values
gs2 = zeros(numel(tspan), numel(zv)); % Preallocate
for k = 1:numel(zv)
z = zv(k);
f = @(t,x) [-1i.*(2*w + 2*z).*x(1) + -1i.*sqrt(2).*k.*x(2);-1i.*sqrt(2).*k.*x(1) + -1i.*2*w*x(2)+-1i.*sqrt(2).*k.*x(3);-1i.*sqrt(2).*k.*x(2)+-1i.*2*w*x(3)];
[t,xa] = ode45(f,tspan,[0 1 0]);
gs = abs(xa).^2;
gs2(:,k) = gs(:,2); % Save Second Column Of ‘gs’ In ‘gs2’ Matrix
end
figure
surf(t,zv,gs2')
grid on
xlabel('t')
ylabel('z')
shading('interp')
Experiment to get the result you want.
  2 Comments
Folke Voß
Folke Voß on 22 Apr 2019
Thank you a lot Star Strider.
The code is working the way I wanted to.
Star Strider
Star Strider on 22 Apr 2019
As always, my pleasure.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!