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

📄 jacobi.c

📁 Inplementation of Gauss-Jacobi method
💻 C
字号:
/*  * File:   Gauss.c * Author: jaziel * * Created on 6 de Junho de 2008, 20:10 */#include <stdio.h>#include <stdlib.h>#include <math.h>#define max_ordem 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 posição [%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 equações: \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óximo 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álculo Numérico \n");    printf("Prof. Érica 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 interações: ");    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étodo 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); 	                   }            printf("solução 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);                    return (EXIT_SUCCESS);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -