実現したいこと
実験データをまとめるために、
ある程度大きな数でも、指数関数の計算を行いたい。
前提
実験データをまとめるために、
指数関数を用いた計算を行なうコードを作成していたところ、
24行目のnp.exp()がオーバーフローしてしまった。
(コード中のデータは、オンライン上で一般に公開されているデータを使用しています。)
- 1本目はオーバーフロー以下のため、計算できた。
- 2本目〜5本目はオーバーフローが発生し、計算できなかった。
2本目〜5本目の計算に耐えうる計算の方法が知りたいです。
発生している問題・エラーメッセージ
RuntimeWarning: overflow encountered in exp denom = np.exp(const_b * const_c * (x ** (-1) - 1)) - 1
python
1import numpy as np 2import matplotlib.pyplot as plt 3 4#x:濃度 5#xの範囲を設定 6x = np.arange(0.01, 0.07, 0.001) 7 8#定数 9#Aτ0=const_a 10#B=const_b 11 12#c:密度 13#c=const_c 14const_c = 2.6 15 16 17#y:τy 18#分子:numer 19#分母:denom 20 21#yを計算する関数を定義 22def stress_y(x, const_a, const_b, const_c): 23 numer = (const_c * (x ** (-1)) + (1 - const_c)) ** (-2) 24 denom = np.exp(const_b * const_c * (x ** (-1) - 1)) - 1 25 y = const_a * (numer / denom) 26 return y 27 28#濃度に応じた値を計算 29#1本目(0.011M) 30const_a1 = 87.83 31const_b1 = 7.03 32 33y1 = stress_y(x, const_a1, const_b1, const_c) 34 35#2本目(0.022M) 36const_a2 = 741.71 37const_b2 = 26.96 38 39y2 = stress_y(x, const_a2, const_b2, const_c) 40 41#3本目(0.033M) 42const_a3 = 3617.37 43const_b3 = 55.46 44 45y3 = stress_y(x, const_a3, const_b3, const_c) 46 47#4本目(0.044M) 48const_a4 = 16338.03 49const_b4 = 88.04 50 51y4 = stress_y(x, const_a4, const_b4, const_c) 52 53#5本目(0.055M) 54const_a5 = 302752.7 55const_b5 = 173.25 56 57y5 = stress_y(x, const_a5, const_b5, const_c)
ソースコード
試したこと
対数関数の使用は思いついたのですが、具体的な実装方法がわかりません。
補足情報(FW/ツールのバージョンなど)
spyderを使用しています。