梯度下降求立方根。
求解立方根
http://www.nowcoder.com/questionTerminal/caf35ae421194a1090c22fe223357dca
写一个梯度下降的解法。
给定n,求x^3=n的根x。
使用平方误差作为损失函数,损失函数l=(x^3-n)^2
l对x求导数:
因为x小于0时,损失函数不是凸函数,所以特殊处理一下n<0的情况,统一计算n>0的情况。
根据梯度下降很容易写出AC代码。
n=float(input())
op=-1 if n<0 else 1
n=op*n
lr=0.0001
x=0.1
for i in range(1000000):
delta=6*(x**2)*(x**3-n)
x=x-lr*delta
print(op*round(x,1))