🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3218閲覧

python ライブラリodeの引数atolについて

NR4200

総合スコア41

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/10/28 01:13

前提・実現したいこと

python ライブラリodeの引数atolの使い方,何のためにいるのかがわかりません

下記プログラムのように
ode.set_integratorの引数atolをatol=1.e-9とすると警告が出ますが,
atol=1.e-2にすると警告は出ません

発生している問題・エラーメッセージ

python

1C:\Users\N\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\integrate\_ode.py:1177: UserWarning: dopri5: larger nsteps is needed 2 self.messages.get(istate, unexpected_istate_msg)))

該当のソースコード

python

1import matplotlib.pyplot as plt 2import scipy.integrate as sp 3import numpy as np 4import random 5 6 7count = 0 8ms = 0.26 9mc = 0.85 10k = 177 11g = 9.8 12m = mc + (1/3)*ms 13 14def d(t): 15 16 if t < 20: 17 return 0 18 elif t >= 20: 19 return 5*np.sin(np.pi*t) 20def μ(x2): 21 if x2==0: 22 return 0.24 23 else: 24 return 0.11 25# SMC制御系 26def f(x1,x2): 27 return -(k/m)*x1-μ(x2)*g*np.sign(x2) 28 29def df(x2,x3): 30 return -(k/m)*x2-μ(x3)*g*np.sign(x3) 31 32def dd(t): 33 if t < 20: 34 return 0 35 elif t >= 20: 36 return 5*np.pi*np.cos(np.pi*t) 37 38 39def system(t, x):#, e_integ): 40 # 戻り値用のリスト 41 y = [0]*4 42 dx3 = x[0] - 0.02*np.sin(t) 43 dx1 = x[1] 44 dx2 = -(k/m)*x[0] -μ(x[1])*g*np.sign(x[1]) - (k/m)*(7* (x[0]-0.02*np.sin(t)) + 0.1*(x[1]-0.02*np.cos(t))+ 30*x[2]) + d(t) 45 dxu = 7*(x[1]-0.02*np.cos(t)) + 0.1*(x[2] + 0.02*np.sin(t)) + 30*(x[0]-0.02*np.sin(t)) 46 # 計算結果を返す 47 y[0] = dx1 48 y[1] = dx2 49 y[2] = dx3 50 y[3] = dxu 51 #y[3] = u 52 53 return y 54 55def simulation(x0, end, step): 56 x1 = [] 57 x2 = [] 58 t = [] 59 u = [] 60 61 ode = sp.ode(system) 62 ode.set_integrator('dopri5', method='bdf', atol=1.e-9) 63 ode.set_initial_value(x0, 0)#.set_f_params(e_integ) 64 t.append(0) 65 x1.append(x0[0]) 66 x2.append(x0[1]) 67 u.append(0) 68 while ode.successful() and ode.t < end - step: 69 ode.integrate(ode.t + step) 70 t.append(ode.t) 71 x1.append(ode.y[0]) 72 x2.append(ode.y[1]) 73 u.append(ode.y[3]) 74 return x1, x2, u, t 75 76# パラメータ 77x0 = [0.0, 0.0, 0.0, 0.0] # 初期値 78end = 40 # シミュレーション時間 79step = 0.01 # 時間の刻み幅 80 81# シミュレーション 82x1, x2, u, t = simulation(x0, end, step) 83

試したこと

pythonのホームページ?で
odeの引数について調べましたがatolについては出てこず,
odeintの方でatolについては出てきました.
以下のように書いていましたが,意味が分かりませんでした.

rtol, atol:float, optional
The input parameters rtol and atol determine the error control performed by the solver. The solver will control the vector, e, of estimated local errors in y, according to an inequality of the form max-norm of (e / ewt) <= 1, where ewt is a vector of positive error weights computed as ewt = rtol * abs(y) + atol. rtol and atol can be either vectors the same length as y or scalars. Defaults to 1.49012e-8.

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ルンゲ=クッタ法を利用した数値計算をしたいように思いますが、私自身は詳しくないので、情報の提示と、推測を記載します。あくまで推測ですので悪しからず。

https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.ode.html
こちらに、atol : float or sequence absolute tolerance for solution

(絶対許容誤差)という記載があります。

https://ja.wikipedia.org/wiki/%E3%83%AB%E3%83%B3%E3%82%B2%EF%BC%9D%E3%82%AF%E3%83%83%E3%82%BF%E6%B3%95

目的の精度 p になる係数を持つためには、十分に大きな段数 s が必要になる。少なくとも次数以上の段数が必要であり、更に5次以上の場合には段数は次数よりも大きく取らなければならないことが知られている

警告メッセージ:larger nsteps is needed から収束するのに多くのステップが必要となっていて、上記atolが0に近ければ近いほど高精度隣、段数が多く必要と言いたいのではないでしょうか。
nstepsというパラメータもあるので、それも合わせて調整する必要があるのかもしれません。

投稿2019/10/28 04:19

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問