質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.39%
Python 3.x

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

Q&A

解決済

2回答

589閲覧

PythonのWhile文中で自作関数を更新したい

_hh

総合スコア79

Python 3.x

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

0グッド

0クリップ

投稿2022/08/24 21:15

前提

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で自作関数を再帰的に更新すること自体がよくないのでしょうか、、?ご教示頂けますと幸いです。

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

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

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

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

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

guest

回答2

0

def u(t): ans= u(t)+i return ans

これはなにをしたいんでしょうか。
無限ループになってしまって、ここから戻りません。
そして、スタック食いつぶしてエラーになります

投稿2022/08/24 23:16

y_waiwai

総合スコア87973

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

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

0

ベストアンサー

python

1from scipy import integrate 2 3 4def g(i): 5 def u(t): 6 return t+i 7 return u 8 9i=0 10j=0 11while j<3: 12 print(j) 13 j=j+1 14 integ = integrate.quad(g(i), 0, 1) 15 print(integ[0]) 16 if integ[0]>0.1: 17 i = j

投稿2022/08/24 23:55

ozwk

総合スコア13551

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問