2016-07-27 12 views
0

オクターブを初めて使用しています。私は各シータのlh値をプロットしたい。私は以下の関数を使ってそのlh値を計算しています。 0.01:1オクターブ単位のプロット関数で、単一の値を行列に変換する

プロット(シータは、シータ= 0で生成され

function lh = compute_lh (D, theta) 
lh = 1 
    for i=D 
    if i == 1 
     lh = lh * theta 
    else 
     lh = lh * (1-theta) 
    endif 
    end 
endfunction 

D = = [1,1,1,1,1,1,0,0,0,0] シータ、compute_lh(D、シータ))

エラー:compute_lh:演算子*:不適合引数(OP1は1x101で、OP2は1x101) エラー:評価引数リストの要素番号:行29列10 エラーでcompute_lhから呼び出さ2

私はなぜthetaがconveであるかわからないプロット中に行列に移動します。

+1

確かに 'lh = theta。^ sum(D == 1)。*(1-θ)。^(sum(D~ = 1))'のようなものはこれより簡単ですか? 'D 'が1または0しか持たない場合、' lh = theta。^ nnz(D)。*(1-θ)。^ nnz(〜D) ' – David

答えて

0

*演算子は、行列乗算です。

エラーが発生したのは、行番号lh = lh * thetaが最初に呼び出されたときに、スカラーに水平行列が「行列乗算」され、水平行列が生成されたためです。 2回目に、水平行列を別の水平行列に「行列乗算」しようとしていますが、これは数学的に正しい演算ではないため、エラーが発生します。

.*演算子が必要です(「要素ごと」の乗算が必要です)。 これに変更すると、ベルカーブの結果が表示されます。

+0

@AnipPatelいいえ、 'f(x)'をベクトル 'x'に対して呼び出すと、ベクトル全体が関数に渡されます。 – David

関連する問題