1

Kernel Density Estimator ツールボックス フォームhttp://www.ics.uci.edu/~ihler/code/kde.htmlを使用しています。しかし、デモファイルを実行しようとすると、次のエラーが発生します -

>> demo_kde_3
KDE Example #3 : Product sampling methods (single, anecdotal run)
Attempt to reference field of non-structure array.

Error in double (line 10)
if (npd.N > 0) d = 1;            % return 1 if the density exists

Error in repmat (line 49)
nelems = prod(double(siz));

Error in kde (line 39)
if (size(ks,1) == 1) ks = repmat(ks,[size(points,1),1]); end;

Error in demo_kde_3 (line 8)
p = kde([.1,.45,.55,.8],.05);  % create a mixture of 4 gaussians for
testing

誰が何が間違っているのか提案できますか? 私はMatlabが初めてで、問題を理解するのに苦労しています。

ありがとうございました、

4

3 に答える 3

1

現在のディレクトリを@kdeフォルダから変更してみてください。@kdeこれを行うときは、パスにフォルダーを追加する必要がある場合があります。たとえば、次を実行します。

cd('c:\');
addpath('full\path\to\the\folder\@kde');

追加する必要があるかもしれません

addpath('full\path\to\the\folder\@kde\examples');

次に、それが機能するかどうかを確認します。

関数repmat(mathworks関数)が@kdeクラスのバージョンのdouble関数を取得しているようで、エラーが発生しています。通常、クラスのオブジェクトのみが、フォルダー内@kdeにある関数を呼び出すことができます。@kde

クラス定義の形式を使用することはめったにない@folderので、セマンティクスが完全にはわかりません。これがエラーに影響を与えるかどうか知りたいです。


一般的に、@folder開発にクラス形式を使用することはお勧めしません。mathworksは、数バージョン前にOOパラダイムをより使い慣れた(そして便利な)形式にオーバーホールしました。詳細を表示するために使用help classdefします。この@kdeコードは、このアップグレードよりも前のもののようです。

于 2013-02-14T20:36:50.597 に答える
0

MATLAB は、エラーが発生したコード行を提供します。doubleMATLABにrepmat属しているため、バグはおそらく39kde.m行目にあります.MATLABデバッガーでそのファイルを開き、その行にブレークポイントを設定して(その特定の行の実行の直前に実行が停止するように)、コードがそこで停止したときに、状況を確認してください。コンソールでコード行全体を試してください(コピーして貼り付けるか入力します。シングルステップではデバッガーでのコードの実行が終了するときにキャッチされないエラーが発生するため、シングルステップではありません)、エラーが発生するはずです(ただし、実行を停止します)。次に、そのコード行のコードの一部を試してみてください。の結果はsize(points, 1)意味があります。

ただし、なじみのないコードをデバッグすることは、特に MATLAB の初心者にとっては簡単なことではありません。しかし、MATLAB の本質的なデータ型 (配列、セル配列、および構造体) と、それらに対処できるさまざまな方法を学び、理解し、その知識を の 39 行目の状況に適用するとkde.m、うまくいけばバグを修正できます。

于 2013-02-14T20:21:45.823 に答える
0

Repmat が呼び出さdoubleれ、組み込みの double が呼び出されることを期待します。

ただし、これはそのコードの一部ではないと思います。

if (npd.N > 0) d = 1;            % return 1 if the density exists

したがって、すべてが正しい場合、これはビルトイン関数doubleがオーバーロードされていることを意味し、これがコードがクラッシュする理由です。

編集: @Pursuit が既にこの問題に対処していることがわかりますが、検出方法についてもう少し説明しているため、回答をそのままにしておきます。

于 2013-02-15T12:53:34.663 に答える