2015-09-01 4 views
1

Я написал следующий код. Я хотел бы, чтобы функция возвращала матрицы D & S, но на данный момент она просто возвращает матрицу «ans», которая равна S. Любые предложения будут оценены. Благодарю.функция записи с двумя выходами

function [D,S] = sdQRS(QRS_cell) 
%scales & dilates QRS complexes 

m = length(QRS_cell{1}(:,1)); 
n = length(QRS_cell); 


d1 = linspace(0.5,1.0,10); 
d2 = linspace(1.0,2.0,21); 
d = vertcat(d1',(d2(2:21))'); 

s1 = linspace(0.6,1.0,13); 
s2 = linspace(1.0,1.5,18); 
s = vertcat(s1',(s2(2:18))'); 

DIL = cell(n,1); 
SCAL = cell(n,1); 
for i = 1:n 
    DIL{i} = zeros(m,length(d)); 
    SCAL{i} = zeros(m,length(d)); 
    for j = 1:length(d) 
     DIL{i}(:,j) = interp1(QRS_cell{i}(:,1),QRS_cell{i}(:,2),QRS_cell{i}(:,1)/d(j),'linear','extrap'); 
     SCAL{i}(:,j) = s(j)*QRS_cell{i}(:,2); 
    end 
end 

D = zeros(n); 
S = zeros(n); 
for k = 1:n 
    for l = 1:n 
     e = []; 
     t = []; 
     for a = 1:length(d) 
      e(a) = euc_dilQ(QRS_cell{k},QRS_cell{l},d(a)); 
      t(a) = euc_scalQ(QRS_cell{k},QRS_cell{l},s(a)); 
     end 
     [M,E] = min(e); 
     [M,T] = min(t); 
     D(k,l) = d(E); 
     S(k,l) = s(T); 
    end 
end 
+0

На мой взгляд, это и всегда было ужасным дизайнерское решение, чтобы позволить функцию возвращать отдельные объекты. Я настоятельно рекомендую (если вы должны придерживаться matlab) вместо этого делать 'foo = myfunc (x)' и внутренне настраивать 'foo.D = D; foo.S = S' –

ответ

1

Вы можете указать функцию Matlab для возврата любого количества выходных значений. В вашем случае функция подписи будет выглядеть как

function [D,S] = sdQRS(QRS_cell) { 
    d1 = linspace(0.5,1.0,10); 
    ... 
} 

Теперь вы можете вызвать эту функцию, введя

[D,S] = sdQRS(QRS_cell); 
+0

о человеке. Я просто назвал это неправильно. Это раздражительно. Благодаря! – neil

Смежные вопросы