ブログ

割とコンピュータよりの情報をお届けします。

2019年4月6日

熱電対の温度と電圧の変換式を作る

JIS C1602 熱電対 に熱起電力の多項式近似が載っているのでそれをもとに温度-起電力の変換式を用意した.

Pythonで書いてみた.
(数値の一部桁はわざと変えてある.可能性がある)細かい数値はJISを参照していただくとして,...
変換関数自体は問題ないのだが,逆関数は載っていない.
一応 数値最適化を用いて逆関数を作ってみた.
中に,numpyを入れたのはまずかったかもしれない.

import numpy as np
import scipy as scipy
from scipy.optimize import fmin

def GetK_Type_T2E(t):
    return -17.600413686 + 38.921204975 * t + 0.018558770032 * t ** 2 \
        + -0.000099457592874 * t ** 3  + 0.00000031840945719 * t ** 4 \
        + -5.6072844889E-10 * t ** 5 + 5.6075059059E-13 * t ** 6 \
        + -3.2020720003E-16 * t ** 7 + 9.7151147152E-20 * t ** 8 \
        + -1.2104721275E-23 * t ** 9 \
        + 118.5976 * np.exp(-0.0001183432 * (t - 126.9686) ** 2);

def f(t, *args):
    return np.abs(GetK_Type_T2E(t) - args[0])

def GetK_Type_E2T(e):
    t = e / 38.921204975;
    res  = scipy.optimize.minimize_scalar(f, bracket=None, bounds=(t - 0.7, t + 0.7), args=(e), method='brent', tol=1e-10);
    #print(res)
    return res.x;

if __name__ == '__main__':

    t = 20
    e = GetK_Type_T2E(t);
    print(t)
    e0 = GetK_Type_T2E(20)
    print(e0)
    t0 = GetK_Type_E2T(e0)
    print(t0)

このやり方だと逆関数の計算が順方向の数十倍負荷がかかってしまう. もっと時間がかかるが,以下のようにした方がずれが小さくなる(かも).

res  = scipy.optimize.minimize_scalar(f, bracket=None, bounds=(t - 0.7, t + 0.7), args=(e), method='golden', options={'xtol': 1e-15});

≫ 続きを読む

2019/04/06 コンピュータ   TakeMe
タグ:Python