2016-06-25 2 views
0

Рассмотрим приведенный ниже пример. Есть 3 клиента A, B, C. 1-я строка матрицы - это требование соответствующего клиента, а вторая строка - это тот день, когда они нужны. например: спрос A = [10,40,50; 15,45,75]; Заказчику нужны 10 предметов на 15-й день. 40 предметов на 45-й день и 50 предметов на 75-й день. Аналогично для B, C.Matlab programming, Matrix sorting and ranking

demand A=[10,40,50;15,45,75]; 
demand B=[80,30,20;05,35,80]; 
demand C=[50,40,30;20,47,88]; 

Теперь мне нужно ранжировать клиента по дням. Так вот ответ должен быть как ранг 1: 5-й день клиент B 80 штук ранг 2: 15-й день клиент A 10 предметов ранг 3: 20-й день клиент C 50 предметов. и так далее.

Как я могу это сделать в матовой лаборатории. так что, когда я оцениваю его на основе дня, тогда я должен знать, сколько предметов и какой клиент соответственно.

вывод должен быть таким:

   Rank Customer items day 
        1  B  80  05 
        2  A  10  15 
        3  C  50  20 
        4  B  30  35 
        5  A  40  45 
        6  C  40  47 
        7  A  40  75 
        8  B  20  80 
        9  C  30  88 
+0

Можете ли вы после того, что вы на самом деле ожидать выход выглядеть, а не пытаться описать это словами? – Suever

+0

Можете ли вы изменить это на свой вопрос, а не помещать его в комментарий? – Suever

ответ

0

я предлагаю следующий подход:

Первый этап

генерирует новую матрицу, которая является композиция из А, В и С , так что: Первый col представляет день. Второй col представляет запрошенную сумму. Третий столбец - индекс покупателя (A = 1, B = 2, C = 3).

res = [A',ones(size(A',1),1);B',ones(size(A',1),1)*2;C',ones(size(C',1),1)*3]; 
res(:,[2,1]) = res(:,[1,2]); 

Второй этап

своего рода матрица по первому столбцу, который представляет день

[~,sortedDaysIndices] = sort(res(:,1)); 
res = res(sortedDaysIndices,:); 

Третий этап: печать результатов

for ii=1:size(res) 
    if res(ii,3)==1 
     costumerStr = 'A'; 
    elseif res(ii,3)==2 
     costumerStr = 'B'; 
    else 
     costumerStr = 'C'; 
    end 

    fprintf('%s\n',[num2str(ii) ' ' costumerStr ' ' num2str(res(ii,2)) ' ' num2str(res(ii,1))]) 
end 

Результат

1 B 80 5 
2 A 10 15 
3 C 50 20 
4 B 30 35 
5 A 40 45 
6 C 40 47 
7 A 50 75 
8 B 20 80 
9 C 30 88