Advertisement
Guest User

Untitled

a guest
Nov 21st, 2014
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.35 KB | None | 0 0
  1. public static void Main(){
  2.  
  3. float normMatrix(float**A);
  4. float**A,**A_,**E,*x,*x_,norm,*f,normMatrix_A;
  5. int m,n=10,k,i,j;
  6.  
  7. void show()
  8. {
  9. ofstream fout("out.txt",ios::app);
  10. for(int i=0;i<n;i++)
  11. {
  12. for(int j=0;j<n+1;j++)
  13. fout<<setw(13)<<A[i][j];
  14. fout<<endl;
  15. }
  16. fout<<endl;
  17. }
  18.  
  19. void Set(int k);
  20.  
  21. float normMatrix(float**A)
  22. {
  23. float sum=0,temp=0;
  24. for(i=0;i<n;i++)
  25. {
  26. for(j=0;j<n;j++)
  27. sum+=fabs(A[i][j]);
  28. if(sum>temp)
  29. temp=sum;
  30. sum=0;
  31. }
  32. return temp;
  33. }
  34.  
  35. void normVect()
  36. {
  37. ofstream fout("out.txt",ios::app);
  38. float Norm,sum=0;
  39. for(i=0;i<n;i++)
  40. sum+=pow(fabs(x_[i]-x[i]),2);
  41. Norm=sqrt(sum);
  42. fout<<"Norm="<<Norm<<endl;
  43. }
  44.  
  45.  
  46. void Conditionality()
  47. {
  48. ofstream fout("out.txt",ios::app);
  49. float c;
  50. for(i=1;i<n;i++)
  51. {
  52. for(j=i;j<n;j++)
  53. {
  54. float c=A_[j][i-1]/A_[i-1][i-1];
  55. for(k=0;k<=n;k++)
  56. {
  57. A_[j][k]-=c*A_[i-1][k];
  58. E[j][k]-=c*E[i-1][k];
  59. }
  60. }
  61. }
  62. for(i=n-2;i>=0;i--)
  63. {
  64. for(j=i;j>=0;j--)
  65. {
  66. float c=A_[j][i+1]/A_[i+1][i+1];
  67. for(k=n-1;k>=0;k--)
  68. {
  69. A_[j][k]-=c*A_[i+1][k];
  70. E[j][k]-=c*E[i+1][k];
  71. }
  72. }
  73. }
  74. for(i=0;i<n;i++)
  75. {
  76. c=1/A_[i][i];
  77. A_[i][i]*=c;
  78. E[i][i]*=c;
  79. for(j=0;j<n;j++)
  80. {
  81. if(i!=j)
  82. {
  83. A_[i][j]*=c;
  84. E[i][j]*=c;
  85. }
  86. }
  87. }
  88. float condit=normMatrix(E)*normMatrix_A;
  89. fout<<"The number of conditinality of matrix A = "<<condit<<endl;
  90. }
  91.  
  92.  
  93. void columnsSwap(int t)
  94. {
  95. ofstream fout("out.txt",ios::app);
  96. double temp=0;
  97. int k;
  98. for(int i=t;i<n;i++)
  99. {
  100. if(fabs(A[i][t])>=fabs(temp))
  101. {
  102. temp=A[i][t];
  103. k=i;
  104. }
  105. }
  106. if(t==0)
  107. fout<<"Number of leading element = "<<k+1<<endl;
  108. for(int temp=t;temp<n+1;temp++)
  109. swap(A[t][temp],A[k][temp]);
  110. }
  111.  
  112.  
  113. void PivotingSet()
  114. {
  115. m=4;
  116. n=6;
  117. srand(10);
  118. A=new float*[n];
  119. A_=new float*[n];
  120. E=new float*[n];
  121. x=new float[n];
  122. x_=new float[n];
  123. f=new float[n];
  124. for(k=0;k<n;k++)
  125. {
  126. x[k]=m;
  127. m++;
  128. A[k]=new float[n];
  129. A_[k]=new float[n];
  130. for(j=0;j<n+1;j++)
  131. {
  132. A[k][j]=rand()%200-100;
  133. }
  134. }
  135. for(k=0;k<n;k++)
  136. {
  137. f[k]=0;
  138. for(j=0;j<n;j++)
  139. {
  140. if(k!=j)
  141. E[k][j]=0;
  142. else E[k][j]=1;
  143. f[k]+=A[k][j]*x[j];
  144. A_[k][j]=A[k][j];
  145. }
  146. A[k][n]=f[k];
  147.  
  148. }
  149. show();
  150. }
  151.  
  152.  
  153. void Gauss(bool pivoting)
  154. {
  155. ofstream fout("out.txt",ios::app);
  156. for(i=1;i<n;i++)
  157. {
  158. if(pivoting==true)
  159. if(i!=n-1)
  160. {
  161. columnsSwap(i-1);
  162. }
  163. for(k=i;k<n;k++)
  164. {
  165. float c=A[k][i-1]/A[i-1][i-1];
  166. for(j=0;j<=n;j++)
  167. {
  168. A[k][j]-=c*A[i-1][j];
  169. }
  170. }
  171. }
  172. fout<<"Matrix after the 1st step\n";
  173. show();
  174. float sum=0;
  175. for(k=n-1;k>=0;k--)
  176. {
  177. for(j=k+1;j<n;j++)
  178. {
  179. sum+=A[k][j]*x_[j];
  180. }
  181. x_[k]=(1/A[k][k])*(A[k][n]-sum);
  182. sum=0;
  183. }
  184. for(i=0;i<n;i++)
  185. fout<<x_[i]<<endl;
  186. fout<<endl;
  187. }
  188.  
  189.  
  190.  
  191. cout<<"*************************** TASK 1 ***************************\n";
  192. Set(0);
  193. Gauss(false);
  194. normVect();
  195. Conditionality();
  196. Set(3);
  197. Gauss(false);
  198. normVect();
  199. Conditionality();
  200. cout<<"\n\n*************************** TASK 2 ***************************\n";
  201. PivotingSet();
  202. Gauss(true);
  203. normVect();
  204. PivotingSet();
  205. Gauss(false);
  206. normVect();
  207.  
  208.  
  209. void Set(int k)
  210. {
  211. ofstream fout("out.txt",ios::app);
  212. m=4;
  213. srand(time(NULL));
  214. A=new float*[n];
  215. A_=new float*[n];
  216. E=new float*[n];
  217. x=new float[n];
  218. x_=new float[n];
  219. f=new float[n];
  220. fout<<"k="<<k<<endl;
  221. for(i=0;i<n;i++)
  222. {
  223. x[i]=m;
  224. A[i]=new float[n];
  225. A_[i]=new float[n];
  226. E[i]=new float[n];
  227. A[i][i]=0;
  228. for(j=0;j<n+1;j++)
  229. {
  230. if(j!=i)
  231. {
  232. A[i][j]=rand()%5-4;
  233. A[i][i]+=A[i][j];
  234. E[i][j]=0;
  235. }
  236. else E[i][j]=1;
  237. if(j==n)
  238. A[i][j]=x[i];
  239. }
  240. if(i==0)
  241. A[i][i]=A[i][i]-pow(10,(float)-k);
  242. A[i][i]=-A[i][i];
  243. m++;
  244. }
  245. for(i=0;i<n;i++)
  246. {
  247. f[i]=0;
  248. for(j=0;j<n;j++)
  249. {
  250. f[i]+=A[i][j]*x[j];
  251. A_[i][j]=A[i][j];
  252. }
  253. A[i][n]=f[i];
  254. }
  255. show();
  256. normMatrix_A=normMatrix(A);
  257. }
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement