梯度下降
设计思路:1. 设计损失函数,从而转化问题,损失函数导数为0时,得到函数极小值。损失函数为
(t^2-x)^2,迭代式 t1 = t0 -a L'(t0)
2. 利用泰勒一阶展开也可得出迭代式
代码实现:
float x = 2;
float t = x / 2;
float L = (t * t - x) * (t * t - x);
float a = 0.01;
void main() {
while (L > 1e-5) {
float delta = 2 * (t * t - x) * 2*t;
t = t - a * delta;
L = (t * t - x) * (t * t - x);
}
cout << t << endl;
system("pause");
}
牛顿法1
利用曲线在t0处切线与x轴交点作为t1,逼近目标函数零点
通过点斜式公式推导 更新公式:t1 = t0 - L(t0)/L(t0)
代码实现
float x = 2;
float t = x / 2;
float L = t * t - x;
void main() {
while (L > 1e-5) {
float k = 2 * t;
t = t - L/ k ;
L = t * t - x ;
}
cout << t << endl;
system("pause");
}
牛顿法2
当函数f二阶可导,我们可以接触函数极小值,之后思路同上。