Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <math.h>
- #include <iostream>
- int n;
- double** A;
- double* B;
- double* X;
- double eps;
- int MLI;
- double** alfa;
- double* beta;
- double* R;
- void funA() {
- n = 5;
- MLI = 60;
- eps = 0.0001;
- //alokacja zmiennych
- A = new double*[n + 1];
- for (int i = 1; i <= n; i++) {
- A[i] = new double[n + 1];
- }
- B = new double[n + 1];
- A[1][1] = 10;
- A[1][2] = 1;
- A[1][3] = 1;
- A[1][4] = 1;
- A[1][5] = 2;
- A[2][1] = 3;
- A[2][2] = 20;
- A[2][3] = 4;
- A[2][4] = 2;
- A[2][5] = 1;
- A[3][1] = 5;
- A[3][2] = 1;
- A[3][3] = 40;
- A[3][4] = 9;
- A[3][5] = 5;
- A[4][1] = 3;
- A[4][2] = 0;
- A[4][3] = 1;
- A[4][4] = 10;
- A[4][5] = 1;
- A[5][1] = 6;
- A[5][2] = 2;
- A[5][3] = 1;
- A[5][4] = 1;
- A[5][5] = 20;
- B[1] = 15;
- B[2] = 30;
- B[3] = 60;
- B[4] = 15;
- B[5] = 30;
- }
- void funB() {
- //alokacja zmiennych
- alfa = new double*[n + 1];
- for (int i = 1; i <= n; i++) {
- alfa[i] = new double[n + 1];
- }
- beta = new double[n + 1];
- //wyznaczanie alfa
- for (int i = 1; i <= n; i++) {
- for (int j = 1; j <= n; j++) {
- if (i == j) {
- alfa[i][j] = 0;
- } else {
- if (A[i][i] == 0) { //czy nie dzielimy przez 0
- throw "div by 0";
- } else {
- alfa[i][j] = (-1*A[i][j]) / A[i][i];
- }
- }
- }
- }
- //wyznaczanie beta
- for (int i = 1; i <= n; i++) {
- if (A[i][i] == 0) {
- throw "div by 0";
- } else {
- beta[i] = B[i] / A[i][i];
- }
- }
- }
- void funC() {
- //alokacja pamięci
- X = new double[n + 1];
- for (int i = 1; i <= n; i++) {
- X[i] = 0;
- }
- R = new double[n + 1];
- for (int i = 1; i <= n; i++) {
- R[i] = beta[i];
- }
- //szukanie max
- int s = 1;
- for (int i = 2; i <= n; i++) {
- if (abs(R[i]) > abs(R[s])) {
- s = i;
- }
- }
- //kolejne iteracje
- int lit = 0;
- double blad = 0;
- do {
- lit++;
- X[s] = X[s] + R[s];
- for (int i = 1; i <= n; i++) {
- if (i != s) {
- R[i] = R[i] + alfa[i][s] * R[s];
- }
- }
- R[s] = 0;
- //szukanie max
- s = 1;
- for (int i = 2; i <= n; i++) {
- if (abs(R[i]) > abs(R[s])) {
- s = i;
- }
- }
- blad = abs(R[s]);
- } while (lit <= MLI && !(blad <= eps));
- std::cout << lit << std::endl;
- }
- int _tmain(int argc, _TCHAR* argv[]) {
- funA();
- funB();
- funC();
- std::cout << std::endl << "X: " << std::endl;
- for (int i = 1; i <= n; i++) {
- std::cout << i << ": " << X[i] << std::endl;
- }
- int b = 0;
- std::cin >> b;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement