로지스틱 방정식의 수치 계산 with Python
오늘은
가장 간단한 로지스틱 방정식을 수치 계산해 가지 않는다.
개요
\frac{\mathrm{d}y}{\mathrm{d}x} = y(1-y)
이 미분 방정식은
y=\sigma(x)=\frac{1}{1+\exp(-x)}
라는 형태의 엄밀해를 가집니다. 심층 학습으로 나오는 시그모이드 함수입니다.
실제로 시그모이드 함수의 미분을 계산하면 로지스틱 방정식의 해가되는 것을 알 수 있습니다.
수치 계산이면 Euler법으로도 풀 수 있으므로 실제로 확인해 봅시다.
구현 예
import numpy as np
from matplotlib import pyplot as plt
def get_integral_curve(f, init_xy, x_end, delta):
"""
solve ode 'dy/dx=f(x,y)' with Euler method
"""
(x, y) = init_xy
xs, ys = [x], [y]
for i in np.arange(init_xy[0], x_end, delta):
y += delta*f(x, y)
x += delta
xs.append(x)
ys.append(y)
return xs, ys
def main():
"""
solve logistic equation dy/dx=y(1-y)
"""
# set parameters
init_xy = (0, 0.5)
x_end = 5
delta = 0.1
# calc integral curve of logistic equation
f = lambda x, y: y*(1-y)
xs, ys = get_integral_curve(f, init_xy, x_end, delta)
# calc explicit solution
sigmoid_xs = np.arange(-5, 5, delta)
sigmoid_ys = 1/(1+np.exp(-sigmoid_xs))
# plot
fig, ax = plt.subplots()
ax.plot(xs, ys, "x", color='blue', label="integral curve")
ax.plot(sigmoid_xs, sigmoid_ys, "-", color='red', label='explicit curve')
ax.legend()
ax.set_xlim([-5, 5])
ax.set_ylim([-0.5, 1.5])
plt.show()
if __name__ == '__main__':
main()
동작 예
Reference
이 문제에 관하여(로지스틱 방정식의 수치 계산 with Python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SatoshiTerasaki/items/fc1e09c064da837227d8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
\frac{\mathrm{d}y}{\mathrm{d}x} = y(1-y)
y=\sigma(x)=\frac{1}{1+\exp(-x)}
import numpy as np
from matplotlib import pyplot as plt
def get_integral_curve(f, init_xy, x_end, delta):
"""
solve ode 'dy/dx=f(x,y)' with Euler method
"""
(x, y) = init_xy
xs, ys = [x], [y]
for i in np.arange(init_xy[0], x_end, delta):
y += delta*f(x, y)
x += delta
xs.append(x)
ys.append(y)
return xs, ys
def main():
"""
solve logistic equation dy/dx=y(1-y)
"""
# set parameters
init_xy = (0, 0.5)
x_end = 5
delta = 0.1
# calc integral curve of logistic equation
f = lambda x, y: y*(1-y)
xs, ys = get_integral_curve(f, init_xy, x_end, delta)
# calc explicit solution
sigmoid_xs = np.arange(-5, 5, delta)
sigmoid_ys = 1/(1+np.exp(-sigmoid_xs))
# plot
fig, ax = plt.subplots()
ax.plot(xs, ys, "x", color='blue', label="integral curve")
ax.plot(sigmoid_xs, sigmoid_ys, "-", color='red', label='explicit curve')
ax.legend()
ax.set_xlim([-5, 5])
ax.set_ylim([-0.5, 1.5])
plt.show()
if __name__ == '__main__':
main()
Reference
이 문제에 관하여(로지스틱 방정식의 수치 계산 with Python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SatoshiTerasaki/items/fc1e09c064da837227d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)