欧拉';python中的s方法

欧拉';python中的s方法,python,numpy,numerical-methods,differential-equations,approximation,Python,Numpy,Numerical Methods,Differential Equations,Approximation,我试图在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 然而,当我尝试调用函数时,我得到了错误“ValueErr

我试图在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你确定你没有尝试实现牛顿方法吗?因为牛顿方法用于近似根

如果你决定使用牛顿的方法,这里有一个稍微修改过的代码版本,它近似于2的平方根。你可以使用函数及其导数来修改
f(x)
fp(x)

import numpy as np

def f(x):
    return x**2 - 2


def fp(x):
    return 2*x

def Newton(f, y0, N):
    y = np.zeros(N+1)
    y[0] = y0
    for n in range(N):
        y[n+1] = y[n] - f(y[n])/fp(y[n])
    return y

print Newton(f, 1, 10)
给予

[1.1.5 1.41666667 1.41421569 1.41421356 1.41421356
1.41421356 1.41421356 1.41421356 1.41421356 1.41421356 1.41421356]

这是初始值和前十次迭代的平方根


除此之外,一个大问题是对powers使用
^
而不是
***
,这在python中是一种合法但完全不同的(按位)操作。

您尝试使用的公式不是Euler方法,而是当n接近无穷大时e的精确值


用于求解一阶微分方程

下面是两个指南,说明如何实现Euler方法来解决一个简单的测试函数:和

为了回答这篇文章的标题,而不是你要问的问题,我使用了Euler的方法来解决通常的指数衰减:

$\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
输出:

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。

您的代码中有许多问题,但我想先看看您的错误的完整回溯,复制并粘贴到您的问题中,以及您如何调用
Euler
。您能用这些信息完成您的问题吗?TiaI肯定是指Euler的方法,b是的,**确实是个问题。谢谢