Advertisement
Guest User

Untitled

a guest
May 6th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.37 KB | None | 0 0
  1. void __fastcall TForm1::Button2Click(TObject* Sender)
  2. {
  3. x = StrToFloat(Edit1->Text);
  4. y = StrToFloat(Edit2->Text);
  5. z = StrToFloat(Edit3->Text);
  6. esp = StrToFloat(Edit4->Text);
  7. double a[n][n], a1[n][n], b[n], det, invdet, f[n],
  8. K[n]; //a[3][3]-матрица Якоби;
  9. //a1[3][3]-обратная матрица; b[3]-произведение а1[3] на f[3]; f[3]-массив функций; K[3]-массив переменных
  10. double xk, yk, zk, xn, yn, zn,
  11. max; //изменение значения переменных при k=0,1,2..
  12. int k = 0; //кол-во итераций
  13. //Матрица Якоби
  14. {
  15. a[0][0] = (-2 * x - 1);
  16. a[0][1] = (2 * z);
  17. a[0][2] = (2 * y);
  18. a[1][0] = (-3 * z);
  19. a[1][1] = (2 * y - 1);
  20. a[1][2] = (-3 * x);
  21. a[2][0] = (-2 * y);
  22. a[2][1] = (-2 * x);
  23. a[2][2] = (-2 * z - 1);
  24. //Определитель
  25. det = a[0][0] * a[1][1] * a[2][2] + a[0][1] * a[1][2] * a[2][0] +
  26. a[0][2] * a[1][0] * a[2][1] -
  27. a[0][2] * a[1][1] * a[2][0] - a[0][0] * a[1][2] * a[2][1] - a[0][1] *
  28. a[1][0] * a[2][2];
  29. invdet = 1 / det;
  30.  
  31. //Обратная матрица
  32. for (i = 0; i < n; i++)
  33. {
  34. for (j = 0; j < n; j++)
  35. {
  36. a1[0][0] = a[1][1] * a[2][2] - a[1][2] * a[2][1] * invdet;
  37. a1[0][1] = -a[1][0] * a[2][2] + a[2][0] * a[1][2] * invdet;
  38. a1[0][2] = a[1][0] * a[2][1] - a[1][1] * a[2][0] * invdet;
  39. a1[1][0] = -a[0][1] * a[2][2] + a[0][2] * a[2][1] * invdet;
  40. a1[1][1] = a[0][0] * a[2][2] - a[0][2] * a[2][0] * invdet;
  41. a1[1][2] = -a[0][0] * a[2][1] + a[0][1] * a[2][0] * invdet;
  42. a1[2][0] = a[0][1] * a[1][2] - a[0][1] * a[1][1] * invdet;
  43. a1[2][1] = -a[0][0] * a[1][2] + a[0][2] * a[2][0] * invdet;
  44. a1[2][2] = a[0][0] * a[1][1] - a[0][1] * a[1][0] * invdet;
  45. }
  46. }
  47.  
  48. //Массив функций
  49. for (j = 0; j < n; j++)
  50. {
  51. f[0] = f1(x, y, z);
  52. f[1] = f2(x, y, z);
  53. f[2] = f3(x, y, z);
  54. }
  55.  
  56. //Массив переменных
  57. for (j = 0; j < n; j++)
  58. {
  59. K[0] = x;
  60. K[1] = y;
  61. K[2] = z;
  62. }
  63.  
  64. do
  65. {
  66. for (i = 0; i < n; i++)
  67. {
  68. for (j = 0; j < n; j++)
  69. {
  70. b[0] = a[0][0] * f[0] + a[0][1] * f[1] + a[0][2] * f[2];
  71. b[1] = a[1][0] * f[0] + a[1][1] * f[1] + a[1][2] * f[2];
  72. b[2] = a[2][0] * f[0] + a[2][1] * f[1] + a[2][2] * f[2];
  73. }
  74. }
  75.  
  76. xk = K[0] - b[0];
  77. yk = K[1] - b[1];
  78. zk = K[2] - b[2];
  79. xn = xk - x;
  80. yn = yk - y;
  81. zn = zk - z;
  82. {
  83. if (abs(xn) > abs(yn))
  84. {
  85. if (abs(xn) > abs(zn))
  86. {
  87. max = xn;
  88. }
  89. else
  90. {
  91. max = zn;
  92. }
  93. }
  94. else
  95. {
  96. if (abs(yn) > abs(zn))
  97. {
  98. max = yn;
  99. }
  100. else
  101. {
  102. max = zn;
  103. }
  104. }
  105. }
  106. x = xk;
  107. y = yk;
  108. z = zk;
  109. }
  110. while (abs(max) >= esp);
  111.  
  112. k++;
  113. Edit5->Text = FloatToStr(xk);
  114. Edit6->Text = FloatToStr(yk);
  115. Edit7->Text = FloatToStr(zk);
  116. Edit8->Text = FloatToStr(k);
  117. }
  118. }
  119.  
  120. //Обратная матрица
  121. for (i=0; i<n; i++){
  122. for (j=0; j<n; j++){
  123. a1[0][0]= a[1][1]*a[2][2]-a[1][2]*a[2][1]*invdet;
  124. a1[0][1]=-a[1][0]*a[2][2]+a[2][0]*a[1][2]*invdet;
  125. a1[0][2]= a[1][0]*a[2][1]-a[1][1]*a[2][0]*invdet;
  126. a1[1][0]=-a[0][1]*a[2][2]+a[0][2]*a[2][1]*invdet;
  127. a1[1][1]= a[0][0]*a[2][2]-a[0][2]*a[2][0]*invdet;
  128. a1[1][2]=-a[0][0]*a[2][1]+a[0][1]*a[2][0]*invdet;
  129. a1[2][0]= a[0][1]*a[1][2]-a[0][1]*a[1][1]*invdet;
  130. a1[2][1]=-a[0][0]*a[1][2]+a[0][2]*a[2][0]*invdet;
  131. a1[2][2]= a[0][0]*a[1][1]-a[0][1]*a[1][0]*invdet;
  132. }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement