Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<stdlib.h>
  4. #define eps 1.0e-5
  5.  
  6. int n;
  7. bool converge(double *xk, double *xkp)
  8. {
  9. double norm = 0;
  10. for (int i = 0; i < n; i++)
  11. norm += (xk[i] - xkp[i])*(xk[i] - xkp[i]);
  12. return (sqrt(norm)<eps);
  13. }
  14.  
  15. double Zeydel(double **a,double *b,double *x, double *p)
  16. {
  17. do
  18. {
  19. for (int i = 0; i < n; i++)
  20. p[i] = x[i];
  21. for (int i = 0; i < n; i++)
  22. {
  23. double var = 0;
  24. for (int j = 0; j < i; j++)
  25. var += (a[i][j] * x[j]);
  26. for (int j = i + 1; j < n; j++)
  27. var += (a[i][j] * p[j]);
  28. x[i] = (b[i] - var) / a[i][i];
  29. }
  30. }
  31. while (!converge(x, p));
  32. }
  33.  
  34. int main(){
  35. FILE *input = fopen("C:\\Users\\Miron\\Desktop\\input.txt","r");
  36. fscanf(input, "%d",&n);
  37. double **A = (double **)malloc(n*sizeof(double *)); //ìàññèâ êîýôôèöèåíòîâ
  38. for(int i = 0; i < n; i++){
  39. A[i] = (double *)malloc(n*sizeof(double));
  40. }
  41. double *B = (double *)malloc(n*sizeof(double)); //ìàññèâ ïðàâûõ ÷àñòåé
  42. double *x = (double *)malloc(n*sizeof(double)); //ìàññèâ ðåøåíèé
  43. double *p = (double *)malloc(n*sizeof(double));
  44. for(int i = 0; i<n; i++){
  45. for(int j = 0; j<n; j++){
  46. fscanf(input, "%f",&A[i][j]);
  47. }
  48. fscanf(input, "%f",&B[i]);
  49. x[i] = 0;
  50. }
  51. Zeydel(A,B,x,p);
  52. for(int i = 0; i<n; i++)
  53. printf("%f\n", x[i]);
  54. return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement