-3

私のmatlabコードで奇妙な問題が発生しました。これは私のコードの一部です:

for k=1:length(box11)
    num_pts1(k)=sum(length(find(box11(:,k)>0)));
    size1=sum(length(find(box11(:,:)>0)));
    perc1(k)=(num_pts1(k)/size1)*100;
end
plot(delta,perc1(k),'*')

ただし、問題は、プロットで perc1 が修正されることです。グラフに直線が表示されます。しかし、kはループごとに変化するため、グラフも変化するはずなので、曲線を与えるさまざまな数値が必要です.. plzzzzzzzzzzzzzzzz、助けてください:( !!!

4

2 に答える 2

1

あなたplotはループに入る必要があります

for k=1:length(box11)
    num_pts1(k)=sum(length(find(box11(:,k)>0)));
    size1=sum(length(find(box11(:,:)>0)));
    perc1(k)=(num_pts1(k)/size1)*100;
    plot(delta,perc1(k),'*'); hold on % Note the "hold" command!
end
于 2013-05-10T09:32:16.267 に答える
0

マトリックスbox11に列ごとに 0 を超える異なる数の要素が含まれている場合、コードは正常に機能します。問題はコードではなく、データにあると思います。以下は、いくつかのダミー データを含む少し整理されたバージョンのコードで、正常に動作します。

% Create a dummy box11 matrix
box11 = round(rand(15,58));

% Pre-allocate variables
num_pts1 = zeros(length(box11),1);

for k=1:length(box11)
    num_pts1(k)=sum(length(find(box11(:,k)>0)));       
end

size1=sum(length(find(box11(:,:)>0)));
perc1=(num_pts1/size1)*100;
delta = 1:length(perc1);

plot(delta,perc1,'*')

次のプロットが生成されます (Octave では、MATLAB でも同様のはずです)。

ここに画像の説明を入力

于 2013-05-10T14:06:50.317 に答える