⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Implementation of Jacobi method in Windows
💻 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 + -