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 の値を呼び出すことだと思います。not callable または float64 エラーが発生する傾向があり、アドバイスを期待していました。

4

1 に答える 1