Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdlib.h"
- #include "stdio.h"
- #include "math.h"
- float* seidel(int size, float** A, float eps)
- {
- float* x = (float*)malloc(sizeof(float) * size);
- for (int i = 0; i < size; i++)
- x[i] = 0;
- char converge = 0;
- while (!converge)
- {
- float* x_new = (float*)malloc(sizeof(float) * size);
- for (int i = 0; i < size; i++)
- x_new[i] = x[i];
- for (int i = 0; i < size; i++)
- {
- float s1 = 0, s2 = 0;
- for (int j = 0; j < i; j++)
- s1 += A[i][j] * x_new[j];
- for (int j = i + 1; j < size; j++)
- s2 += A[i][j] * x[j];
- x_new[i] = (A[i][size] - s1 - s2) / A[i][i];
- }
- float sum = 0;
- for (int i = 0; i < size; i++)
- sum += (x_new[i] - x[i]) * (x_new[i] - x[i]);
- converge = sqrtf(sum) <= eps;
- free(x);
- x = x_new;
- }
- return x;
- }
- int main(int argc, char** argv)
- {
- int size = 0;
- do {
- printf("Введите порядок матрицы:\n");
- scanf("%d", &size);
- } while (size < 1);
- float** a = (float**)malloc(sizeof(void*) * size);
- printf("Введите матрицу:\n");
- for (int i = 0; i < size; i++)
- {
- a[i] = (float*)malloc(sizeof(float) * (size + 1));
- for (int j = 0; j <= size; j++)
- scanf("%f", &a[i][j]);
- }
- printf("\n");
- float* x = seidel(size, a, 0.001f);
- for (int i = 0; i < size; i++)
- {
- printf("x[%d]=%f\n", i + 1, x[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement