Page MenuHomec4science

Jaccobifunction.cpp
No OneTemporary

File Metadata

Created
Sat, Jun 1, 03:01

Jaccobifunction.cpp

//
// Created by choitel on 12/3/18.
//
#include <iostream>
#include <cmath>
#include "Jaccobi.h"
using namespace std;
//Copy constructor//
Jaccobi::Jaccobi(const Jaccobi &otherJaccobi) {
A=otherJaccobi.A;
b=otherJaccobi.b;
x_0=otherJaccobi.x_0;
tol=otherJaccobi.tol;
}
//Constructors
Jaccobi::Jaccobi(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;
}
Jaccobi::Jaccobi(Matrix m_A, Vector m_b, Vector m_x_0) {
A=m_A;
b=m_b;
x_0=m_x_0;
tol=1e-12;
}
Jaccobi::Jaccobi(Matrix m_A, Vector m_b, double m_tol) {
A=m_A;
b=m_b;
x_0;
tol=m_tol;
}
Jaccobi::Jaccobi(Matrix m_A, Vector m_b) {
A=m_A;
b=m_b;
x_0;
tol=1e-12;
}
Vector Jaccobi::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 iter = 0;
while(norm_e>1/100 && iter<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) * xold[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=1;i<=size;++i){
norm_e=norm_e + e[i]*e[i];
}
norm_e=sqrt(norm_e);
iter =iter +1;
}
cout << "le nombre d'itérations du code est : " << endl;
cout << iter << endl;
for(int i = 1;i<=size;++i)
{
sol(i)=x[i];
}
return sol;
}

Event Timeline