MATLAB: Surface Plot for ODE solution

ode45plotsurface

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

Best Answer

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.