Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include "f.h"
  5. #define LEN 5000
  6. #define eps 1e-40
  7. int LU(double *a,int n)
  8. {
  9. int i,j,k,t;
  10. double s;
  11. double *p,*q;
  12. for(i=0;i<n;i++)
  13. {
  14. p=a+i*n;
  15. for(j=i;j<n;j++)
  16. {
  17. s=0;
  18. q=a+i;
  19. t=0;
  20. for(k=0;k<i;k++)
  21. {
  22. s+=p[k]*q[t];
  23. t+=n;
  24. }
  25. p[i]-=s;
  26. p+=n;
  27.  
  28.  
  29. }
  30. p=a+i*n;
  31. q=a+i+1;
  32. for(j=i+1;j<n;j++)
  33. {
  34. t=0;
  35. s=0;
  36. for(k=0;k<i;k++)
  37. {
  38. s+=p[k]*q[t];
  39. t+=n;
  40. }
  41. p[j]-=s;
  42. if(fabs(p[i])< eps) return 1;
  43. p[j]/=p[i];
  44. q++;
  45. }
  46. }
  47. return 0;
  48. }
  49.  
  50. void obr_LU(double*a,int n)
  51. {
  52. double e[LEN];
  53. double k;
  54. double *p,*q;
  55. int i,j,r;
  56. p=a+(n-1)*n;
  57. for(i=n-1;i>=0;i--) //U^(-1)
  58. {
  59. e[i]=1;
  60. q=a+n*(i+1);
  61. for(j=i+1;j<n;j++)
  62. {
  63. k=p[j];
  64. e[j]-=k;
  65. for(r=j+1;r<n;r++)
  66. {
  67. e[r]-=k*q[r];
  68. }
  69. q+=n;
  70. }
  71. for(j=i+1;j<n;j++)
  72. {
  73. p[j]=e[j];
  74. e[j]=0;
  75. }
  76. e[i]=0;
  77. p-=n;
  78. }
  79. p=a;
  80. for(i=0;i<n;i++) //L^(-1)
  81. {
  82. e[i]=1;
  83. q=a;
  84. for(j=0;j<i;j++)
  85. {
  86. k=p[j];
  87. for(r=0;r<=j;r++)
  88. {
  89. e[r]-=k*q[r];
  90. }
  91. q+=n;
  92. }
  93. for(j=0;j<=i;j++)
  94. {
  95. p[j]=e[j]/p[i];
  96. e[j]=0;
  97. }
  98. e[i]=0;
  99. p+=n;
  100. }
  101. }
  102.  
  103. void L_r(double *a,int n)
  104. {
  105. int i,j;
  106. double d;
  107. double *p=a,*b=a+n*n-1;
  108. for(i=0;i<n/2;i++)
  109. {
  110. for(j=0;j<=i;j++)
  111. {
  112. d=p[j];
  113. printf("p[j]=%lf\n",p[j]);
  114. p[j]=b[-j];
  115. b[-j]=d;
  116. }
  117. p+=n;
  118. b-=n;
  119. }
  120. }
  121.  
  122. void mult_matr(double *a,double *d,int n)
  123. {
  124. int i,j,k,t;
  125. double s;
  126. double *p=a,*q=a+n-1,*l=d;
  127. for(i=0;i<n;i++)
  128. {
  129. for(j=0;j<n;j++)
  130. {
  131.  
  132. if(i>=j)
  133. {
  134. s=0;
  135. s=p[j];
  136. t=-j*n+i;
  137. for(k=i+1;k<n;k++)
  138. {
  139. s+=p[k]*q[t];
  140. t--;
  141. }
  142. l[j]=s;
  143. }
  144. else
  145. {
  146. s=0;
  147. t=0;
  148. for(k=j;k<n;k++)
  149. {
  150. s+=p[k]*q[t];
  151. t++;
  152. }
  153. l[j]=s;
  154. }
  155. q--;
  156. }
  157. p+=n;
  158. l+=n;
  159. }
  160. }
  161.  
  162. double func(double *a,double *d,int n)
  163. {
  164. int i,j,k;
  165. double sum,max=-1,s;
  166. for(i=0;i<n;i++)
  167. {
  168. sum=0;
  169. for(j=0;j<n;j++)
  170. {
  171. s=0;
  172. for(k=0;k<n;k++)
  173. {
  174. s+=a[i*n+k]*d[k*n+j];
  175. }
  176. if(i==j) s--;
  177. sum+=fabs(s);
  178. }
  179. if(sum>max) max=sum;
  180. }
  181. return max;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement