I need to run a surface diagram for variables using any 2 parameters. The following is the code for 2D plots. Please help me to run surf plot in MATLAB.
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Error that appear when run the code:
Error in proj (line 20)
surf(a_vec,t,squeeze(X(:,1,:))) ;
Code below:
options = odeset('RelTol',1e-6,'Stats','on');
%initial conditions
Xo = [0.5;0.7;2];
% Choose parameters t and a?
tspan =linspace(0,100);
a_vec = 0.01:0.005:0.03;
for idx = 1:numel(a_vec)
% Collect all X values into a 3D matrix. Additional parameters to
% TestFunction can be added after ode45 options
[t,X(:,:,idx)] = ode45(@TestFunction,tspan,Xo,options,a_vec(idx));
end
% figure
% plot(t, X(:,1), 'red')
% hold on % keeps all three plots on the axes
% plot(t, X(:,2), 'blue')
% plot(t, X(:,3), 'red')
figure
surf(a_vec,t,squeeze(X(:,1,:))) ;
% Squeeze removes dimensions of size 1, turning this slice into a 2d matrix
function [dx_dt]= TestFunction(~,x,a)
r=0.05; k=0.1; %a=0.02;
m=0.02; b=0.2; eta=0.06; h=1;
dx_dt(1)=r.*x(1).*(1-(x(1)./k))-a.*x(1).*x(3)+x(3).*eta;
dx_dt(2)=a.*x(1).*x(3)-m.*x(2)-b.*x(2)+h.*eta;
dx_dt(3)=b.*x(2)-eta.*x(3)-r.*x(1);
dx_dt = dx_dt';
end
0 comentarios
Respuesta aceptada
Karim
el 20 de Dic. de 2022
Hi see below for some comments in the code on how to set the dimmensions to call the surf command.
options = odeset('RelTol',1e-6,'Stats','on');
% initial conditions
Xo = [0.5; 0.7; 2];
% choose parameters t and a
tspan = linspace(0,100);
a_vec = 0.01 : 0.005 : 0.03;
% ease the coding and readability
num_t = numel(tspan);
num_a = numel(a_vec);
num_x = numel(Xo);
% allocate output
X = zeros(num_t,num_x,num_a);
for idx = 1:num_a
% Collect all X values into a 3D matrix. Additional parameters to
% TestFunction can be added after ode45 options
[t,X(:,:,idx)] = ode45(@TestFunction,tspan,Xo,options,a_vec(idx));
end
% make sure we have the proper dimmensions before calling surf
plot_t = repmat(t,1,num_a);
plot_a = repmat(a_vec,num_t,1);
plot_x = squeeze(X(:,1,:));
% create the surf plot
figure
surf(plot_t,plot_a,plot_x)
xlabel('t values')
ylabel('a values')
zlabel('x values')
grid on
function [dx_dt]= TestFunction(~,x,a)
r=0.05; k=0.1; %a=0.02;
m=0.02; b=0.2; eta=0.06; h=1;
dx_dt(1)=r.*x(1).*(1-(x(1)./k))-a.*x(1).*x(3)+x(3).*eta;
dx_dt(2)=a.*x(1).*x(3)-m.*x(2)-b.*x(2)+h.*eta;
dx_dt(3)=b.*x(2)-eta.*x(3)-r.*x(1);
dx_dt = dx_dt';
end
4 comentarios
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!