Ir ao conteúdo

Posts recomendados

Postado

Ola,

estou desenvolvendo um programa para calcular os autovalores de uma matriz NxN.

Acabei optando por utilizar a biblioteca  GSL- GNU Sciefic library(http://www.gnu.org/software/gsl/)

Eu nunca utilizei bibliotecas desse tipo, mas segui o tutorial e deu tudo certo.

Para fazer os testes eu estou usando duas matrizes 2x2 que eu sei os resultados corretos dos autovalores para depois ampliar e utilizar para qualquer matriz NxN.

Mas o programa que eu fiz esta dando erro de segmentaçao.

o Codigo é:

#include <stdio.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_eigen.h>

	double data[] = { 	-2.037381e-003,  -1.329865e-003,-3.280068e-003, 5.025134e-003};

//	double data[] = { -2.037381e-003,  2.037381e-003,  5.025134e-003,-5.025134e-003};


int main(int argc, char ** argv){
	int i, j;

	gsl_matrix_view m	= gsl_matrix_view_array (data, 2, 2);
			
	for(i = 0; i < 2; i++)  
		for(j = 0; j < 2; j++)
			printf ("m(%d,%d) =%g\n", i, j,gsl_matrix_get (&m, i, j));


	gsl_vector	*eval = gsl_vector_alloc (2);
	gsl_matrix	*evec = gsl_matrix_alloc (2, 2);
	
	gsl_eigen_nonsymmv_workspace *w =	gsl_eigen_nonsymmv_alloc (2);

	gsl_eigen_nonsymmv (&m.matrix, eval, evec, w);
	gsl_eigen_nonsymmv_free (w);
	gsl_eigen_nonsymmv_sort (eval, evec,GSL_EIGEN_SORT_ABS_DESC);
	
	for(i = 0; i < 2; i++){
		double eval_i = gsl_vector_get (eval, i);
		gsl_vector_view evec_i	= gsl_matrix_column (evec, i);
		printf ("eigenvalue =	%g	\n	", eval_i);
		printf ("eigenvector =	\n	");
		gsl_vector_fprintf (stdout,	&evec_i.vector, "	%g	");
	}

	return	0;
}

quando o programa esta rodando no comando: gsl_eigen_nonsymmv

ele me retorna esse erro; Falha de segmentação (imagem do núcleo gravada)

 

Alguém saberia dizer qual o problema?

De qualquer forma aceito sugestoes de outras bibliotecas ou codigos para resolver o meu problema.

desde ja, muito Obrigada.

  • 2 semanas depois...
Postado

Oi, eu não entendo de GSL... mas pelo site da biblioteca:

https://www.gnu.org/software/gsl/manual/html_node/Eigenvalue-and-Eigenvector-Examples.html

No seu código eval e evec tem que ser respectivamente:

gsl_vector_complex	*eval = gsl_vector_complex_alloc (2);
gsl_matrix_complex	*evec = gsl_matrix_complex_alloc (2, 2);

Tenta lá. No meu computador não deu mais erro de segmentação.

Embora eu não faço a menor ideia do que é eigenvalue, eigenvector... :)

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!