Система линейных уравнений. Решение методом Гаусса - VB
Формулировка задачи:
Доброго времени суток.
Сегодня столкнулся с проблемой. Лазил на форуме, находил решения, но все равно не верно получается... Вполне возможно упустил что.
В чем суть:
Имеется код, все считает отлично, но если в элемент (1,1) подставить значение 0, то все летит к чертям. Учусь в строительном, поэтому с программированием плоховато дружу.
Вот и не могу сообразить что не так... До элемента (4,3) считает все правильно, а дальше переплет в дебаге вижу...
Проверяю по данному варианту:
Надеюсь, изложил достаточно информации и надеюсь на Вашу помощь
Листинг программы
- Dim a(5, 5), b(5) As Double
- Dim x(5), f, k As Double
- Label1.Text = " "
- Label2.Text = " "
- Label3.Text = " "
- 'Вывод матрицы на лэйбл
- For i = 1 To 5
- For j = 1 To 5
- Label1.Text = Label1.Text & a(i, j) & " "
- Next
- Label1.Text = Label1.Text & vbCrLf
- Next
- 'Вычисление элементов
- For u = 1 To 5
- For i = u + 1 To 5
- If a(i, u) = 0 Then
- i = i
- Else
- k = -a(u, u) / a(i, u)
- If k = 0 Then
- For j = u To 5
- a(i, j) = a(i, j) * 0 + a(u, j)
- Next j
- Else
- For j = u To 5
- a(i, j) = a(i, j) * k + a(u, j)
- Next j
- b(i) = b(i) * k + b(u)
- End If
- End If
- Next i
- Next u
- 'Обратный ход, нахождение Х
- For i = 5 To 1 Step -1
- f = 0
- For j = i + 1 To 5
- f = f + a(i, j) * x(j)
- Next
- x(i) = (b(i) - f) / a(i, i)
- Next
- 'Вывод результата
- For i = 1 To 5
- For j = 1 To 5
- Label2.Text = Label2.Text & a(i, j) & " "
- Next
- Label2.Text = Label2.Text & vbCrLf
- Next
- For i = 1 To 5
- label3.text = label3.text & x(i) & vbCrLf
- Next
Решение задачи: «Система линейных уравнений. Решение методом Гаусса»
textual
Листинг программы
- Dim a(5, 5), b(10) As Double
- Dim x(5), f, k, swap As Double
- a(1, 1) = Val(TextBox1.Text)
- a(2, 1) = Val(TextBox2.Text)
- a(3, 1) = Val(TextBox3.Text)
- a(4, 1) = Val(TextBox4.Text)
- a(5, 1) = Val(TextBox5.Text)
- a(1, 2) = Val(TextBox10.Text)
- a(2, 2) = Val(TextBox9.Text)
- a(3, 2) = Val(TextBox8.Text)
- a(4, 2) = Val(TextBox7.Text)
- a(5, 2) = Val(TextBox6.Text)
- a(1, 3) = Val(TextBox15.Text)
- a(2, 3) = Val(TextBox14.Text)
- a(3, 3) = Val(TextBox13.Text)
- a(4, 3) = Val(TextBox12.Text)
- a(5, 3) = Val(TextBox11.Text)
- a(1, 4) = Val(TextBox20.Text)
- a(2, 4) = Val(TextBox19.Text)
- a(3, 4) = Val(TextBox18.Text)
- a(4, 4) = Val(TextBox17.Text)
- a(5, 4) = Val(TextBox16.Text)
- a(1, 5) = Val(TextBox25.Text)
- a(2, 5) = Val(TextBox24.Text)
- a(3, 5) = Val(TextBox23.Text)
- a(4, 5) = Val(TextBox22.Text)
- a(5, 5) = Val(TextBox21.Text)
- b(1) = Val(TextBox30.Text)
- b(2) = Val(TextBox29.Text)
- b(3) = Val(TextBox28.Text)
- b(4) = Val(TextBox27.Text)
- b(5) = Val(TextBox26.Text)
- Label1.Text = " "
- Label2.Text = " "
- Label3.Text = " "
- For i = 1 To 5
- For j = 1 To 5
- Label1.Text = Label1.Text & a(i, j) & " "
- Next
- Label1.Text = Label1.Text & vbCrLf
- Next
- For u = 1 To 5
- For i = u + 1 To 5
- If a(u, u) = 0 Then 'Если элемент главной диагонали равен 0, то нужно поменять строки местами
- For j = u To 5
- swap = a(i, j)
- a(i, j) = a(u, j)
- a(u, j) = swap
- Next
- swap = b(i)
- b(i) = b(u)
- b(u) = swap
- If a(i, u) = 0 Then
- i = i
- Else
- k = -a(u, u) / a(i, u)
- For j = u To 5
- a(i, j) = a(i, j) * k + a(u, j)
- Next j
- b(i) = b(i) * k + b(u)
- End If
- Else
- If a(i, u) = 0 Then
- i = i
- Else
- k = -a(u, u) / a(i, u)
- For j = u To 5
- a(i, j) = a(i, j) * k + a(u, j)
- Next j
- b(i) = b(i) * k + b(u)
- End If
- End If
- Next i
- Next u
- 'Обратный ход, нахождение Х
- For i = 5 To 1 Step -1
- f = 0
- For j = i + 1 To 5
- f = f + a(i, j) * x(j)
- Next
- x(i) = (b(i) - f) / a(i, i)
- Next
- For i = 1 To 5
- For j = 1 To 5
- Label2.Text = Label2.Text & a(i, j) & " "
- Next
- Label2.Text = Label2.Text & vbCrLf
- Next
- For i = 1 To 5
- Label3.Text = Label3.Text & x(i) & vbCrLf
- Next
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д