Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<conio.h>
- #include <locale.h>
- #include<math.h>
- #include<cmath>
- int main()
- {
- setlocale(LC_ALL, "Rus");
- printf("Лабораторная работа № 2.\n");
- printf("Вариант № 27.\n");
- printf("Решение системы линейных алгебраических уравнений методом релаксации.\n");
- printf("Выполнил: студент гр.ИВТАПбд-21 Юкин Б.С.\n");
- printf("Проверил: доцент кафедры ПМИ Кувайскова Ю.Е.\n");
- printf("Введите количество уравнений и количество неизвестных переменных через пробел:\n\n");
- int n;
- int m;
- scanf("%d %d", &n, &m);
- printf("\n");
- printf("Введите все коэффициенты перед х1, х2, х3, х4, разделяя пробелами:\n\n");
- double a[100][100];
- double f[100];
- double b[100];
- int i;
- int j;
- int c = 0;
- int p = 0;
- int t = 0;
- int s = 0;
- int z = 0;
- int y = 0;
- for (i = 0; i < n; i++)
- {
- f[i] = 0;
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < m; j++)
- {
- scanf("%lf", &a[i][j]);
- }
- }
- printf("\n");
- printf("Введите все свободные члены, разделяя пробелами:\n\n");
- for (i = 0; i < n; i++)
- {
- scanf("%lf", &b[i]);
- }
- printf("\n");
- for (i = 0; i < n; i++)
- {
- b[i] = b[i] / a[i][i];
- for (j = 0; j < m; j++)
- {
- if (i != j)
- {
- a[i][j] = a[i][j] / (-a[i][i]);
- }
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < m; j++)
- {
- if (i == j)
- {
- a[i][j] = -1;
- }
- }
- }
- printf("Система, подготовленная к реклаксации:\n\n");
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < m; j++)
- {
- printf("%.4lf ", a[i][j]);
- }
- printf("%.4lf ", b[i]);
- printf("\n");
- }
- printf("\n\n");
- printf("Первоначальные невязки:\n\n");
- for (i = 0; i < n; i++)
- {
- printf("R%d= %.4lf\n", i+1, b[i]);
- }
- printf("\n");
- for (int k = 0; k<n; k++)
- {
- s++;
- double max = b[0];
- for (i = 0; i < n; i++)
- {
- if (abs(b[i]) > 0.001)
- {
- if (p == 0)
- {
- for (j = 0; j < n; j++)
- {
- if (abs(b[j]) > abs(max))
- {
- max = b[j];
- c = j;
- }
- }
- p = 1;
- }
- for (int q = 0; q < n; q++)
- {
- if ((b[q] == max)&&(z==0))
- {
- f[q] = f[q] + b[q];
- z = 1;
- }
- }
- y = 1;
- }
- if ((b[0] == max)&&(i!=0))
- {
- t = 1;
- if (i > 0)
- {
- b[i] = b[i] + a[i][0] * max;
- }
- if (i == n-1)
- {
- b[0] = 0;
- }
- }
- if ((b[0] != max)&&(t==0))
- {
- if (b[0] == 0)
- {
- i = 0;
- }
- b[c] = 0;
- if (i != c)
- {
- b[i] = b[i] + a[i][c] * max;
- }
- }
- }
- p = 0;
- t = 0;
- if (abs(b[k]) > 0.001)
- {
- k = 0;
- }
- z = 0;
- if (y == 1)
- {
- printf("Результат %d-й итерации:\n\n", s);
- for (i = 0; i < n; i++)
- {
- printf("R%d= %.4lf\n", i+1, b[i]);
- }
- printf("\n");
- }
- y = 0;
- }
- double max = b[0];
- for (i = 0; i < n; i++)
- {
- if (abs(b[i])>abs(max))
- {
- max = b[i];
- c = i;
- }
- }
- f[c] = f[c] + max;
- printf("Значения корней:\n\n");
- for (i = 0; i < n; i++)
- {
- printf("x%d= %.4lf\n", i+1, f[i]);
- }
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement