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的正常顯示。