0

積分 t= \int_{0}^{z} 1/sqrt(2*(0.46732451-z**2)) の上限を解こうとしているため、この関数をプロットすると、次のようにE=0.46732451なります.t=1.07589765z 対 t

その周りt=1は一種の漸近線です。

次のコードがあります

import numpy as np
from scipy import integrate
from scipy.optimize import fsolve

def fg(z_up,t,E):
      def h(z,E):
           return 1/(np.sqrt(2*(E-z**2)))

      b, err = integrate.quad(h, 0, z_up,args=(E)) 
      return b-t 



x0 = 0.1
print fsolve(fg, x0, args=(1.07589765, 0.46732451))[0]

しかし、このコードは、何を入れても推測値を出力するだけなので、曲線がそこに漸近するという事実と関係があると推測しています。tこのコードは、漸近領域から離れた 他の値に対しても機能することに注意してください。

誰でもこれを解決するのを手伝ってもらえますか?

ありがとう

編集しばらく遊んだ後、問題を解決しましたが、それは一種のパッチワークであり、一般的ではない同様の問題に対してのみ機能します(またはそうですか?)

次の変更を加えました:z到達できる最大値は です。そのため、 からの間の任意の場所sqrt(0.46732451)に設定x0=0.5*np.sqrt(0.46732451)して設定すると、正解がポップされます。これについての説明はありません。おそらく、この問題の専門家である誰かが助けてくれますか? factor0.11

4

1 に答える 1