4

我试图实现euler's method来近似py的值e。这是我到目前为止有:在python中的欧拉方法

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异常:形状< = 0”。我怀疑这与我如何定义f有关?当euler被调用时,我尝试直接输入f,但是给了我没有被定义的变量相关的错误。我也尝试将f定义为它自己的函数,这给了我一个0错误的分割。

def f(N): 
    for n in range(N): 
     return (1+(1/n))^n 

(不知道如果N是适当的变量用在这里...)

+1

您的代码中存在很多问题,但我希望首先看到错误的整个后台跟踪,复制并粘贴您的问题,以及您如何调用“Euler”。你能用这些信息完成你的问题吗? Tia – gboffi

回答

2

你确定你是不是要执行牛顿的方法是什么?因为牛顿的方法被用来逼近根。

如果您决定采用牛顿的方法,这里是您的代码的稍微改变的版本,其近似于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]

其是初始值和所述第一十次迭代到两个平方根。

此外,一个很大的问题是^而不是**的权力是一个合法的,但在python完全不同(按位)操作的使用。

+0

我的意思绝对是euler的方法,但是...... **肯定是一个问题。谢谢 – newpythonuser

0

你要使用的公式不是欧拉方法,而是e的精确值正趋向于无穷大wiki

$n = \lim_{n\to\infty} (1 + \frac{1}{n})^n$ 

Euler's method是用来解决一阶微分方程。

下面是两个指南,展示如何实现欧拉方法来解决一个简单的测试函数:beginner's guidenumerical 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的正常显示。