Euler在python中的方法
作者:互联网
我正在尝试实现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< = 0”.我怀疑这与我如何定义f有关?我在调用euler时尝试直接输入f,但是给了我与未定义的变量相关的错误.我也尝试将f定义为它自己的函数,这给了我一个除0错误.
def f(N):
for n in range(N):
return (1+(1/n))^n
(不确定N是否适合在此使用…)
解决方法:
你确定你没有尝试实施牛顿方法吗?因为牛顿的方法用于近似根.
如果你决定使用牛顿方法,这里是一个稍微改变的代码版本,它近似于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中完全不同(按位)的操作.
标签:python,numpy,numerical-methods,differential-equations,approximation 来源: https://codeday.me/bug/20190628/1318855.html