私はMatlabでnewbyです。私は複雑なif-statement
の作業コードを取り、それを書き直す必要があります。このコードでは、最適化タスクを解決するための初期データを用意する必要があります。このif-statement
条件は次のようになります。if-statement:matlabで書き直す方法
x=[784.8 959.2 468 572 279 341 139.5 170.5 76.5 93.5 45 55];
a=nchoosek(x,6); % all possible combinations from 6 elements of x
n=length(a);
q=[];
for i=1:n
if(((a(i,1)==x(1)) & (a(i,2)==x(2))) |
((a(i,1)==x(3)) & (a(i,2)==x(4))) |
((a(i,1)==x(5)) & (a(i,2)==x(6))) |
((a(i,1)==x(7)) & (a(i,2)==x(8))) |
((a(i,2)==x(3)) & (a(i,3)==x(4))) |
((a(i,2)==x(5)) & (a(i,3)==x(6))) |
((a(i,2)==x(7)) & (a(i,3)==x(8))) |
((a(i,3)==x(3)) & (a(i,4)==x(4))) |
((a(i,3)==x(5)) & (a(i,4)==x(6))) |
((a(i,3)==x(7)) & (a(i,4)==x(8))) |
((a(i,3)==x(9)) & (a(i,4)==x(10)))|
((a(i,4)==x(5)) & (a(i,5)==x(6))) |
((a(i,4)==x(7)) & (a(i,5)==x(8))) |
((a(i,4)==x(9)) & (a(i,5)==x(10)))|
((a(i,5)==x(5)) & (a(i,6)==x(6))) |
((a(i,5)==x(7)) & (a(i,6)==x(8))) |
((a(i,5)==x(9)) & (a(i,6)==x(10)) |
((a(i,5)==x(11)) & (a(i,6)==x(12)))))
q(i,:)=a(i,:);
end;
end;
q;
R1=a-q;
R1(~any(R1,2),:) = [];
R1(:, ~any(R1)) = [];
質問:誰もがコードの可読性を向上させるためにif-statement
を書き換える方法のアイデアを与えるだろうか?
条件の森は誰のためにほぼ不可能になることができますが、簡単にするために;これらのコンポーネントの背後には意味がありません。しかし、1つの提案は、前者が短絡(恐らく)し、後者が短絡するため、ビット操作ではなく論理を使用します。 –
最後の行は1つのORケースであり、前の行にはそれぞれ2つのケースが含まれています。これはあなたのconditonsのsectioning(私は1つのトップレベルまたはラインごとに1つを使用する)から些細なものではなく、あなたの側でもエラーかもしれません。 –
最終的な点:配列の順列を別の配列と比較する場合、値そのものではなくインデックスを生成してみてください。その場合、整数の等価性をテストできます(who-knows-whatsではなく)。 –