Page MenuHomec4science

GaussSeidelfunction.cpp
No OneTemporary

File Metadata

Created
Fri, Sep 27, 19:02

GaussSeidelfunction.cpp

//
// Created by choitel on 12/3/18.
//
#include <iostream>
#include <cmath>
#include "GaussSeidel.h"
#include "Matrix.hpp"
#include "Vector.hpp"
using namespace std;
//Copy constructor//
GaussSeidel::GaussSeidel(const GaussSeidel &otherGaussSeidel) {
A=otherGaussSeidel.A;
b=otherGaussSeidel.b;
x_0=otherGaussSeidel.x_0;
tol=otherGaussSeidel.tol;
}
//Constructors
GaussSeidel::GaussSeidel(Matrix m_A, Vector m_b, Vector m_x_0, double m_tol) {
A=m_A;
b=m_b;
x_0=m_x_0;
tol=m_tol;
}
GaussSeidel::GaussSeidel(Matrix m_A, Vector m_b, Vector m_x_0) {
A=m_A;
b=m_b;
x_0=m_x_0;
tol=1e-12;
}
GaussSeidel::GaussSeidel(Matrix m_A, Vector m_b, double m_tol) {
A=m_A;
b=m_b;
x_0;
tol=m_tol;
}
GaussSeidel::GaussSeidel(Matrix m_A, Vector m_b) {
A=m_A;
b=m_b;
x_0;
tol=1e-12;
}
Vector GaussSeidel::Solve() {
int size =length(b);
Vector sol(size);
double x[size];
double xold[size];
double e[size];
double norm_e=1;
for(int i=1;i<=size;++i){
x[i]=0;
xold[i]=0;
e[i]=1;
}
int count = 0;
while(norm_e>tol && count<30) {
for (int i = 1; i <= size; ++i) {
x[i] = b(i) / A(i,i);
for (int j = 1; j <= size; ++j) {
if (i == j) {
} else {
x[i] = x[i] - (A(i,j) * x[j]) / A(i,i);
}
}
if(xold[i]==0){
e[i]=1;
}else {
e[i] = abs((x[i] - xold[i]) / xold[i]);
}
xold[i] = x[i];
}
norm_e=0;
for(int i=0;i<size;++i){
norm_e=norm_e + e[i]*e[i];
}
norm_e=sqrt(norm_e);
count =count +1;
}
cout << "le nombre d'itérations du code est : " << endl;
cout << count << endl;
for(int i = 1;i<=5;++i)
{
sol(i)=x[i];
}
return sol;
}
//double* GaussSeidel(double A[5][5],double b[5])
//{
//}

Event Timeline