0

すでに 1 つの方程式を作成しましたが、より一般化された式を見つける必要があります。私のプログラムは以下の通りです:

p2=[];
W=3;
i=6;

for a1=1:W
    for a2=a1:W
        for a3=a2:W
            for a4=a3:W
                for a5=i-a4-a3-a2-a1;
                    if(a4 <= a5 && a5<=W)
                        p2=[p2;a1,a2,a3,a4,a5];
                    end
                end
            end
        end
    end
end

ここで if a1=1then a2=1,2,3、 if a1=2then a2=2,3、 if a1=3then a2=3。同じ条件はa3&a4です。W今、私はこのプログラムをandのみに依存するようにしたいと思いiます。私はすでに試しましたが、実りある結果を得ることができません。a1a2a3a4a5a(1:5)

Matlab の専門家、本当に助けが必要です。

前もって感謝します。

4

3 に答える 3

1

これはあなたが望むことだと思います:

[a5 a4 a3 a2 a1]=ndgrid(1:W,1:W,1:W,1:W,1:W);
ind = find(a2>=a1&a3>=a2&a4>=a3&a5>=a4&a1+a2+a3+a4+a5==i)
p2 = [a1(ind) a2(ind) a3(ind) a4(ind) a5(ind)]
于 2013-08-06T16:10:25.637 に答える
0

コードを多数に拡張したいので、私が提案していることは最善の方法ではないかもしれません。ただし、最初に k=4 要素のすべての組み合わせを列挙しようとすることもできます。すべての組み合わせについて、条件に応じて 5 番目の要素を計算できます。

このアプローチは、Luis Mendo のアプローチに似ていますが、k**n の可能性の生成を回避します。すべての組み合わせを取得して並べ替えることで、すべての有効なシーケンスが得られます。すべての組み合わせ (たとえば (2 1 2 1)) を 1 つのシーケンス (たとえば [1 1 2 2]) として解釈する必要があります。これにより、[2 1 1 2] のようなシーケンスの評価を回避できます。これは、すべての組み合わせが 1 つの有効なシーケンスにマッピングされるためです (逆も同様です)。無効なシーケンスを評価する必要はありません。

組み合わせを生成するには、combnk(v,k) を使用できます。次に、見つかったリストを a5 のすべての可能な値で展開できます。

于 2013-08-06T16:24:59.163 に答える