matlab - 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
解决方案
你的代码需要一些清理
- 删除全局变量,
- 在使用它们之前定义变量,
- 将正确的参数传递给 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
产生
推荐阅读
- java - 关于为什么使用 jsp:include 标记将对象传递到另一个 jsp 的任何原因在这种情况下不起作用?
- wpf - 在 MaterialDesignInXAML 中更改文本框的颜色
- python - 对数正态分布的均值和标准差与分析值不匹配
- c# - 使用 RestSharp 和 Xamarin 上传文件
- asp.net-mvc - 如何使用 ASP.Net MVC 4.5 创建多登录用户
- r - 使用 dplyr 时,我应该在哪一步将数据发送到 data.table() 以获得最佳性能?
- angular - 使用 Angular 6 的异步 API 请求
- google-api - Google Search Console - 获取属性集名称
- c# - 在 line player.PlaySync() 中出现错误
- javascript - Node.js 在不打印换行符的情况下获取用户输入