不知道如何计算导数

问题描述 投票:0回答:1

哟,伙计们,我有一个问题,有什么方法可以改进这个或者更好的计算方法吗?因为我能想到的非常准确地计算导数的唯一方法是这个..哈哈,它的逻辑就像 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
lua calculus
1个回答
0
投票

我想,你想要得到数值导数,而不是符号。那为什么不使用最直接的方法呢?

-- 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
© www.soinside.com 2019 - 2024. All rights reserved.