Métodos de Gauss-Seidel e Gauss-Jacobi

Algoritmos de implementação dos métodos de Gauss-Seidel e Gauss-Jacobi em C++, pela disciplina de Cálculo Numérico e Computacional.


#include<iostream>
using namespace std;
double erro=0.0000000001;
int len=3;
double A[3][3] = { {3,1,-1}, {2,4,1}, {1,2,4} };
double B[3] = {5,4,6};
double Subtratorio(double *X1,int lin){
double total=0;
for(int i=0;i<len;i++)
if(i!=lin) total-=X1[i]*A[lin][i];
return total;
}
double max(double* X1){
double max=X1[0];
for(int i=0;i<len;i++)
if(X1[i]>max)max=X1[i];
return max;
}
double* diferenca(double* X1,double* Y){
double * dif = new double[len];
for(int i=0;i<len;i++)
dif[i]=X1[i]-Y[i];
return dif;
}
void escreve(double *X1,int iteracao){
cout << "P/ K=" << iteracao << endl;
for(int i=0;i<len;i++)
cout << "x" << i << " = " << X1[i] << " ";
cout << endl;
}
void copy(double *X1, double *X2){
for(int i=0;i<len;i++)
X1[i]=X2[i];
}
double abs(double v){
if(v<0)return v*-1;
return v;
}
void Jacob(){
double X[3] = {0,0,0};
double X1[len];
int iteracao=0;
while(true){
for(int i=0;i<len;i++)
X1[i] = ((B[i] + Subtratorio(X,i))/A[i][i]);
escreve(X1,iteracao++);
if(abs(max(diferenca(X,X1))) < erro)break;
copy(X,X1);
}
}
void Seidel(){
double X[3] = {0,0,0};
double X1[len];
int iteracao=0;
copy(X1,X);
while(true){
for(int i=0;i<len;i++)
X1[i] = (B[i] + Subtratorio(X1,i))/A[i][i];
escreve(X1,iteracao++);
if(abs(max(diferenca(X,X1))) < erro)break;
copy(X,X1);
}
}
int main(){
cout.setf(ios::fixed);
cout.precision(10);
cout << "Gaus-Jacob";
Jacob();
cout << endl<< endl << "Gaus-Seidel" << endl;
Seidel();
return 0;
}

Compartilhe:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • FriendFeed
  • LinkedIn
  • Live
  • MySpace
  • PDF
  • Rec6
  • Reddit
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Twitter
  • Yahoo! Bookmarks
  • Identi.ca
  • Netvibes
  • Tumblr
  • blogmarks
  • Posterous
  • Yahoo! Buzz

Posts relacionados:

  1. Algoritmo: Ajudando a prefeitura
  2. Algoritmo: O imperador Lu Zhin Du
  3. Algoritmo: Os tesouros de Shaou Lee
  4. Alguns algoritmos da Regional da Maratona da ACM 2007
  5. Desenhando curvas de Hermite em Java

Tags: ,

This entry was posted on quinta-feira, setembro 18th, 2008 at 21:52 and is filed under algoritmos. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Comments are closed.