実現したいこと
Pythonでの積分について、integrate.quadを用いて-π/2からπ/2の範囲での積分をしたい
発生している問題・エラーメッセージ
●RuntimeWarning: invalid value encountered in double_scalars
y_in = lambda phi: np.sin(phi)/(phi*(delta_in+Do*(1-np.cos(phi))))
●IntegrationWarning: The occurrence of roundoff error is detected, which prevents
the requested tolerance from being achieved. The error may be
underestimated.
integ_in = integrate.quad(y_in, (-1/2)*np.pi, (1/2)*np.pi)
●RuntimeWarning: invalid value encountered in double_scalars
y_out = lambda phi: np.sin(phi)/(phi*(delta_out+Do*(1-np.cos(phi))))
●IntegrationWarning: The occurrence of roundoff error is detected, which prevents
the requested tolerance from being achieved. The error may be
underestimated.
integ_out = integrate.quad(y_out, (-1/2)*np.pi, (1/2)*np.pi)
該当のソースコード
Python
1import numpy as np 2from scipy import integrate 3 4# 変数を定義 5delta_in = 0.15E-3 6delta_out = 1.00E-3 7delta_tc = 0.6E-3 8Do = 1.03E-3 9Di = 1.00E-3 10eps_0 = 8.854187E-12 11eps_r = 4.0 12h_core = 12.3E-3 13dia_in_core = 17.6E-3 14dia_out_core = 32.8E-3 15 16r_in = (dia_in_core/2) - delta_tc - Do/2 17r_out = (dia_out_core/2) + delta_tc + Do/2 18 19 20# 積分1 21y_in = lambda phi: np.sin(phi)/(phi*(delta_in+Do*(1-np.cos(phi)))) 22y_out = lambda phi: np.sin(phi)/(phi*(delta_out+Do*(1-np.cos(phi)))) 23integ_in = integrate.quad(y_in, (-1/2)*np.pi, (1/2)*np.pi) 24integ_out = integrate.quad(y_out, (-1/2)*np.pi, (1/2)*np.pi) 25 26L_T_in = h_core + delta_tc + Do 27L_T_out = L_T_in 28L_T = h_core*2+ (dia_out_core-dia_in_core) + Do 29 30 31 32C_tt_air_in = (Do/2.0)*eps_0*L_T_in * integ_in[0] 33C_tt_air_out = (Do/2.0)*eps_0*L_T_out * integ_out[0] 34 35 36 37# 積分2 38f = lambda phi, r: np.sin(phi)/(phi*( ((delta_out-delta_in)/(r_out-r_in))*(r-r_in + delta_in + Do*(1-np.cos(phi))))) 39val, err = integrate.dblquad(f, r_in, r_out, lambda phi: (-1/2)*np.pi, lambda phi: (1/2)*np.pi) 40 41C_tt_air_l = (Do/2.0)*eps_0 * val 42print("C_tt_air_l", C_tt_air_l) 43 44C_tt_ins = (np.pi*eps_0*eps_r*L_T)/(2*np.log(Do/Di)) 45print("C_tt_ins", C_tt_ins) 46 47C_tt_in = (C_tt_ins*C_tt_air_in)/(C_tt_ins+C_tt_air_in) 48C_tt_out = (C_tt_ins*C_tt_air_out)/(C_tt_ins + C_tt_air_out) 49C_tt_l = (C_tt_ins*C_tt_air_l)/(C_tt_ins + C_tt_air_l) 50 51C_tt = C_tt_in + C_tt_out + 2*C_tt_l
試したこと
積分範囲を、0からnp.pi、(-1/2)*np.piから0などにすると積分できましたが、
(-1/2)*np.piから(1/2)*np.piに関しては上記のようなエラーが出ます。
補足情報(FW/ツールのバージョンなど)
コードを全文掲載しました。
コード中の式は、工学系論文の式を引用しています。
引用した論文では、最終的にC_ttの値は、上記の変数の時におよそ1.124E-12の結果となるようです。
回答1件
あなたの回答
tips
プレビュー