あなたの関数の問題は、それ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));
上記のソリューションでは、論理インデックスを使用し、一部を に変更し*
てい.*
ます。*
ととの違いを調べて、.*
ベクトル化について調べると役立つ場合があります。