3

Matlabでいくつかのプロットを描きたいです。

詳細:クラス1の場合、p(x|c1)は、パラメーターa = 1およびb = 4の[2, 4]の間のx に対して一様です。クラス2の場合、 p(x|c2)はパラメーターlambda = 1の指数です。p(c1) = p(c2) = 0.5に加えて、最適な決定境界を明確に示すxの関数として、それぞれP (c1)P(c2)を掛けた 2 つのクラス密度のスケッチを描きたいと思います (または境界)。

私はこの問題の解決策を持っています.これは作家がしたことです(そして私は取得したいです)が、Matlabコードがないので、すべて自分でやりたいです.

画像1

で、描いたのがこれ。

画像2

これが私が書いた MATLAB コードです。

x=0:1:8;

pc1 = 0.5;
px_given_c1 = exppdf(x,1);
px_given_c2 = unifpdf(x,2,4);

figure;
plot(x,px_given_c1,'g','linewidth',3);
hold on;
plot(x,px_given_c2,'r','linewidth',3);
axis([0 8 0 0.5]);
legend('P(x|c_1)','P(x|c_2)');

figure;
plot(x,px_given_c1.*pc1,'g','linewidth',3);
hold on;
plot(x,px_given_c2.*(1-pc1),'r','linewidth',3);
axis([0 8 0 0.5]);
legend('P(x|c_1)P(c_1)','P(x|c_2)P(c_2)');

ご覧のとおり、それらはほとんど似ていますが、赤で描かれたこの一様分布に問題があります。どうすれば変更できますか?

4

1 に答える 1

4

おそらくx=0:1:8;、次のようなものに変更するか、x=0:1e-3:8;よりx=linspace(0,8,1000);細かいプロットを作成する必要があります。これにより、 Matlabがプロットに使用するベクトル(したがって線分)のポイント数が増加します。


説明: Matlabは、プロットを行うときに線分を処理します。

書くことにより、長さ9のx=0:1:8;ベクトルを作成し、を適用して、元のベクトルから派生した同じ長さの2つのベクトルをそれぞれ作成します。つまり、基本的にはベクトルとを取得します。[0 1 2 3 4 5 6 7 8]exppdfunifpdf[exppdf(0) exppdf(1) ... exppdf(8)][unifpdf(0) unifpdf(1) ... unifpdf(8)]

後でコマンドを発行するとplot、Matlabは線分のみをプロットします(この場合、9つのポイントがあるため8つ)。

  • (x(1) 、px_given_c1(1))から(x(2)、px_given_c1(2))
  • ..。
  • (x(8)、px_given_c1(8))から(x(9)、px_given_c1(9))へ。
于 2012-11-09T13:45:52.670 に答える