Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float max_nondiagonal_elem(int &l, int &m, matrix a)
- {
- float max = abs(a[0][1]);
- int i = 0, j = 1; l = i; m = j;
- for (int i = 0; i < n - 1; i++)
- for (int j = n - 1; j > i; j--)
- if (abs(a[i][j]) > max)
- {max = abs(a[i][j]); l = i; m = j;}
- return a[l][m];
- }
- float rot_condition(matrix a)
- {
- float s = 0.0;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- if (i != j) s += a[i][j] * a[i][j];
- return sqrt(s);
- }
- void iterative_method_of_rotations()
- {
- int l = 0, m = 0; matrix h, ht, t, a1, u;
- copy_matr(a, a1);
- fprintf(fw, "Iterative method of rotations\n\n");
- fprintf(fw, "Count of iterations = %d\n\n", 0);
- float c = rot_condition(a1);
- int k = 0;
- printmatr(a1); e_matr(u);
- fprintf(fw, "T(A)^(1/2) = %.8f\n\n", c);
- while (c >= eps)
- {
- ++k;
- float max = max_nondiagonal_elem(l, m, a1);
- fprintf(fw, "max = %.3f\n\n", max);
- float alpha = atan(2 * a1[l][m] / (a1[l][l] - a1[m][m])) / 2;
- fprintf(fw, "alpha = %.8f\n\n", alpha);
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- if (i == j) h[i][j] = ht[i][j] = 1.0;
- else h[i][j] = ht[i][j] = 0.0;
- h[l][l] = ht[l][l] = h[m][m] = ht[m][m] = cos(alpha);
- h[m][l] = ht[l][m] = sin(alpha); h[l][m] = ht[m][l] = -sin(alpha);
- fprintf(fw, "Rotation matrix\n");
- printmatr(h);
- mult_matr(ht, a1, t);
- mult_matr(t, h, a1);
- mult_matr(u, h, t);
- copy_matr(t, u);
- fprintf(fw, "Count of iterations = %d\n\n", k);
- fprintf(fw, "A matrix\n");
- printmatr(a1);
- c = rot_condition(a1);
- fprintf(fw, "T(A)^(1/2) = %.8f\n\n", c);
- }
- float y[n];
- for (int j = 0; j < n; j++) {
- fprintf(fw, "l%d = %.8f\n\n", j + 1, a1[j][j]);
- fprintf(fw, "vector x%d : ", j + 1);
- for (int i = 0; i < n; i++)
- {fprintf(fw, "%.8f ", u[i][j]); y[i] = u[i][j];}
- fprintf(fw,"\n\n");
- fprintf(fw, "norma(gamma) = %.8f\n\n", desp_max(a1[j][j], y, a));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement