ダイオードI-V特性測定器作成:3-3. PC側ソフト設計 – Pythonで最小二乗法の指数関数近似

2025年8月31日

Google Ad

本記事の主旨

ダイオードI-V特性測定器(カーブトレーサ)作成のPC側ソフト上におけるPythonでの最小二乗法の指数関数近似について記す。

本記事の目的

本記事の目的を以下に記す。

  • Pythonでの最小二乗法の指数関数近似のソースについての解説を記すこと

本記事の背景

ダイオードI-V特性測定器(カーブトレーサ)作成の中でPC側ソフトを作成したため、本記事でその部分的な解説をする。

本記事の位置づけ

以下の流れで作業説明と解説を行った。

記事に対応したリンクを添付した。

概要説明:ダイオードI-V特性測定器作成:0. 概要 | 工事中.com

  1. 取扱説明
  2. 回路設計
    1. ダイオードのI-V特性を手作業で確認
    2. 回路の実装
      1. 回路の実装(PWM平滑化)
      2. 回路の実装(PWM平滑化以外)
  3. PC側ソフト設計
    1. pySerialでUSBシリアル通信
    2. Matplotlibでのグラフ表示
    3. Pythonで最小二乗法の指数関数近似★現在のページ
    4. openpyxlでグラフ描画と最小二乗法の指数関数近似
  4. マイコン側ソフト設計
    1. Arduino Uno Rev3 / R4 Minima
    2. Raspberry Pi Pico / Pico 2
  5. 実験
    1. 1N4148の測定でマイコンとソースの組み合わせを比較
    2. 種々のダイオードを測定
    3. 種々の高精度ゲルマニウムダイオードを測定
  6. まとめと補足

理論

最小二乗法により指数関数近似ができることを示す。

指数関数近似した近似曲線が\(y = ae^{bx}\)であるとする。

これを変形すると、

\[\frac{y}{a} = e^{bx}\]

両辺対数をとると、

\[\log{\frac{y}{a}} = bx\]

両辺を入れ替えると、

\[bx = \log{\frac{y}{a}}\]

\[bx = \log{y} - \log{a}\]

ここで、\(x = X\)、\(\log{y} = Y\)とすると、

\[bX = Y - \log{a}\]

\[Y = bX + \log{a}\]

このとき、\(x\)と\(y\)をそれぞれ\(X\)と\(Y\)に変換して最小二乗法を使うことにより、\(b\)と\(\log{a}\)が求まる。

したがって、\(a\)と\(b\)が求まり、指数関数近似した近似曲線も求まる。

コードの全体

今回解説するコードの全体は、以下にアップロードした。

calc.py

計算用ソースファイル。

data.py

データクラス用ソースファイル。

コードの解説

最小二乗法の指数関数近似

以下のCalcIVExpRegFuncクラス内で実装した。

近似前処理

\(x\)を\(X\)に変換するのはそのままでよいが、\(y\)と\(Y\)に変換するためにNumpyのnumpy.log()関数で対数をとる。

tmp_xとtmp_yは、後述するscikit-learnのsklearn.linear_model.LinearRegression().fit()関数で使える形にする。

        tmp_y = np.log(tmp_y)   # 対数をとる
        tmp_x = [[num] for num in tmp_x]
        tmp_y = [[num] for num in tmp_y]

最小二乗法での近似

scikit-learnのsklearn.linear_model.LinearRegression().fit()関数で、最小二乗法を使用して線形近似する。

        reg = LinearRegression().fit(tmp_x, tmp_y)  # 最小二乗法による線形近似、対数をとった観測値で行い、指数関数に戻す。

近似後処理

自作のIVExpRegGraphData()オブジェクトに入れて使いやすくする。

以下がIVExpRegGraphDataクラスである。

        reg_result = IVExpRegGraphData(math.exp(reg.intercept_), reg.coef_[0][0], reg.score(tmp_x, tmp_y))  # 使いやすいように、近似結果のデータを一つにまとめる。

前回(3-2. PC側ソフト設計 - Matplotlibでのグラフ表示)

次回(3-4. PC側ソフト設計 - openpyxlでグラフ描画と最小二乗法の指数関数近似)

他の回

「ダイオードI-V特性測定器作成 連載記事」でタグ付けを行っている。

広告

最小二乗法Tシャツ。

広告