哟,伙计们,我有一个问题,有什么方法可以改进这个或者更好的计算方法吗?因为我能想到的非常准确地计算导数的唯一方法是这个..哈哈,它的逻辑就像 x^n = nx^(n-1) 的 d/dx 一样,所以我想到了这一点并尝试了一下,但没有使用像 e^x 这样的函数,所以我需要帮助来进行非常准确的导数计算
function derivative(Function, x)
local dxlog = math.log(Function(x), x)
return dxlog * x^(dxlog - 1)
end
print(derivative(function(x) return x^3 end, 10))
而且它太糟糕了,甚至无法计算相对于 x 的 y^x ..
尝试了我能想到的一切,太愚蠢了,无法解决这个问题
顺便说一句,这是我这样做的旧方法:
function derivative(Function, x)
local d = (Function(x + 6.7219579999763e-006) - Function((x - 6.7219579999763e-006))) / 1.3443915999953e-005
if math.abs(math.round(d) - d) < 4.1212121212e-6 then
return math.round(d)
end
return d
end
我想,你想要得到数值导数,而不是符号。那为什么不使用最直接的方法呢?
-- lim_{x -> 0} f(x):
local function limit (f)
local abs = math.abs
local x_0 = 1e-9
local x, y = x_0, f (x_0)
local delta_x, delta_y
-- Halve x while the decrement of x and f(x) is measureable:
while not delta_x or delta_x > 0 and delta_y > 0 do
local x_old, y_old = x, y
x = x / 2
y = f (x)
delta_x, delta_y = abs (x - x_old), abs (y - y_old)
end
return y
end
-- f'(x):
local function derivative (f)
return function (x)
-- f'(x) = lim_{delta} (f (x + delta) - f(x)) / delta:
return limit (function (delta)
return (f (x + delta) - f (x)) / delta
end)
end
end
-- Example:
local f = function (x)
return x ^ 3
end
local df = derivative (f)
for _, x in ipairs {-3, -2, -1, 0, 1, 2, 3} do
print (x, df (x))
end
或简化:
local delta = 1e-9
local function derivative (f)
return function (x)
return (f (x + delta) - f (x)) / delta
end
end
-- Example:
local f = function (x)
return x ^ 3
end
local df = derivative (f)
for _, x in ipairs {-3, -2, -1, 0, 1, 2, 3} do
print (x, df (x))
end