前提
Windows10でjupyter notebookを用いてpythonコードを書いております。
あるアルゴリズムで関数自体の更新を行いたいと考えております。Pythonで自作関数をwhile分の中で更新することができるのか、分からなかったので、簡単なサンプルとして以下を実装してみたところ、下記のエラーメッセージが発生しました。
実現したいこと
閉区間[0,1]上で定義された関数u(t)を、最初はu(t)=tとして定義。カウンタ値iを設けて、
i=0からi=2まで、インクリメントしながら、以下の処理を行いたい。
・関数u(t)を区間[0,1]上で積分。値が0.1より大きければ、u(t)+iをu(t)として更新する。たとえば、i=1になり、t+1を積分して、0.1より大きいので、i=2になり、t+2を積分して、終了。を想定しておりました。。
下記の様に途中まで出力されたのち、エラーになります。
発生している問題・エラーメッセージ
0
0.5
1
RecursionError Traceback (most recent call last) <ipython-input-9-f1fe0979293d> in <module> 8 print(i) 9 i=i+1 ---> 10 integ = integrate.quad(u, 0, 1) 11 print(integ[0]) 12 if integ[0]>0.1: ~\Miniconda3\envs\sample\lib\site-packages\scipy\integrate\quadpack.py in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points, weight, wvar, wopts, maxp1, limlst) 349 350 if weight is None: --> 351 retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit, 352 points) 353 else: ~\Miniconda3\envs\sample\lib\site-packages\scipy\integrate\quadpack.py in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points) 461 if points is None: 462 if infbounds == 0: --> 463 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit) 464 else: 465 return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit) <ipython-input-9-f1fe0979293d> in u(t) 12 if integ[0]>0.1: 13 def u(t): ---> 14 ans= u(t)+i 15 return ans ... last 1 frames repeated, from the frame below ... <ipython-input-9-f1fe0979293d> in u(t) 12 if integ[0]>0.1: 13 def u(t): ---> 14 ans= u(t)+i 15 return ans RecursionError: maximum recursion depth exceeded
該当のソースコード
python3.7
1from scipy import integrate 2i=0 3 4def u(t): 5 return t 6 7while i<3: 8 print(i) 9 i=i+1 10 integ = integrate.quad(u, 0, 1) 11 print(integ[0]) 12 if integ[0]>0.1: 13 def u(t): 14 ans= u(t)+i 15 return ans
不明点
Pythonで自作関数を再帰的に更新すること自体がよくないのでしょうか、、?ご教示頂けますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。