首页 > 解决方案 > Matlab中无法识别的函数或变量

问题描述

我正在尝试绘制一阶微分方程系统的三维相图,但我收到一条错误消息,提示我有一个无法识别的变量 eta。除了三维相位图,我还想在同一张图上绘制 x(1) 与 t、x(2) 与 t 以及 x(3) 与 t。我已经注释掉了这个 plot 命令,因为我确定我错了。因此,我希望在同一张图上绘制 (i) 3D 相图和 (ii) x(1)、x(2) 和 x(3) 的时间图。此外,您在 ode45 的参数中看到的 [-0.015,0.015]、[-2,2]、[-4,4] 是 x(1)、x(2) 和 x(3 )。我什至不确定是否应该将轴限制放在那里。有人可以帮忙吗?谢谢你。

[t,x] = ode45(@eqx3, eta, omega, [-0.015,0.015], [-2,2], [-4,4], initcond);
global eta omega
eta = 0.05;
omega = 25;
%tspan = [0,50]
initcond = [1, 0.5, -0.4]


%subplot(211)
%plot(t, x(:,1), t,x(:,2),'--',x(:,3),'--');
%xlabel('t')

subplot(212)
plot(x(:,1), x(:,2), x(:,3))
xlabel('x1')
ylabel('x2')
zlabel('x3')

function xdot = eqx3(t,x,eta,omega)
  global eta omega
  xdot = zeros(3,1);
  xdot(1) = -(2*eta*omega + 1)*x(1) + x(2) - 1;
  xdot(2) = -(2*eta*omega + (omega^2))*x(1) + x(3) + 2;
  xdot(3) = -(omega^2)*x(1) + x(2) - 1;
  %xdot =[xdot(1);xdot(2);xdot(3)];
end

标签: matlab

解决方案


你的代码需要一些清理

  • 删除全局变量,
  • 在使用它们之前定义变量,
  • 将正确的参数传递给 ODE 方程。
  • 使用匿名函数@(t,x) eqx3(t,x,eta, omega)将 ODE 参数与函数打包,
  • 用于plot3相位图的 3D 绘图。

这是我想出的结果:

eta = 0.05;
omega = 25;
tspan = [0,50];
initcond = [1, 0.5, -0.4]
[t,x] = ode45(@(t,x) eqx3(t,x,eta, omega), tspan, initcond);

plot3(x(:,1), x(:,2), x(:,3))
xlabel('x1')
ylabel('x2')
zlabel('x3')

function xdot = eqx3(t,x,eta,omega)
  xdot = zeros(3,1);
  xdot(1) = -(2*eta*omega + 1)*x(1) + x(2) - 1;
  xdot(2) = -(2*eta*omega + (omega^2))*x(1) + x(3) + 2;
  xdot(3) = -(omega^2)*x(1) + x(2) - 1;
end

产生

在此处输入图像描述


推荐阅读