0

このコードが実行されない理由がわかりません。助けてください

function y = PdfMixUnfmBeta(x,alpha)
    if x < 0 
y = (1-alpha).*1/2;
    elseif x >= 0 
y = (1-alpha).*1/2 + alpha.*6*x*(1-x);
end;

この関数を次のように実行すると、エラーが発生します

EDU>> x=-1:0.01:1;
EDU>> a=PdfMixUnfmBeta(x,0.4)
Error in PdfMixUnfmBeta (line 2)
if x < 0 
4

1 に答える 1

0

あなたの関数の問題は、それxが単一の値であると仮定して書いてから、ベクトルを渡したということです。あなたのコードはこれに対処できません。

たとえば、単一の値でコードを実行しようとすると、a=PdfMixUnfmBeta(15,0.4)関数が実行されます。

コードの実際の問題を見てみましょう。コードを実行しようとすると、次のエラーが表示されました。

Output argument "y" (and maybe others) not assigned during call

これは、に割り当てられた行がy実際には実行されないことを示しています。これは、どちらの条件ステートメント (x < 0およびx >= 0) も true として評価されないことを示しています。ifステートメントはスカラー論理値を期待していますが、あなたの例では論理値のベクトルが提供されています。

xしたがって、これを修正するには、値を for ループでラップして一度に 1 つずつ処理する必要があります。

function y = PdfMixUnfmBeta(x_vec, alpha)
  for x = x_vec
    %do your function here
  end
end

または、コードをベクトル化することもできます。これは、はるかに望ましいソリューションです。

y = zeros(1,length(x));
% where x is < 0 use this formula
y(x < 0) = (1-alpha) .*(1/2); 
% where x is >= 0 use this formula instead.
y(x >= 0) = (1-alpha) .* (1/2) + (alpha .* 6 .* x .* (1-x)); 

上記のソリューションでは、論理インデックスを使用し、一部を に変更し*てい.*ます。*ととの違いを調べて、.*ベクトル化について調べると役立つ場合があります。

于 2013-06-02T01:48:50.130 に答える