Ir ao conteúdo
  • Cadastre-se

Ajuda com codigo de L.U.


rennanbighi

Posts recomendados

Galera, estou implementando uma decomposição LU em C. O programa vai ler uma matriz dada e vai fatorá-la no produto de 2 matrizes (uma inferior - L - e uma superior - U). Acontece que, meu código nao esta dando erro de compilação, mas creio estar fazendo algo errado na leitura da matriz inicial A, pois os valores armazenados são na maioria 0... o que nao deveria ser... Alguém dá uma ajuda? PS: O primeiro printf que coloquei é um teste, somente...

#include<stdio.h>#include<stdlib.h>#include<math.h>
int main(){
	float a[3][3], b[3][3], l[3][3], u[3][3];	int k, i, j, s, n;	n = 5;
	i = j = k = s = 0;
	for (i=0; i<n; i++)	{		for (j=0; j<n; j++)		{	            a[i][j] = (1/(i+(j-1)));  // função que recebe a matriz a 
			l[i][j] = 0;			u[i][j] = 0;			printf("%f", a[i][j]);		}			l[i][i] = 1;	}
	for (i=0; i<n; i++)	{		for (j=0; j<n; j++)		{			if (i<=j)			{				s = 0;				for (k=0; k<i; k++)				{					s = s + (l[i][j] * u[k][j]);				}				u[i][j] = a[i][j] - s;			}			else			{				s = 0;				for (k=0; k<j; k++)				{					s = s + (l[i][k] * u[k][j]);				}				if (u[j][j] == 0)				{					printf("Divisão por zero! Metodo nao apropriado!");				}				else				{					l[i][j] = (a[i][j] - s) / u[j][j];				}			}		}	}
	for (i=0; i<n; i++)	{		for (j=0; j<n; j++)		{			printf("%f", u[i][j]);			printf("%f", l[i][j]);		}	}} 
Link para o comentário
Compartilhar em outros sites

Não entendo nada desse cálculo, mas você está definindo o limite como n(5) em matrizes 3x3. Você está lendo e escrevendo em área "proibida".

Outra coisa, o comando

a[j] = (1/(i+(j-1)));

frequentemente dá divisão por 0. Então tem que colocar um tratamento de exceção, ou verificar com if se i+j-1==0 pra poder fazer o cálculo.

De resto precisaria saber que calculo você quer fazer, para saber em que ele difere do que o algoritmo está fazendo (se houver diferença).

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...