簡體   English   中英

Matlab 中無法識別的函數或變量

[英]Unrecognized function or variable in 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

產生

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM