Система линейных уравнений. Решение методом Гаусса - VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Сегодня столкнулся с проблемой. Лазил на форуме, находил решения, но все равно не верно получается... Вполне возможно упустил что. В чем суть: Имеется код, все считает отлично, но если в элемент (1,1) подставить значение 0, то все летит к чертям. Учусь в строительном, поэтому с программированием плоховато дружу.
Листинг программы
  1. Dim a(5, 5), b(5) As Double
  2. Dim x(5), f, k As Double
  3. Label1.Text = " "
  4. Label2.Text = " "
  5. Label3.Text = " "
  6. 'Вывод матрицы на лэйбл
  7. For i = 1 To 5
  8. For j = 1 To 5
  9. Label1.Text = Label1.Text & a(i, j) & " "
  10. Next
  11. Label1.Text = Label1.Text & vbCrLf
  12. Next
  13. 'Вычисление элементов
  14. For u = 1 To 5
  15. For i = u + 1 To 5
  16. If a(i, u) = 0 Then
  17. i = i
  18. Else
  19. k = -a(u, u) / a(i, u)
  20. If k = 0 Then
  21. For j = u To 5
  22. a(i, j) = a(i, j) * 0 + a(u, j)
  23. Next j
  24. Else
  25. For j = u To 5
  26. a(i, j) = a(i, j) * k + a(u, j)
  27. Next j
  28. b(i) = b(i) * k + b(u)
  29. End If
  30. End If
  31. Next i
  32. Next u
  33. 'Обратный ход, нахождение Х
  34. For i = 5 To 1 Step -1
  35. f = 0
  36. For j = i + 1 To 5
  37. f = f + a(i, j) * x(j)
  38. Next
  39. x(i) = (b(i) - f) / a(i, i)
  40. Next
  41. 'Вывод результата
  42. For i = 1 To 5
  43. For j = 1 To 5
  44. Label2.Text = Label2.Text & a(i, j) & " "
  45. Next
  46. Label2.Text = Label2.Text & vbCrLf
  47. Next
  48. For i = 1 To 5
  49. label3.text = label3.text & x(i) & vbCrLf
  50. Next
Вот и не могу сообразить что не так... До элемента (4,3) считает все правильно, а дальше переплет в дебаге вижу... Проверяю по данному варианту: Надеюсь, изложил достаточно информации и надеюсь на Вашу помощь

Решение задачи: «Система линейных уравнений. Решение методом Гаусса»

textual
Листинг программы
  1.  Dim a(5, 5), b(10) As Double
  2.  
  3.         Dim x(5), f, k, swap As Double
  4.  
  5.         a(1, 1) = Val(TextBox1.Text)
  6.         a(2, 1) = Val(TextBox2.Text)
  7.         a(3, 1) = Val(TextBox3.Text)
  8.         a(4, 1) = Val(TextBox4.Text)
  9.         a(5, 1) = Val(TextBox5.Text)
  10.         a(1, 2) = Val(TextBox10.Text)
  11.         a(2, 2) = Val(TextBox9.Text)
  12.         a(3, 2) = Val(TextBox8.Text)
  13.         a(4, 2) = Val(TextBox7.Text)
  14.         a(5, 2) = Val(TextBox6.Text)
  15.         a(1, 3) = Val(TextBox15.Text)
  16.         a(2, 3) = Val(TextBox14.Text)
  17.         a(3, 3) = Val(TextBox13.Text)
  18.         a(4, 3) = Val(TextBox12.Text)
  19.         a(5, 3) = Val(TextBox11.Text)
  20.         a(1, 4) = Val(TextBox20.Text)
  21.         a(2, 4) = Val(TextBox19.Text)
  22.         a(3, 4) = Val(TextBox18.Text)
  23.         a(4, 4) = Val(TextBox17.Text)
  24.         a(5, 4) = Val(TextBox16.Text)
  25.         a(1, 5) = Val(TextBox25.Text)
  26.         a(2, 5) = Val(TextBox24.Text)
  27.         a(3, 5) = Val(TextBox23.Text)
  28.         a(4, 5) = Val(TextBox22.Text)
  29.         a(5, 5) = Val(TextBox21.Text)
  30.         b(1) = Val(TextBox30.Text)
  31.         b(2) = Val(TextBox29.Text)
  32.         b(3) = Val(TextBox28.Text)
  33.         b(4) = Val(TextBox27.Text)
  34.         b(5) = Val(TextBox26.Text)
  35.  
  36.         Label1.Text = " "
  37.         Label2.Text = " "
  38.         Label3.Text = " "
  39.  
  40.         For i = 1 To 5
  41.             For j = 1 To 5
  42.                 Label1.Text = Label1.Text & a(i, j) & " "
  43.             Next
  44.             Label1.Text = Label1.Text & vbCrLf
  45.         Next
  46.  
  47.  
  48.         For u = 1 To 5
  49.             For i = u + 1 To 5
  50.                 If a(u, u) = 0 Then 'Если элемент главной диагонали равен 0, то нужно поменять строки местами
  51.                    For j = u To 5
  52.                         swap = a(i, j)
  53.                         a(i, j) = a(u, j)
  54.                         a(u, j) = swap
  55.                     Next
  56.                     swap = b(i)
  57.                     b(i) = b(u)
  58.                     b(u) = swap
  59.                     If a(i, u) = 0 Then
  60.                         i = i
  61.                     Else
  62.                         k = -a(u, u) / a(i, u)
  63.                         For j = u To 5
  64.                             a(i, j) = a(i, j) * k + a(u, j)
  65.                         Next j
  66.                         b(i) = b(i) * k + b(u)
  67.                     End If
  68.                 Else
  69.                     If a(i, u) = 0 Then
  70.                         i = i
  71.                     Else
  72.                         k = -a(u, u) / a(i, u)
  73.                         For j = u To 5
  74.                             a(i, j) = a(i, j) * k + a(u, j)
  75.                         Next j
  76.                         b(i) = b(i) * k + b(u)
  77.                     End If
  78.                 End If
  79.             Next i
  80.         Next u
  81.         'Обратный ход, нахождение Х
  82.        For i = 5 To 1 Step -1
  83.             f = 0
  84.             For j = i + 1 To 5
  85.                 f = f + a(i, j) * x(j)
  86.             Next
  87.             x(i) = (b(i) - f) / a(i, i)
  88.         Next
  89.  
  90.         For i = 1 To 5
  91.             For j = 1 To 5
  92.                 Label2.Text = Label2.Text & a(i, j) & " "
  93.             Next
  94.             Label2.Text = Label2.Text & vbCrLf
  95.         Next
  96.  
  97.         For i = 1 To 5
  98.             Label3.Text = Label3.Text & x(i) & vbCrLf
  99.         Next

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы