Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- // #include <iostream>
- // #include <cstdlib>
- using namespace std;
- int main() {
- int ex1a, ex1b, ex1c, ex1d, ex1e, ex1r;
- int ex2a, ex2b, ex2c, ex2d, ex2e, ex2r;
- int ex3a, ex3b, ex3c, ex3d, ex3e, ex3r;
- int ex4a, ex4b, ex4c, ex4d, ex4e, ex4r;
- int ex5a, ex5b, ex5c, ex5d, ex5e, ex5r;
- system("clear"); // cls for cmd/powershell | clear for bash terminal
- cout << "5 Equations 5 Unknowns Calculator (JACOBI)" << endl;
- cout << "Must not have any spaces and include the constant (1a+2b+3c+4d+5e=-6)" << endl << endl;
- // INPUT
- cout << "Enter equation 1: ";
- scanf("%d%*c%d%*c%d%*c%d%*c%d%*c%*c%d", &ex1a, &ex1b, &ex1c, &ex1d, &ex1e, &ex1r);
- cout << "Enter equation 2: ";
- scanf("%d%*c%d%*c%d%*c%d%*c%d%*c%*c%d", &ex2a, &ex2b, &ex2c, &ex2d, &ex2e, &ex2r);
- cout << "Enter equation 3: ";
- scanf("%d%*c%d%*c%d%*c%d%*c%d%*c%*c%d", &ex3a, &ex3b, &ex3c, &ex3d, &ex3e, &ex3r);
- cout << "Enter equation 4: ";
- scanf("%d%*c%d%*c%d%*c%d%*c%d%*c%*c%d", &ex4a, &ex4b, &ex4c, &ex4d, &ex4e, &ex4r);
- cout << "Enter equation 5: ";
- scanf("%d%*c%d%*c%d%*c%d%*c%d%*c%*c%d", &ex5a, &ex5b, &ex5c, &ex5d, &ex5e, &ex5r);
- // PROCESS - JACOBI
- int k = 1;
- bool isInfinite = false;
- double oldA = 0, oldB = 0, oldC = 0, oldD = 0, oldE = 0;
- double newA, newB, newC, newD, newE;
- double errorA, errorB, errorC, errorD, errorE, errorAvg;
- while (true) {
- newA = -(-ex1r + (ex1b * oldB) + (ex1c * oldC) + (ex1d * oldD) + (ex1e * oldE)) / ex1a;
- newB = -(-ex2r + (ex2a * oldA) + (ex2c * oldC) + (ex2d * oldD) + (ex2e * oldE)) / ex2b;
- newC = -(-ex3r + (ex3a * oldA) + (ex3b * oldB) + (ex3d * oldD) + (ex3e * oldE)) / ex3c;
- newD = -(-ex4r + (ex4a * oldA) + (ex4b * oldB) + (ex4c * oldC) + (ex4e * oldE)) / ex4d;
- newE = -(-ex5r + (ex5a * oldA) + (ex5b * oldB) + (ex5c * oldC) + (ex5d * oldD)) / ex5e;
- errorA = abs((newA-oldA)/newA);
- errorB = abs((newB-oldB)/newB);
- errorC = abs((newC-oldC)/newC);
- errorD = abs((newD-oldD)/newD);
- errorE = abs((newE-oldE)/newE);
- errorAvg = (errorA + errorB + errorC + errorD + errorE)/5;
- if (errorAvg <= 0.0000000001) {
- break;
- } else if (errorAvg >= 100) {
- isInfinite = true;
- break;
- } else {
- oldA = newA;
- oldB = newB;
- oldC = newC;
- oldD = newD;
- oldE = newE;
- }
- k++;
- }
- // OUTPUT
- if (isInfinite == false) {
- cout << endl << "-----JACOBI-----" << endl;
- printf("at k = %d\n", k);
- printf("a = %lf\n", newA);
- printf("b = %lf\n", newB);
- printf("c = %lf\n", newC);
- printf("d = %lf\n", newD);
- printf("e = %lf\n", newE);
- printf("%.12lf >= 0.0000000001?\n", errorAvg);
- } else {
- cout << endl << "Results are reaching infinity" << endl;
- cout << "Rearrange or change your values to be diagonally dominant." << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement