我还是相对较新的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错误,并希望得到一些建议。
答案 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]...
希望这有帮助。