1,这是我写的次梯度下降函数
%% 梯度下降法计算方法
function [fintheta0,fintheta1] = gradien(A,B,e,thetat,J)
syms theta0 theta1 x;
numA = length(A);
numB = length(B);
grad0 = diff(J,theta0); % 求J关于变量theta0的偏导数表达式
grad1 = diff(J,theta1); % 求J关于变量theta1的偏导数表达式
flag = 1;
lrate = 0.1; % 设置学习率(步长)为0.1
k = 0; % 循环次数
while(flag)
if numA == numB
disp begin!
value0 = subs(grad0,theta0,thetat(1));
value0 = subs(value0,theta1,thetat(2)); % 求将grad0的表达式中的符号替换为设定的thetat中的数值,求出此刻grad0的数值
value1 = subs(grad1,theta1,thetat(2));
value1 = subs(value1,theta0,thetat(1)); % 求将grad1的表达式中的符号替换为设定的thetat中的数值,求出此刻grad1的数值
valuee = [value0;value1];
if norm(valuee) > e % 判断梯度方向的范数是否小于门槛(精度)e
fintheta0 = thetat(1)-lrate*value0;