MATLAB,Python,Scilab,Julia比較 第4章 その34【連鎖律の前準備⑧】

MATLAB,Python,Scilab,Julia比較 第4章 その34【連鎖律の前準備⑧】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その34【連鎖律の前準備⑧】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia4-backnumber/

はじめに

シグモイド関数の導関数とオイラー法で求めた微分を比較するプログラムを作成する。
今回はPython(NumPy)。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

【再掲】シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分の式

太郎くん
太郎くん

まずは、シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分の式を再掲。

シグモイド関数

\(
\displaystyle\sigma(x)=\frac{1}{1+e^{-x}}
\)

シグモイド関数の導関数

\(
\sigma\prime(x)=\sigma(x)\{1-\sigma(x)\}
\)

シグモイド関数のオイラー法による微分

\(
\displaystyle\sigma\prime_{euler}(x)=\frac{\sigma(x+h)-\sigma(x)}{h}\dots h=0.01
\)

フクさん
フクさん

これをPythonでplotして比較してみる。
導関数とオイラー法を比較して同一ならOK。

Pythonコード

フクさん
フクさん

Pythonコードは以下。

import numpy as np
import matplotlib.pyplot as plt

# シグモイド関数の定義
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# シグモイド関数の導関数の定義
def sigmoid_derivative(x):
    return sigmoid(x) * (1 - sigmoid(x))

# オイラー法で微分する関数の定義
def euler_derivative(x, h):
    return (sigmoid(x + h) - sigmoid(x)) / h

# x軸の値の範囲と間隔の設定
x = np.arange(-10, 10, 0.1)

# シグモイド関数の計算
y_sigmoid = sigmoid(x)
y_derivative = sigmoid_derivative(x)

# オイラー法で微分した結果の計算
h = 0.01  # ステップサイズ
y_euler_derivative = euler_derivative(x, h)

# グラフを上下に並べて表示
plt.figure()

plt.subplot(3, 1, 1)
plt.plot(x, y_sigmoid)
plt.title('Sigmoid Function')
plt.xlabel('x')
plt.ylabel('sigmoid(x)')
plt.grid(True)

plt.subplot(3, 1, 2)
plt.plot(x, y_derivative)
plt.title('Derivative of Sigmoid Function')
plt.xlabel('x')
plt.ylabel("sigmoid'(x)")
plt.grid(True)

plt.subplot(3, 1, 3)
plt.plot(x, y_euler_derivative)
plt.title('Derivative of Sigmoid Function using Euler Method')
plt.xlabel('x')
plt.ylabel("sigmoid'(x)")
plt.grid(True)

plt.tight_layout()  # グラフ間のスペースを調整
plt.show()

処理結果

フクさん
フクさん

処理結果は以下。

シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分(Python)
シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分(Python)
フクさん
フクさん

よって、
導出した導関数は正しいと言える。

まとめ

フクさん
フクさん

まとめだよ。

  • シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分をPythonで算出。
  • グラフで比較し、導出した導関数は正しいと言える結果となった。

バックナンバーはこちら。

Pythonで動かして学ぶ!あたらしい線形代数の教科書

Amazon.co.jp

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

Amazon.co.jp

ゼロからはじめるPID制御

https://amzn.to/3SvzuyR

OpenCVによる画像処理入門

https://amzn.to/498ZUgK

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]

Amazon.co.jp

Pythonによる制御工学入門

Amazon.co.jp

理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析

https://amzn.to/3UAunQK

コメント

タイトルとURLをコピーしました