我对 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 错误,并希望得到一些建议。