[MATLAB] Tablice

jeth
Użytkownik
Użytkownik
Posty: 41
Rejestracja: 20 mar 2010, o 12:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy

[MATLAB] Tablice

Post autor: jeth »

Witam,
sprawa jest kontrowersyjna. Mam dwie tablice, każda z nich ma 25 374 elementy (nazwy tablic to 'dec' oraz 't2'). Mam zamiar porównać ich wartości w pewien sposób (w sumie nie jest to najważniejsze):

Kod: Zaznacz cały

if((dec*1.25) < t2 || (dec*0.75) > t2)
        disp('Wykryto anomalia za pomocą metody dekompozycji sezonowej!');
end
W ifie Matlab zwraca mi error:

Kod: Zaznacz cały

??? Error using ==> lt
Matrix dimensions must agree.

Error in ==> t_detect at 12
    if((naive*1.25) < t2 || (naive*0.75 > t2))
Skoro tablice mają identyczne rozmiary, to w czym tkwi problem?

Z góry dziękuję
Pozdrawiam
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[MATLAB] Tablice

Post autor: witekkq »

W tym że widać nie mają identycznych wymiarów... w workspace co masz napisane?
jeth
Użytkownik
Użytkownik
Posty: 41
Rejestracja: 20 mar 2010, o 12:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy

[MATLAB] Tablice

Post autor: jeth »

Chyba właśnie jednak są, bo to sam Matlab zwraca mi taką wiedzę:

Kod: Zaznacz cały

length(t1)
ans =

       25374

length(t2)
ans =

       25374

length(dec)
ans =

       25374
Dlatego dla mnie są tu jakieś niewyjaśnione kontrowersje...
------------
Nie będę wklejał całego kodu, bo jest go trochę dużo, ale pokażę najistotniejszą część:
(tutaj: odczyt danych z dwóch plików i zapisanie ich odpowiednio: dane01.txt - do tablicy t1; dane03.txt - do tablicy t2)

Kod: Zaznacz cały

function [t1,t2] = tablica4()      
    source1 = importdata('dane01.txt'); % normalny
    source2 = importdata('dane03.txt'); % anomalia
    tp1 = source1';
    tp2 = source2';
    n = length(tp1);
    m = length(tp2);
  
    for i=1:n
       if(i>1 && i<=n)
          nowa1(i) = tp1(i) - tp1(i-1);
       end
    end
    
    for j=1:m
        if(j>1 && j<=m)
            nowa2(j) = tp2(j) - tp2(j-1);
        end
    end

    t1 = nowa1'; % normalny
    t2 = nowa2'; % anomalia
end
tutaj: wykonanie pewnej operacji na danych z tablicy t1 i zapisanie wyniku do nowej tablicy ('dec'):

Kod: Zaznacz cały

function [mean_de,max_de,dec] = t_dec(t1)
    x = length(t1);
    
    c = 6.1035156E-5 + 0.0034179688; 
    t = mode(t1);                    
    p = 0.01;
    
    for i=1:x
        if(i>1 && i<=x)
            dec(i) = abs(t*c + (t1(i)-t1(i-1)) + p);
        end
    end
end
Nie widzę, co tu namieszałem i dlaczego Matlab się czepia...

-- 13 sty 2013, o 14:32 --

Problem rozwiązany.

O pętli się zapomniało...

Kod: Zaznacz cały

n = length(t2);

for i=1:n
   if((dec(i)*1.25) < t2(i) || (dec(i)*0.75) > t2(i))
        % tutaj kod osbługi błędu (...)
   end
end
Tak to powinno wyglądać, może komuś się przyda :)
ODPOWIEDZ