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.

3 次查看(过去 30 天)
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
34 successful steps 0 failed attempts 205 function evaluations 34 successful steps 0 failed attempts 205 function evaluations 34 successful steps 0 failed attempts 205 function evaluations 34 successful steps 0 failed attempts 205 function evaluations 34 successful steps 0 failed attempts 205 function evaluations
% 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

采纳的回答

Karim
Karim 2022-12-20
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
34 successful steps 0 failed attempts 205 function evaluations 34 successful steps 0 failed attempts 205 function evaluations 34 successful steps 0 failed attempts 205 function evaluations 34 successful steps 0 failed attempts 205 function evaluations 34 successful steps 0 failed attempts 205 function evaluations
% 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 个评论
Karim
Karim 2022-12-22
移动:Voss 2022-12-28
you are welcome, if it works you can consider to accept my answer so that it might help other people as well.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by