【发布时间】:2016-03-05 16:15:16
【问题描述】:
我必须在 matlab 中循环进行类似的计算,但给出不同的最终值。
在第一个代码中,我给出了具有初始值的数组“theta”,下面的代码作为
for i=1:m
for j=1:n
sum=sum + (theta'*X(j,:)' - y(j))*X(j,i);
end
theta(i)=(theta(i)-(alpha*sum)/m);
sum=0;
end
上面代码的输出是 340403.617738 , 109912.678489 , -5931.109115
在第二个代码中,我给数组''theta''赋予了初始值,但我已经初始化了''theta_b''等于''theta''另一个数组,我所做的所有更改都是数组''theta_b'',最后我将“theta_b”的值分配给“theta”。
theta_b=theta;
for i=1:m
for j=1:n
sum=sum + (theta'*X(j,:)' - y(j))*X(j,i);
end
theta_b(i)=(theta(i)-(alpha*sum)/m);
sum=0;
end
theta=theta_b;
上述代码的输出是 340403.617738 , 110014.524234 , -6046.767912
因为上面的两个代码应该是一样的,所以为什么输出是不同的。
自从
【问题讨论】:
-
不要使用
sum作为变量名,那么您将如何对theta中的值求和?sum(theta)将是 baaad。另外:在第二种情况下,您继续在循环中使用theta的旧值。在第一种情况下,您正在逐渐更改theta的元素,您可以在以后的迭代中重复使用这些元素。这就是为什么两个代码中的第一个输出是相同的。