-- y = x^2 - 3*x +2 的梯度下降算法
local Gradient = {}
local alpha = 0.25
local e = 0.00001
local x0, y0
function getY(x)
return (x*x - 3*x + 2)
end
-- f(x)的求导
function getDerivative(x)
return 2*x - 3
end
function init()
x0 = 0
y0 = getY(x0)
end
function getSteepestDescend()
local min_ = 0
local x = x0
local y = y0
local y1
local temp = 0
-- gradient process 缩减x然后逼近y最小值
while(true) do
print("***** " .. x .." " .. y)
temp = getDerivative(x)
x = x - alpha * temp
y1 = getY(x)
if math.abs(y1-y) <= e then
break
end
y = y1
min_ = y
print("@@@@ ".. min_)
end
return min_
end
function main_()
local min__
init()
min__ = getSteepestDescend()
print(min__)
end
main_()
理论可以看
这里
梯度下降算法实现
最新推荐文章于 2024-03-15 15:07:35 发布