📄 jacobi.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 + -