首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的有限差分近似

python中的有限差分近似
EN

Stack Overflow用户
提问于 2016-11-16 04:42:09
回答 2查看 4.2K关注 0票数 1

我试图计算x= 0处函数的导数,但我尝试过的所有函数都得到了奇怪的结果。例如,当f(X)=x**2时,我得到所有点的导数都是2。我的有限差分系数是正确的,它对x的二阶导数是精确的。

代码语言:javascript
复制
from numpy import *
from matplotlib.pyplot import *

def f1(x):
    return x**2

n = 100 # grid points

x = zeros(n+1,dtype=float) # array to store values of x
step = 0.02/float(n) # step size
f = zeros(n+1,dtype=float) # array to store values of f
df = zeros(n+1,dtype=float) # array to store values of calulated derivative

for i in range(0,n+1): # adds values to arrays for x and f(x)
    x[i] = -0.01 + float(i)*step
    f[i] = f1(x[i])

# have to calculate end points seperately using one sided form

df[0] = (f[2]-2*f[1]+f[0])/step**2
df[1] = (f[3]-2*f[2]+f[1])/step**2
df[n-1] = (f[n-1]-2*f[n-2]+f[n-3])/step**2
df[n] = (f[n]-2*f[n-1]+f[n-2])/step**2

for i in range(2,n-1): # add values to array for derivative
    df[i] = (f[i+1]-2*f[i]+f[i-1])/step**2

print df # returns an array full of 2...
EN

回答 2

Stack Overflow用户

发布于 2016-11-16 07:16:12

x^2的二阶导数是常数2,使用中心差商作为二阶导数,从分母中的平方也可以看出。你的结果是绝对正确的,你的代码完全按照你告诉它的去做。

要获得具有对称差商的一阶导数,请使用

代码语言:javascript
复制
df[i] = ( f[i+1] - f[i-1] ) / ( 2*step )
票数 1
EN

Stack Overflow用户

发布于 2017-01-28 00:18:19

对于f1 (X)=x^2的情况,可以得到函数f1在点x的一阶导数:

代码语言:javascript
复制
def f1(x):

    return (x**2)

def derivative (f, x, step=0.0000000000001):

    return ((f(x+step)-f(x))/step)

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40619320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档