Ir ao conteúdo

Soluação de sistema lineares


Talleyrand

Posts recomendados

Postado

Olá,

gostaria de saber se alguém poderia me ajudar nesse exercício aqui fiz mais ou menos umas coisas aqui mas não tá dando certo, tô começando a estudar isso agora aí to meio enrolado nisso se alguém pode me ajudar aí...

Preciso entregar essa mas 4 questões que é um trabalho de cal.num.

Valeu !


Exercício:
Resolva o sistema Linear pelo método de Gauss
2.1756*x1 + 4.0231*x2 - 2.1732*x3 + 5.1967*x4 = 17.102
-4.0231*x1 + 6.0000*x2 + + 1.1973*x4 = -6.1593
-1.000*x1 - 5.2107*x2 +1.1111*x3 = 3.0004
6.0235*x1 + 7.0000*x2 - 4.1561*x4 = 0.0000



#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main()
{
int i,j,k;
double vetcoef[4][4],vetcons[4][1],mut,soma,sol[4][1];

/*entrada dos coeficiente do sistema 'a' */

for(i = 0 ; i < 4 ; i++ )
{
for( j = 0 ; j < 4 ; j++ )
{
printf("Entre com os valores coeficientes das equacoes: [A%i%i]: ",i+1,j+1);
scanf("%d",&vetcoef[i][j]);
}
}

/* Entrada das constantes 'b' */

for(i = 0 ; i < 4 ; i++ )
{
printf("Entre com os valores das constantes das equacoes: [B%i%i]: ",i+1,j+1);
scanf("%d",&vetcons[i][j]);
}

/* triangulação da matriz 'a' */

for( k = 1 ; k < 3 ; k++)
{
for(i=k+1;i<4;i++)
{
mut =( vetcoef[i][k] ) / ( vetcoef[k][k] );
vetcoef[i][k] = 0;
for(j= k + 1 ; j<4 ; j++ )
{
vetcoef[i][j] = vetcoef[i][j] - mut * vetcoef[k][j];
vetcons[i][1] = ( vetcons[i][1] - mut * vetcons[k][1]);
}
}
}

/* resolução do sistema */

sol[4][1] = vetcons[4][1] / vetcoef[4][4];
for( k = 3 ; k>1 ; k-- )
{
soma = 0;
for( j = 4; j< 4; j++ )
{
soma = soma + vetcoef[k][j] * sol[j][1];
sol[k][1] = ( vetcons[k][1] - soma ) / vetcoef[k][k];
}
}

/* imprime a solução */

printf("Vetor solucao\n ");
for(i = 0 ; i < 4 ; i++ )
{
printf("\n|");
for( j = 4 ; j < 4 ; j++ )
{
printf("%d",sol[k][j]);
}
printf(" |");
}
printf("\n\n");
system ("pause");
}


Se quizerem eu posto as outras quetões para quem quiser me ajudar! :lol::aplausos:

Postado

eu tava pensando nessa questão aqui e refiz ela mudando algumas coisas e resultou nesse programa:



#include<stdio.h>
#include<stdlib.h>
#define nl 4
#define nc 4
#define n 4

main()
{
int i,j,k;
float vetcoef[nl][nc],vetcons[nl][nc],vetsol[nl][1],mult,soma;
for(i = 0 ; i < nl ; i++ )
{
for( j = 0 ; j < nc ; j++ )
{
printf("Digite os coeficiente das esquacoes A[%i][%i]: ", i+1,j+1);
scanf("%f",&vetcoef[i][j]);
}
}
for( i = 0 ; i < nl ; i++ )
{
printf("Digite os coeficiente constantes das esquacoes B[%i][%i]: ", i+1,nc);
scanf("%f",&vetcons[i][j]);
}
/* tranformação do sistema original em um sistema triangular superior*/
for( k = 1 ; k < n ; k++ )
{
for( i = ( k + 1 ) ; i <= n ; i++ )
{
mult = vetcoef[i][k] / vetcoef[k][k];
vetcoef[i][k] = 0;
for( j = ( k + 1 ) ; j <= n ; j++ )
vetcoef[i][j] = vetcoef[i][j] - mult * vetcons[k][j];
vetcons[nl][nc] = vetcons[i][nc] - mult * vetcons[k][nc];
}
}
/* resolução do sistema triangular superior*/
vetsol[nl][1] = vetsol[nl][1] / vetcoef[nl][nc] ;
for( k = ( n - 1 ) ; k > 0 ; k-- )
{
soma = 0;
for( j = ( k + 1 ) ; k <= n ; k++ )
soma = soma + vetcoef[k][j] * vetsol[nl][j];
vetsol[nl][k] = ( vetcons[k][nc] - soma ) / vetcoef[k][k];
}
/* imprime a solução*/
for( i = 0 ; i < nl ; i++ )
{
printf("\n|");
for(j = nc; j < nc ; j++ )
printf("%.4f ",vetsol[i][nc]);
printf(" |");
}
printf("\n");
system("pause");
}


o problema é que ele não tá imprimindo nada de solução na tela

não sei onde tá o erro, se é na parte de imprimir ou se no meio do caminho em alguma conta aí tem algo errado e ele não prosesegue a partir desse erro, de alguém puder me dar uma luz de onde tá o erro aí ficarei agradecido!

valeu

:lol:

Postado

Dei uma olhada rápida, parece que você faz alguns acessos fora da matriz vetsol.

Você a declarou como


vetsol[n1][1];

Isto é o mesmo que declarar como um vetor...


vetsol[n1];

E no fim do código, você acessa


for(j = nc; j < nc ; j++ )
printf("%.4f ",vetsol[i][nc]);
printf(" |");
}

Sendo que 'nc' é igual a 4, ou seja, está fora da matriz.

Além disso, se a ideia é acessar as posições da matriz usando a variável de controle do laço, você deve usar 'j', e não 'i'.

Se 'vetsol' deve ser uma matriz, arrume alí na declaração. Já se o segundo indice for 1, significa que pode ser um vetor simples, então declare-o como tal.

Postado
Dei uma olhada rápida, parece que você faz alguns acessos fora da matriz vetsol.

Você a declarou como


vetsol[n1][1];

Isto é o mesmo que declarar como um vetor...


vetsol[n1];

E no fim do código, você acessa


for(j = nc; j < nc ; j++ )
printf("%.4f ",vetsol[i][nc]);
printf(" |");
}

Sendo que 'nc' é igual a 4, ou seja, está fora da matriz.

Além disso, se a ideia é acessar as posições da matriz usando a variável de controle do laço, você deve usar 'j', e não 'i'.

Se 'vetsol' deve ser uma matriz, arrume alí na declaração. Já se o segundo indice for 1, significa que pode ser um vetor simples, então declare-o como tal.

Eu tava com dúvida nessa parte de como declarar o vetor solução por que ele é obtido a partir de um vertor de duas dimensões, vetcoef[j],aí fiquei na dúvida se colocava ele como de só vetsol ou vet sol[1].mas agora mudei coloquei ele como um vetsol[nl] agora, essa mesma lógida devo usar e colocar o vetcons como vetcons[nl]?

por que o vetcons no caso seria 17.102; -6.1593; 3.004 e 0.000.

Se sim, modifiquei aqui e outras coisas a mais e mesmo assim o programa tá imprimindo uns digitos meios malucos .... -_-

ficou assim depois que mudei



#include<stdio.h>
#include<stdlib.h>
#define nl 3
#define nc 3
#define n 3

main()
{
int i,j,k;
float vetcoef[nl][nc],vetcons[nl],vetsol[nl],mult,soma;
for(i = 0 ; i < nl ; i++ )
{
for( j = 0 ; j < nc ; j++ )
{
printf("Digite os coeficiente das esquacoes A[%i][%i]: ", i+1,j+1);
scanf("%f",&vetcoef[i][j]);
}
}
for( i = 0 ; i < nl ; i++ )
{
printf("Digite os coeficiente constantes das esquacoes B[%i][%i]: ", i+1);
scanf("%f",&vetcons[i]);
}
/* tranformação do sistema original em um sistema triangular superior*/

for( k = 1 ; k < n ; k++ )
{
for( i = k + 1 ; i <= n ; i++ )
{
mult = vetcoef[i][k] / vetcoef[k][k];
for( j = k + 1 ; j <= n ; j++)
vetcoef[i][j] = vetcoef[i][j] - mult * vetcoef[k][k];
vetcons[i] = vetcons[i] - mult * vetcons[k];
}
}
/* resolução do sistema triangular superior*/
vetsol[nl] = vetcons[nl] / vetcoef[nl][nc] ;
for( k = n - 1 ; k > 0 ; k-- )
{
soma = 0;
for( j = ( k + 1 ) ; j<= n ; j++ )
soma = soma + vetcoef[k][j] * vetsol[j];
vetsol[k] = ( vetcons[k] - soma ) / vetcoef[k][k];
}
for(i=0;i<nl;i++)
printf(" %4.2f\n",vetsol[i]);
system("pause");
}

Postado
Linhas 31 e 32 com erros de sintaxe.

Corrigido essa falta de atenção!:D

O erro tá na hora de imprimir a matriz solução...(_(

que não tá aparecendo os valores corretos, estou colocando aqui exemplos resolvidos do livro em que o sistema tem solução única e não aparece a matriz com valores 1 2 -6, por exemplo, tá aparecendo 0.00 -1.#R e -1.#R, ou seja deve ter mais algum outro erro aí de sintaxe ou atribuição , eu acho, que não estou conseguindo perceber...

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