Блин, препод задал задачку составить программу для решения линейных уравнений методом Гаусса. Я не прошу составлять такой-же, но может у кого-то уже имеется подобный?
Собственно мне нужен хотябы алгоритм, для решения на Бэйсике. Во как! и еще, матрица может быть разная, от 3х3 до NxN . Помогите пожалуйста, если я ее не здам, 5 на экзамене ни светит :(((
Sub Гаусс()
Dim Matrix(1 To 4, 1 To 5) As Variant, DLine(1 To 5) As Variant, Answer(1 To 4) As Variant, Main As Variant
For i = 1 To 4
For j = 1 To 5
Matrix(i, j) = Worksheets("Гаусс".Cells(i + 1, j + 1).Value
Next
Next
For i = 1 To 4 'строка
Main = Matrix(i, i)
For x = 1 To 5
Matrix(i, x) = Matrix(i, x) / Main
Next
'i-ю строку умножить на нижеслед(1) и прибавить к ней
For j = i + 1 To 4 'строка
For x = 1 To 5 'столбец
 Line(x) = Matrix(i, x) * Matrix(j, i)
Next
For x = 1 To 5
Matrix(j, x) = Matrix(j, x) - DLine(x)
Next
Next
Next i
For i = 4 To 1 Step -1
PreSum = 0
If i < 4 Then
For j = i + 1 To 4
PreSum = PreSum + Answer(j) * Matrix(i, j)
Next
End If
Answer(i) = (Matrix(i, 5) - PreSum) / Matrix(i, i)
Next
Worksheets("Гаусс".Range("b7:f10".Value = Matrix
Worksheets("Гаусс".Range("b12:e12".Value = Answer
End Sub
Писал под эксель, и очень давно, и ничё исправлять не хочу, ибо лень... На любой размер матрицы переделай сам, ибо нефиг делать.
Совсем недавно постил метод Гаусса (с выборкой главного элемента, кстати, а не как здесь) для любого порядка, и именно на VB. Вот вам еще раз:
Private Function Gauss(a() As Double, b() As Double, n As Long) As Double()
Dim res() As Double
ReDim res(n - 1)
For i = 0 To n - 2
Max = i
For j = i + 1 To n - 1
If Abs(a(i, j)) > Abs(a(i, Max)) Then Max = j
Next
For j = 0 To n - 1
Swap a(j, Max), a(j, i)
Next
Swap b(Max), b(i)
For j = i + 1 To n - 1
q = a(i, j) / a(i, i)
For k = 0 To n - 1
a(k, j) = a(k, j) - a(k, i) * q
Next
b(j) = b(j) - b(i) * q
Next
Next
For i = n - 1 To 0 Step -1
For j = i + 1 To n - 1
b(i) = b(i) - a(j, i) * b(j)
Next
b(i) = b(i) / a(i, i)
Next
Gauss = b
End Function