• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Adriano Vieira

Matlab

5 mensagens neste tópico

Olá amigos,

estou com um probleminha com o matlab :wallbash:, mas acredito que vocês possam me ajudar.

criei um laço para processar uma matriz.

o problema está no comprimento da matriz, muito grande!

o fragmento abaixo está demorando muito para ser cumprido.

o que faço para resolver esse problema?

for q = 1:length(A) %verif_1 

    for p = 1:length(C)
        dist(p) = sqrt(sum((A(q,(1:2)) - C(p,(1:2))).^2)) ;
    end

[MenorValor,Posicao] = min(dist) ;
VetorMenoresDist(q, = [C(Posicao, A(q, MenorValor] ;
clear dist 

end

------------------------------------------------------------------------------

  Name      Size                   Bytes  Class

  A    351082x3                  8425968  double array

  C   1523964x3                 36575136  double array

Grand total is 5625138 elements using 45001104 bytes

------------------------------------------------------------------------------

Grato por tudo, :hmm:

Adriano.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também já tive esse tipo de problemas.

Primeiro, se souberes programar numa linguagem mais básica, será preferível, pois este programa como sabes é bastante pesado - recomendo fortran que é a linguagem de eleição para cálculo numérico.

Caso só saibas matlab e não te queiras dar ao trabalho de aprender outra coisa, tenta evitar os ciclos, usa antes as funções embutidas no programa, pois são por norma muito mais rápidas que os ciclos. Por outro lado, podes sempre trabalhar apenas com "pedaços" da matriz principal e só no final é que juntas tudo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sinceramente não estou a ver qual é o problema aí. Qto tempo é que isso demora? É que é mesmo suposto demorar muito.

Estás a fazer um total de 5 milhões e tal de iterações desse ciclo mais pequeno e a processar 45 megas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E se mostrasses o código completo era mais fácil ver onde pode estar o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora