0

我对 Python 还比较陌生,我一直在尝试遍历从 odeint 获得的解决方案数组,但无济于事。我尝试了许多不同的事情,无论我采取哪种方式,都会遇到很多错误。odeint 结果是一个波形,我试图找到所有最大和最小电压来计算中点等。我在 Matlab 中有这个工作并发布了代码,这样你就可以看到我的目标是什么:

for i = 1:length(t)-2
  if Y((i+1),1) > Y(i,1) && Y((i+1),1)>Y((i+2),1)
    max = [max ,[t(i+1); Y((i+1),1)]];
  end

  if Y((i+1),1) < Y(i,1) && Y((i+1),1)< Y((i+2),1)
    min = [min, [t(i+1); Y((i+1),1)]];
  end
end

%remove any max not followed by min & mins not following a max for mdpt calc
if max(1,1)>min(1,1)
  min(:,1) = [];
elseif min(1,end)<max(1,end)
  max(:,end) = [];
end

midpt = [((max(1,:)+(min(1,:)))/2);(((max(2,:))+(min(2,:)))/2)];

如果这段代码不好,我深表歉意,我还是编程新手,并且不经常以正确的方式处理事情。这是一段python代码,因此您可以看到我需要循环的内容:

t = linspace(0,3500,350000)
y_init = [-50, -50, 0.027, 0.891, 0.033, 0.051, 0.499,
       0.019, 0.043, 0.031, 0.000, 0.062, 0.22, 
       0.008069, 0.560552, 0.045224, 1.060]

sol = odeint(dy_dt, y_init, t)
S0 = sol[:, 0]

我需要像在 matlab 代码中一样在此处循环 S0。我认为我的主要问题是索引数组以便我调用 S0 的值。我倾向于得到一个不可调用或 float64 错误,并希望得到一些建议。

4

1 回答 1

0

要迭代 S0 中的值,您只需要这样做......

for val in S0:
   do something with val...

您无需像在 MATLAB 中那样担心索引,因为您可以在 python 中迭代对象。在 python 中实现的类似 MATLAB 的方式看起来像这样......

for i in range(0,len(S0))
   do something with S0[i]...

希望这可以帮助。

于 2013-10-10T01:49:01.097 回答