【问题标题】:Q on plotting function against t and trajectory in phase space(matlab)Q关于在相空间中针对t和轨迹绘制函数(matlab)
【发布时间】:2016-02-17 12:22:51
【问题描述】:

我是 matlab 的初学者,并尝试解决这个问题。但到目前为止,它还没有成功。我花了很长时间,我想我需要一些帮助。我会很感激任何帮助!!!

我需要绘制 v 与 v 和 w 在相空间中的时间和轨迹。整个问题在下面,我与这个问题相关的上一个问题的代码也在下面。我可以将 subplot(2,1,1) 用于第一个图形,将 subplot(2,1,2) 用于下一个图形。但我不确定除此之外我还需要做什么。我找到了 ode45 命令。但不确定如何使用它,以及它是否适合在这里使用。我曾尝试使用 ode45。但它显示了许多我不明白的错误.....请帮助我。非常感谢!

'使用子图创建一个包含两个图形的图形。在第一张图中,绘制膜电位 v(t) 对时间 t 的时间演变。在第二张图中,在(所谓的)相空间中绘制相应的轨迹(v(t);w(t))。'

% my code is below.
a=0.08;
b=3.6;
c=0.7;
T=2; % this can be any number
I_ext=20; % this can be any number
dt=0.01; % this can be any number

function [ v,w ] = fhnn( a,b,c,I_ext,T,dt)
v=zeros(1,numel(T/dt));
w=zeros(1,numel(T/dt));
for n=1:numel(T/dt)
v(n+1)=(v(n)-v(n)^3/3-w(n)+I_ext)*dt+v(n);
w(n+1)=a*(v(n)-b*w(n)+c)*dt+w(n);
end

【问题讨论】:

  • 函数fhnn那里没有end语句(会导致错误),也没有使用...可以去掉吗?

标签: matlab plot


【解决方案1】:

我猜你有一个微分方程,并试图直接绘制它。如果可能的话,您可能会发现更好的方法是实际求解方程。

不管怎样,认识到:

  • numel 返回数组的长度,dT/dt 始终是标量,因此长度始终为 1。
  • fhnn 此处未使用。
  • 你仍然需要一个向量t

如果您的 for 循环中的内容是正确的,则以下内容应该有效:

a=0.08; b=3.6; c=0.7; T=2; I_ext=20; dt=0.01;

t = 0:dt:T;
v = zeros(1,round(T/dt));
w = zeros(1,round(T/dt));
for n=1:round(T/dt)-1
    v(n+1)=(v(n)-v(n)^3/3-w(n)+I_ext)*dt+v(n);
    w(n+1)=a*(v(n)-b*w(n)+c)*dt+w(n);
end

subplot(2,1,1)
plot(t,v)
xlabel('t')
ylabel('v')

subplot(2,1,2)
plot(v,w)
xlabel('v')
ylabel('w')

【讨论】:

  • 感谢您的及时回复和指正。不过,我有一个问题。为什么从 2 开始 for 循环?每当我使用欧拉或中点规则进行积分时,我都会对 for 循环的这个数字感到困惑。再次感谢!这很有帮助。
  • 啊,我的错。当我做这种事情时,我通常会做 v(n) = f(v(n-1)) - 为了避免引用 v(0) 我从 2 循环到数组的末尾。在你的情况下,你正在做v(n+1) = f(v(n)),所以你必须从 1 开始,但在数组结束之前停止一个。我已经修改了代码以反映这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多