2017-02-28 5 views
0

私は楕円で囲む必要がある20ポイントのデータセットを持っています。私は楕円の中心と最も遠い点を取り除き、新しい楕円を再構築してプロセスをやり直すという、最大の距離を計算することを試みています。ここで最適化のルーピング

コードです:

P = [1.397100 0.934550 
-0.708828 -3.993403 
-0.775017 -0.167091 
1.861729 -0.334958 
-0.376357 -3.187580 
0.294908 -0.765351 
0.952188 -1.872313 
0.524652 2.972442 
0.889532 -0.331162 
0.991093 0.278271 
0.262071 0.078590 
0.901017 0.320209 
-0.797258 0.518452 
-0.656796 0.268351 
0.333667 0.601893 
0.762157 0.613208 
0.292147 -1.555187 
0.122875 -0.860661 
0.702863 -3.195442 
-1.140430 -1.919686]' 
t = 0.001; 
K = convhulln(P'); 
K = unique(K(:)); 
Q = P(:,K); 

[A , C] = MinVolEllipse(Q, t) 
figure 
plot(P(1,:),P(2,:),'*') 
hold on 
Ellipse_plot(A,C) 

%Rule=size(P',1) 

W=P' 
v=C' 
Cx=v(1) 
Cy=v(2) 
dist=sqrt((W(:,1)-Cx).^2+(W(:,2)-Cy).^2) 
Remove=find(dist==max(dist(:))) 
W(Remove,:)=[] 
W=W' 
Rule=size(W',1) 
while Rule>5 
    W=W'; 
    v=C'; 
    Cx=v(1); 
    Cy=v(2); 
    dist=sqrt((W(:,1)-Cx).^2+(W(:,2)-Cy).^2); 
    Remove=find(dist==max(dist(:))); 
    W(Remove,:)=[]; 
    W=W'; 
end 
[A , C] = MinVolEllipse(W, t) 
figure 
plot(W(1,:),W(2,:),'*') 
hold on 
Ellipse_plot(A,C) 

私は私が何か間違ったことをしたことを理解しますが、今私は約10分間、「忙しい」とこだわっています。どのようにプロセスを正しくループするのですか?

ありがとうございます!

+1

なぜあなたは何度も、物事を転置続けるのですか?例えば。 'W = W ';'? –

答えて

2

は、あなたは、例えば、いくつかの冗長な操作を実行し、別のポイントとしてRule

while Rule>5 
    W=W'; 
    v=C'; 
    Cx=v(1); 
    Cy=v(2); 
    dist=sqrt((W(:,1)-Cx).^2+(W(:,2)-Cy).^2); 
    Remove=find(dist==max(dist(:))); 
    W(Remove,:)=[]; 
    W=W'; 
    Rule=size(W',1) 
end 

の値を更新する必要がありますあなたの最初の行と最後の行が逆の操作を行います。たぶん、このような何か:(コードがテストされていません)

while size(W,1)>5 
    dist=sqrt((W(:,1)-C(1)).^2+(W(:,2)-C(2)).^2); 
    % the second returned variable is the location 
    [~, Remove] = max(dist(:)); 
    W(Remove,:)=[]; 
end 
+0

ありがとうございます。しかし、今では点数が1に減り、5点で停止しません。ポイント数が5に達したらどうやって止めることができますか? –

+0

解決しました。省略記号を作成する前にWの転置を忘れました。ありがとうございました! –

+0

正しい寸法を使用していることを再度確認してください。何度も何度もやり直しています。私はあなたの関数 'MinVolEllipse'のいくつかを欠いていますので、' C'の値を計算することはできません。例の値を提供できますか?あなたの 'P'は' W'なので、私たちはそれを持っています。 – mpaskov