0
for i=1:1:k   %k = 100 people
   for j=1:1:l  %l = 5 orders
      Resultx = a + b + d(j); % cost of drink Resultx
      Resulty = f + g + c(j); % cost of food Resulty
   end
   Matrix(i) = [Resultsx1...j Resulty1...j]
end

これら% notesは、解決したい問題を頭の中で表現し、後でスクリプトで表現するのに役立ちます。

for eachiが注文した飲み物と食べ物のコストのマトリックスに値を格納したいとしましょう。

だから人にとってi = 1

1[1 5] %people 1, first order:  drink costs 1 and food costs 5
2[2 3] %people 1, second order: drink costs 2 and food costs 3
      ...
j[x y] %people 1, j order:      drink and food costs x and y
                 !!!       Matrix(1) = sort (j [x,y])    !!!

人のためi = 2に、

1[1 5] %people 2, first order:  drink costs 1 and food costs 5
2[2 3] %people 2, second order: drink costs 2 and food costs 3
     ...
j[x y] %people 2, j order:      drink and food costs x and y
       !!!       Matrix(2) = sort (j [x,y])    !!!

人のためi = kに、

1[1 5] %people k, first order:  drink costs 1 and food costs 5
2[2 3] %people k, second order: drink costs 2 and food costs 3
      ...
j[x y] %people k, j order:      drink and food costs x and y
            !!!       Matrix(i) = sort (j [x,y])    !!!

i各反復のすべての結果を行列に昇順で形成したい

Matrix(i) = sort (j [x,y]).

最適なパラダイムではないかもしれませんが、よろしくお願いします。

4

1 に答える 1

2

(私はあなたの声明を2つの方法で理解しました。あなたは2.ソリューションに興味があると思います。この形式ResultxResultyは、決して依存しないiため、すべての「人々」で同じになります)。

1. Matrix[ k x 2 ]配列です。2 番目のループの結果がまとめられています。

Matrix = zeros(k, 2);                 % pre-allocate space

for i=1:1:k   %k = 100 people
    Resultx = 0;
    Resulty = 0;        
    for j=1:1:l  %l = 5 orders
        Resultx = Resultx + a + b + d(j);       % cost of drink Resultx
        Resulty = Resulty + f + g + c(j);       % cost of food Resulty
    end
    Matrix(i,:) = [Resultx, Resulty]  % save pair
end

Sorted = sortrows(Matrix, [1 2]);     % sort pairs

最後のコマンドは、最初に 1 列目、次に 2 列目で昇順でペアを並べ替えます。両方の基準で降順が必要な場合は、代わりに使用します。昇順と降順を組み合わせることも可能ですが (たとえば)、この場合は無意味であることに疑問があります。[-1 -2][-1 2]

2. Matrix is [ k x l x 2 ]結果が個別に保持され、2 番目のループで合計されない配列。

Matrix = zeros(k, l, 2);              % pre-allocate space
Intermediate = zeros(l, 2);           % container used for sorting

for i=1:1:k   %k = 100 people
    for j=1:1:l  %l = 5 orders
        Resultx = a + b + d(j);       % cost of drink Resultx
        Resulty = f + g + c(j);       % cost of food Resulty
        Intermediate(j,:) = [Resultx, Resulty];  %save pair
    end
    Matrix(i,:,:) = sortrows(Intermediate, [1 2]);  % sort pairs
end

注: Matlab でループを記述することは避け、可能な限りベクトル化されたソリューションに頼る必要があります。

于 2012-11-13T08:42:29.860 に答える