Ir ao conteúdo
  • Cadastre-se
Mateus Andrade Ferreira

RESOLVIDO MatLab Output argument "maxA" (and maybe others) not assigned during call to...

Recommended Posts

Bom dia galera fiz o programa abaixo que calcula o maior autovalor de uma matriz, ele funcionou bem para o exemplo que eu tinha aqui, matriz A=[3 0 1;2 2 2;4 2 5], porém quando tentei usar outra matriz recebi o seguinte erro:

 

Error in autov (line 4)
[m,n]=size(A);
 
Output argument "maxA" (and maybe others) not assigned during call to
"C:\Users\Mateus\Dropbox\Mestrado\Métodos numéricos\listas\Lista 2\menu\autov.m>autov".
 
se alguem puder me ajudar agradeço. Sei que meu programa é meio complicado, mas talvez alguém possa me ajudar apenas com o erro.
    function [ maxA,iter ] = autov( A,toler,itermax )%entrada: matriz, precisão, usada no exemplo, 0.001, e número máximo de iterações%Saída: o maior autovalor e o numero de iterações[m,n]=size(A);y0=ones(n,1);erro=toler+1;iter=0;z1=zeros(n,1);av=z1;av0=av;z1=A*y0;%calcula o z inicialvetor_E=zeros(n,1);%ITERAÇÕES. ATÉ ENCONTRAR A PRECISÃO DESEJADAwhile erro>=toler && itermax>iter     iter=iter+1;    alpha=0;    for i=1:1:n %encontra o maior elemento de Z1 em módulo e armazena em alpha        if abs(z1(i,1))>alpha        alpha=abs(z1(i,1));        end    end    y1=(1/alpha)*z1; %CALCULA O Y INICIAL        z1=A*y1; %CALCULA O NOVO VALOR DE Z(K+1)           for i=1:1:n %encontra o vetor erro    vetor_E(i,1)=abs(y1(i,1)-y0(i,1))/abs(y1(i,1));    end        menor=0;    maior=0;     for i=1:1:n %encontra o maior e o menor elementos do vetor erro em módulo para o cálculo da precisão        if abs(vetor_E(i,1))>maior        maior=abs(vetor_E(i,1));        end        if abs(vetor_E(i,1))<menor        menor=abs(vetor_E(i,1));        end    end        erro=maior-menor;%calcula a precisão para verificar se chegou a esperada    av0=(z1./y1);%CARREGA O VETOR DE AUTOVALORES%VERIFICA QUAL VALOR TEVE MENOR VARIAÇÃO    menor=0;     for i=1:1:n %encontra o maior e o menor elementos do vetor erro em módulo para o cálculo da precisão    menor=abs(av(i,1));        if abs(av0(i,1)-av(i,1))<menor        maxA=abs(av(i,1));        end    end      y0=y1; %CARREGA Y0 COM O VALOR DE Y1 PARA A ITERAÇÃO SEGUINTEav=av0; %endy1end

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

"maxA" está dentro de um condicional, o que significa que se a condição nunca for atendida ele nunca receberá valor algum, e a função não terá nenhum valor pra retornar para esta variável de saída, o que resulta em erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×