Python:迭代odeint解决方案数组以查找波形中的最大值和最小值

时间:2013-10-10 01:13:32

标签: python arrays

我还是相对较新的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错误,并希望得到一些建议。

1 个答案:

答案 0 :(得分: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]...

希望这有帮助。