0

私のコードは以下のとおりです。このエラーが発生します。

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; 
4

3 に答える 3

2

そのコード全体を次のようにベクトル化できます。

J = sum( (sum(X.*theta,2) - y).^2 ) ./ (2*m);
于 2012-07-25T19:18:37.550 に答える
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
于 2012-07-25T17:39:37.420 に答える
0

これはあなたの質問に直接答えるものではないかもしれませんが、 への呼び出しの結果について誤解している可能性があると思いますzeros(m)。これにより、実際にm x mはゼロの行列が作成されます。上記のコードに基づくと、temp 変数のみをベクトルとして扱っているように見えます。zeros(m,1)代わりにベクトルを作成してみてください。

于 2012-07-25T17:41:02.100 に答える