我正在尝试实现 euler's method 来逼近 python 中 e 的值。这是我到目前为止:
def Euler(f, t0, y0, h, N):
t = t0 + arange(N+1)*h
y = zeros(N+1)
y[0] = y0
for n in range(N):
y[n+1] = y[n] + h*f(t[n], y[n])
f = (1+(1/N))^N
return y
但是,当我尝试调用该函数时,出现错误“ValueError: shape
def f(N):
for n in range(N):
return (1+(1/n))^n
(不确定 N 是否适合在这里使用的变量...)
最佳答案
您尝试使用的公式不是欧拉方法,而是当 n 接近无穷大时 e 的确切值 wiki ,
$n = \lim_{n\to\infty} (1 + \frac{1}{n})^n$
Euler's method 用于求解一阶微分方程。
这里有两个指南展示了如何实现欧拉方法来解决一个简单的测试函数: beginner's guide 和 numerical ODE guide 。
为了回答这篇文章的标题,而不是你问的问题,我使用欧拉的方法来解决通常的指数衰减:
$\frac{dN}{dt} = -\lambda N$
哪位有解决办法,
$N(t) = N_0 e^{-\lambda t}$
代码:
import numpy as np
import matplotlib.pyplot as plt
from __future__ import division
# Concentration over time
N = lambda t: N0 * np.exp(-k * t)
# dN/dt
def dx_dt(x):
return -k * x
k = .5
h = 0.001
N0 = 100.
t = np.arange(0, 10, h)
y = np.zeros(len(t))
y[0] = N0
for i in range(1, len(t)):
# Euler's method
y[i] = y[i-1] + dx_dt(y[i-1]) * h
max_error = abs(y-N(t)).max()
print 'Max difference between the exact solution and Euler's approximation with step size h=0.001:'
print '{0:.15}'.format(max_error)
输出:
Max difference between the exact solution and Euler's approximation with step size h=0.001:
0.00919890254720457
注意:我不确定如何正确显示 LaTeX。
关于python - 欧拉在python中的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27994660/