[解決済み】IndexError:サイズ1/ForwardEulerの軸0に対してインデックス1が境界外である
2022-01-16 03:58:10
質問
一階微分方程式系でx(t)を数値的に解いています。その方程式は
dy/dt=(C)\*[(-K\*x)+M*A]
この問題を解くために、私は次のようにForward Euler法を実装しました。 以下は私のコードです。
import matplotlib
import numpy as np
from numpy import *
from numpy import linspace
from matplotlib import pyplot as plt
C=3
K=5
M=2
A=5
#------------------------------------------------------------------------------
def euler (f,x0,t):
n=len (t)
x=np.array ([x0*n])
for i in xrange (n-1):
x[i+1] = x[i] + ( t[i+1] - t[i] ) * f( x[i], t[i] )
return x
#---------------------------------------------------------------------------------
if __name__=="__main__":
from pylab import *
def f(x,t):
return (C)*[(-K*x)+M*A]
a,b=(0.0,10.0)
n=200
x0=-1.0
t=linspace (a,b,n)
#numerical solutions
x_euler=euler(f,x0,t)
#compute true solution values in equal spaced and unequally spaced cases
x=-C*K
#figure
plt.plot (t,x_euler, "b")
xlabel ()
ylabel ()
legend ("Euler")
show()
`
M=2
A=5
#----------------------------------------------------------------------------
def euler (f,x0,t):
n=len (t)
x=np.array ([x0*n])
for i in xrange (n-1):
x[i+1] = x[i] + ( t[i+1] - t[i] ) * f( x[i], t[i] )
return x
#---------------------------------------------------------------------------
if __name__=="__main__":
from pylab import *
def f(x,t):
return (C)*[(-K*x)+M*A]
a,b=(0.0,10.0)
n=200
x0=-1.0
t=linspace (a,b,n)
#numerical solutions
x_euler=euler(f,x0,t)
#compute true solution values in equal spaced and unequally spaced cases
x=-C*K
#figure
plt.plot (t,x_euler, "b")
xlabel ()
ylabel ()
legend ("Euler")
show()
以下のようなTracebackが発生します。
Traceback (most recent call last):
File "C:/Python27/testeuler.py", line 50, in <module>
x_euler=euler(f,x0,t)
File "C:/Python27/testeuler.py", line 28, in euler
x[i+1] = x[i] + ( t[i+1] - t[i] ) * f( x[i], t[i] )
IndexError: index 1 is out of bounds for axis 0 with size 1
私はおそらく間違っているのか理解できません。私はすでに解決された問題の後に調べたが、それは一緒に私を助けることはありません。 私はオリエンテーションとして、次のコードを使用しています。 def euler( f, x0, t ):
n = len( t )
x = numpy.array( [x0] * n )
for i in xrange( n - 1 ):
x[i+1] = x[i] + ( t[i+1] - t[i] ) * f( x[i], t[i] )
return x
if __name__ == "__main__":
from pylab import *
def f( x, t ):
return x * numpy.sin( t )
a, b = ( 0.0, 10.0 )
x0 = -1.0
n = 51
t = numpy.linspace( a, b, n )
x_euler = euler( f, x0, t )
私の目標は、関数をプロットすることです。
どのように解決するのですか?
問題は、トレースバックにあるように、次の行にあります。
x[i+1] = x[i] + ( t[i+1] - t[i] ) * f( x[i], t[i] )
. そのコンテキストで置き換えてみましょう。
- x は [x0 * n] に等しい配列なので、その長さは 1 です。
-
は0からn-2(nはここでは関係ない)までの繰り返しで、iはインデックスです。最初のうちは何も問題ないのですが(ここではどうやら始まりはないようです... :( ))、やがて
i + 1 >= len(x)
<=>i >= 0
の場合は、要素x[i+1]
は存在しない。ここでは、forループの先頭からこの要素が存在しない。
これを解決するためには
x[i+1] = x[i] + ( t[i+1] - t[i] ) * f( x[i], t[i] )
で
x.append(x[i] + ( t[i+1] - t[i] ) * f( x[i], t[i] ))
.
関連
-
Python Pillow Image.save jpg画像圧縮問題
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】IndexError: Index 10 is out of bounds for axis 0 with size 10
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] Pythonで一定の大きさの空リストを作成する
-
[解決済み] pandas DataFrameの特定のセルに対して、インデックスを使用して値を設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python百行で韓服サークルの画像クロールを実現する
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない