MATLAB的等号左边的表达式不是有效的目标

时间:2012-07-25 17:35:58

标签: matlab

我的代码如下所示,我收到此错误:

The expression to the left of the equals sign is not a valid target for an assignment.

它指向Temp1(i) = ( ( X(i,1)*theta(i,1) + X(i,2)*theta(i,2) ) - y(i));

我不明白这里有什么问题。请帮忙

Temp1 = zeros(m);
sum1 = 0;
for i = 1:1:m
{
    Temp1(i) = ( ( X(i,1)*theta(i,1) + X(i,2)*theta(i,2) ) - y(i));

    sum1 = sum1 + (Temp1(i)^2);
}

J = sum1 / (2*m);
fprintf(' The value of J = ');
fprintf('%f', J);
return J; 

3 个答案:

答案 0 :(得分:2)

您可以将整个代码矢量化为:

J = sum( (sum(X.*theta,2) - y).^2 ) ./ (2*m);

答案 1 :(得分:1)

您的代码应该是

Temp1 = zeros(m);
sum1 = 0;
for i = 1:1:m

    Temp1(i) = ( ( X(i,1)*theta(i,1) + X(i,2)*theta(i,2) ) - y(i));

    sum1 = sum1 + (Temp1(i)^2);
end


J = sum1 / (2*m);

fprintf(' The value of J = ');
fprintf('%f', J);

即你不使用大括号,而for循环的语法是:

for i=1:10
    .
    .
    .
end

答案 2 :(得分:0)

虽然这可能无法直接回答您的问题,但我相信您可能会对调用zeros(m)的结果产生误解。这实际上会产生一个零m x m矩阵。基于上面的代码,看起来您只是将temp变量视为向量。请尝试使用zeros(m,1)制作矢量。