【问题标题】:Matlab Output different for same kind of codeMatlab输出不同的相同类型的代码
【发布时间】: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 的元素,您可以在以后的迭代中重复使用这些元素。这就是为什么两个代码中的第一个输出是相同的。

标签: arrays matlab


【解决方案1】:

在第一个循环中,您正在更新 theta(i) 的值并使用更新后的值来计算总和。在第二个循环中,您在开始时制作 theta 的副本,并在整个过程中使用它来计算总和。新的更改被保存到 theta_b(i) 中,它不用于计算总和。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多