Rya*_*yan 10 discrete-mathematics derivative
我正在寻找一种使用离散和快速方法计算导数的方法.从现在起我不知道我所拥有的等式的类型,我正在寻找类似于我们可以找到的积分的离散方法,例如欧拉方法.
And*_*mbu 10
我认为你正在寻找一个点计算的导数.如果是这种情况,这里有一个简单的方法.你需要知道一个点的导数,比如a.它由h-> 0的差商的极限给出:

您实际上需要实现限制功能.那么你:
现在在DO-WHILE循环中:
1-将h除以2(或10,重要的是使其变小)
2再次计算与h的新值的差商,将其存储在f2
3- set diff = abs(f2-f1)
4 - 指定f1 = f2
5-重复点1,而(diff> epsilon)
记住:你假设函数在a中是可微的.由于计算机可以处理的有限十进制数字的错误,您将得到的每个结果都是错误的,没有逃脱.
python中的示例:
def derive(f, a, h=0.01, epsilon = 1e-7):
f1 = (f(a+h)-f(a))/h
while True: # DO-WHILE
h /= 2.
f2 = (f(a+h)-f(a))/h
diff = abs(f2-f1)
f1 = f2
if diff<epsilon: break
return f2
print "derivatives in x=0"
print "x^2: \t\t %.6f" % derive(lambda x: x**2,0)
print "x:\t\t %.6f" % derive(lambda x: x,0)
print "(x-1)^2:\t %.6f" % derive(lambda x: (x-1)**2,0)
print "\n\nReal values:"
print derive(lambda x: x**2,0)
print derive(lambda x: x,0)
print derive(lambda x: (x-1)**2,0)
Run Code Online (Sandbox Code Playgroud)
输出:
derivatives in x=0
x^2: 0.000000
x: 1.000000
(x-1)^2: -2.000000
Real values:
7.62939453125e-08
1.0
-1.99999992328
Run Code Online (Sandbox Code Playgroud)
第一次我得到"精确"值"因为只使用结果的前6位数字,注意我使用1e-7作为epsilon.之后打印出REAL计算值,它们显然在数学上是错误的.选择小ε是多少取决于您希望结果的精确程度.
我假设您的函数比您发布的简单函数更复杂,因为封闭式解决方案太简单了。
当您使用“离散”这个词时,我认为您需要“有限差异”。您需要一些离散化来计算近似值。
Df/Dx ~ (f2-f1)/(x2-x1) 等