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.
2 ビュー (過去 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
% 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 件のコメント
採用された回答
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
% 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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Interactive Control and Callbacks についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!