标签:python numpy numerical-methods differential-equations approximation
我正在尝试实现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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。