?? main.c
字號:
//declara玢o dos includes necessarios para o desenvolvimento do programa.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define max_ordem 5
//declara玢o da ordem m醲ima da matriz. Notar que pode ser alterado para comportar uma matriz de ordem maior que 5.
void criar_vetor_solX(int ordem, float vetor[max_ordem]) //fun玢o que cria o vetor com as solu琿es X,usando a primeira estimativa como [0..]
{
int i;
for (i=0;i <ordem; i++)
{
vetor[i] = 0;
}
}
void carregar_matriz(int ordem, float matriz[max_ordem][max_ordem]) //fun玢o para iniciar a matriz de ordem N e inserir os valores dos coeficientes
{
int i,j;
printf("Digite os coeficientes da matriz:\n");
for(i=0;i<ordem; i++)
{
for (j=0; j<ordem; j++)
{
printf("Digite o coeficiente da posicao [%d] [%d]:", (i+1),(j+1));
scanf("%f",&matriz[i][j]);
fflush(stdin);
}
}
}
void carregar_solucao(int ordem, float vetor[max_ordem]) //fun玢o que inicia o vetor de ordem N e insere os valores das solu琿es.
{
int j;
printf("Digite os resultados das equacoes: \n");
for (j=0; j <ordem; j++)
{
printf("Digite o resultado %d:", (j+1));
scanf("%f",&vetor[j]);
fflush(stdin);
}
}
void matriz_C(int ordem, float matriz[max_ordem][max_ordem],float matriz_aux[max_ordem][max_ordem]) //fun玢o para criar a matriz C= -(L + R)
{
int i,j;
float aux = 0;
for( i=0;i<ordem; i++)
{
for( j=0;j<ordem; j++)
{
matriz_aux[i][j] = (matriz[i][j]/matriz[i][i]);
}
matriz_aux[i][i] = 0;
}
}
void vetor_B(int ordem, float vetor[max_ordem],float vetor_sol[max_ordem], float matriz[max_ordem][max_ordem]) //fun玢o que cria o vetor B de x = Cx +B
{
int i;
for (i=0;i<ordem;i++)
{
vetor[i] = (vetor_sol[i]/matriz[i][i]);
}
}
void multiplicar(int ordem, float matriz[max_ordem][max_ordem], float vetor_X[max_ordem], float vetor_aux[max_ordem], float vetor_g[max_ordem]) //fun玢o para calcular a multplica玢o da matriz e pr髕imo elemento da intera玢o
{
float aux = 0;
int i,j;
for (i=0;i<ordem; i++)
{
aux = 0;
for (j =0; j< ordem; j++)
{
aux = (aux + matriz[i][j] * vetor_X[j]);
}
vetor_aux[i] = (vetor_g[i] - aux );
}
}
void troca(int ordem, float vetor_X[max_ordem], float vetor_aux[max_ordem]) //fun玢o para trocar um vetor por outro.
{
int i;
for (i=0; i<ordem; i++)
{
vetor_X[i] = vetor_aux[i];
}
}
float f_erro( int ordem, float vetor_X[max_ordem], float vetor_aux[2], float vetor_aux2[2] )// fun玢o que calcula o erro, para a condi玢o de parada.
{
int i;
float erro;
float aux[max_ordem];
float max_x;
for (i =0; i< ordem; i++)
{
vetor_aux2[i] = fabs( ( vetor_aux[i] - vetor_X[i] ) );
aux[i] = fabs(vetor_aux[i]);
}
erro = vetor_aux2[0];
for (i =1; i < ordem; i++)
{
if (erro < vetor_aux2[i])
{
erro = vetor_aux2[i];
}
}
max_x = aux[0];
for (i =1; i < ordem; i++)
{
if (max_x < aux[i])
{
max_x = aux[i];
}
}
erro = (erro/max_x);
return(erro);
}
int main() {
//declara玢o das variaveis usadas no programa.
float matriz[max_ordem][max_ordem], matriz_c[max_ordem][max_ordem], vetor_sol[max_ordem], vetor_X[max_ordem], vetor_g[max_ordem], vetor_aux[max_ordem], vetor_max2[max_ordem];
float err, aux;
int ordem, interacoes, i ;
//cria玢o da tela inicial de apresenta玢o
printf("Projeto de C醠culo Num閞ico \n");
printf("Prof. 蓃ica Regina Filletti Nascimento \n");
printf("Turma C, integrantes: \n \n");
printf("Paula Costa RA:296546 \n");
printf("Priscila Guedes RA:296821 \n");
printf("Marcelo Almeida Pina RA:297356 \n");
printf("Diego Issamu Kyota RA:297445 \n");
printf("Karen Coletto Gandelman RA:296775 \n");
printf("presiona ENTER para continuar...");
getchar();
printf("\n\n");
//inser玢o dos dados para os calculos.
printf("Digite a ordem da matriz:");
scanf("%d",&ordem);
fflush(stdin);
carregar_matriz(ordem, matriz);
carregar_solucao(ordem,vetor_sol);
printf("\n");
printf("Digite o erro maximo:");
scanf("%f", &err);
fflush(stdin);
printf("Digite o numero maximo de interacoes: ");
scanf("%d",&interacoes);
printf("\n\n");
fflush(stdin);
aux = 9999.99;
//cria玢o dos vetores de solu玢o, da matriz C.
criar_vetor_solX(ordem, vetor_X);
criar_vetor_solX(ordem, vetor_aux);
vetor_B(ordem, vetor_g,vetor_sol,matriz);
matriz_C(ordem, matriz,matriz_c);
//inicio do calculo interativo usando o m閠odo de Gauss-Jacobi.
while ( (interacoes >0) && (aux > err) )
{
interacoes --;
troca(ordem, vetor_X,vetor_aux);
multiplicar(ordem, matriz_c,vetor_X,vetor_aux,vetor_g);
aux = f_erro(ordem, vetor_X, vetor_aux, vetor_max2);
}
//inicio da impress鉶 dos resultados.
printf("solucao do sistema: \n");
for (i =0; i <ordem; i++)
{
printf("X%d:%f \n",(i+1), vetor_aux[i]);
}
printf("com um erro maximo de : %f \n", aux);
//fim do programa.
return (EXIT_SUCCESS);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -