2015-04-01 3 views
-1

если у меня есть матрицы A & B: A = [400 (строки) x60 (столбцы)] B = [150x60] (Примечание: эта матрица B имеет фиксированные столбцы = 60, но строки переменные могут меняться с 1-400)Сравнение Matlab Matrix Dataset и определенный выход

Я введу эти две матрицы в матрицу, матрица А будет фиксирована и загружена в матляб в качестве файла excel, а матрица B измеряется непосредственно из кода (Примечание: обе матрицы содержат числовые значения)

Теперь мне нужна помощь: я хочу сравнить данные, которые я получаю от матрицы B с матрицей A НЕПРЕРЫВНО, если значения в B ЗАКРЫТЬ (НЕ ОБЯЗАТЕЛЬНО РАВНО) к значения A, то выходы matlab позволяют говорить True. Если значения в B НЕ ЗАКРЫТЫ или полностью удалены от значений A, тогда выведите False. (Примечание: я не знаю, но, возможно, мы должны использовать определенный порог для определения диапазона близости значений между А и В, если у нас должен быть определенный порог, допустим, что порог должен быть 70%)

Пожалуйста, если у кого-то есть ответ или может помочь, мне нужна программа. Я использую Matlab 2014a. Заранее спасибо.

+2

Если вы _need в program_, не полагаться на кого-то еще, чтобы сделать это для Вас в свободное время. Сделай сам; и если вы застряли с чем-то _специфичным, спросите об этом –

ответ

0

Easy !.

Предположим, у вас есть ваша матрица в файле A.xlsx, лист Sheet1 и матрица B в matlab уже.

Кроме того, допустим, что при этом контексте, что CLOSE некоторый оператор между A и B, до m -го ряда, например, norm с m принимать любое значение от 1 до 400.

Norm(A-Bm)=|A-Bm|= SUM_i=1^m SUM_j=1^60 (a(i,j)-bm(i,j))^2

Определим порог, например .

Таким образом, код, который выглядит следующим образом:

function result=matrixcomparison(Bm) 
% Read A Matrix 
A=xlsread('A'); 
[ma,na]=size(A); %ma is always 400, na is always 60 
[mb,nb]=size(Bm); %mb is variant, na is always 60 
% Make a Projection Matrix 
Am=A(1:mb,1:nb); 
%Compute the norm 
normABm=norm(Am-Bm); 
%Compare 
if (normABm>0.1*norm(Am)*norm(Bm)) 
    disp('Matrices are different.'); 
    result= 0; 
else 
    disp('Matrices are equal.'); 
    result= 1; 
end 

Вы экономите выше код под файл matrixcomparison.m

Конечно, это не имеют никакого «Continuous» сравнение. которые вы должны сделать на следующем смысле:

for m=1:400 
    % Read B 
    <<Calculate B for m>> 
    % Calculate Norm 
    result(m)=matrixcomparison(Bm); 
end 
% Plot the results 
plot(results);   

Вы вставить второй выше код на другой Script и просто запустить его.

Ура, ...