Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите наладить программу на VBA > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
vfrc
Помогите, пожалуйста, исправить программу для решения системы линейных уравнений методом Зейделя. (Если она вообще корректно составлена).

Sub metod_Zeydelya()

Dim a11 As Double, a21 As Double, a31 As Double
Dim a12 As Double, a22 As Double, a32 As Double
Dim a13 As Double, a23 As Double, a33 As Double
Dim b1 As Double, b2 As Double, b3 As Double
Dim x1 As Double, x2 As Double, x3 As Double
Dim x1k As Double, x2k As Double, x3k As Double
Dim eps As Double, n As Integer


Sheets("Лист1").Select

Cells(1, 6) = "Ввод исходных данных"
Cells(10, 6) = "Вывод результатов"
Cells(3, 1) = "a11 ="
Cells(4, 1) = "a21 ="
Cells(5, 1) = "a31 ="
Cells(3, 4) = "a12 ="
Cells(4, 4) = "a22 ="
Cells(5, 4) = "a32 ="
Cells(3, 7) = "a13 ="
Cells(4, 7) = "a23 ="
Cells(5, 7) = "a33 ="
Cells(3, 10) = "b1 ="
Cells(4, 10) = "b2 ="
Cells(5, 10) = "b3 ="
Cells(12, 1) = "x1 ="
Cells(12, 4) = "x2 ="
Cells(12, 7) = "x3 ="
Cells(12, 10) = "n ="
Cells(8, 5) = "eps="


a11 = Cells(3, 2)
a21 = Cells(4, 2)
a31 = Cells(5, 2)
a12 = Cells(3, 5)
a22 = Cells(4, 5)
a32 = Cells(5, 5)
a13 = Cells(3, 8)
a23 = Cells(4, 8)
a33 = Cells(5, 8)
b1 = Cells(3, 11)
b2 = Cells(4, 11)
b3 = Cells(5, 11)
eps = Cells(8, 6)


n = 1

x1k = 0
x2k = 0
x3k = 0

metka:

x1 = 1 / a11 * (b1 - a12 * x2k - a13 * x3k)
x2 = 1 / a22 * (b2 - a21 * x1 - a23 * x3k)
x3 = 1 / a33 * (b3 - a31 * x1 - a32 * x2)

If Abs(x1 - x1k) < eps And Abs(x2 - x2k) < eps And Abs(x3 - x3k) < eps Then


Cells(12, 2) = x1
Cells(12, 5) = x2
Cells(12, 8) = x3
Cells(12, 11) = n

Else

x1k = x1
x2k = x2
x3k = x3

n = n + 1

GoTo metka

End If

End Sub
Евгений М.
Нужно еще добавить проверку а11, а22, а33. Если один из один из них = 0, то уравнение таким методом не решается (иначе операции после metka выполняют деление на ноль).
И еще. Эпсилон должен быть строго больше нуля (иначе получится бесконечный цикл т.к. условие "Abs(x1 - x1k) < eps And Abs(x2 - x2k) < eps And Abs(x3 - x3k) < eps" никогда не будет выполняться). Добавьте еще такую проверку.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.