Прости за флуд, а кто у тебя информатику ведет?
Ну приведи математический алгоритм,а там обмозгуем
Второго порядка -- это что, два на два?
А треугольный вид -- это когда под главной диагональю все нулевые элементы?
Какими преобразованиями можно пользоваться?
Из какого множества элементы матрицы?
Умножаешь 2 строку так, чтобы после вычитания из неё 1 в (2,1) оказался 0... Чего проще? =)
С 10х10 - уже сложнее.. Надо думать, т.к. задача сложная, вроде...
Option Explicit
'Предполагается, что обе lbound=1
Private Function Triangelize(arr() As Double) As Double()
Dim r As Long, r2 As Long, c As Long, d As Double, out() As Double
out = arr
For r = 1 To UBound(out, 1)
For c = UBound(out, 2) To 1 + r - 1 Step -1
out(r, c) = out(r, c) / out(r, 1 + r - 1)
Next
For r2 = r + 1 To UBound(out, 1)
d = out(r2, 1 + r - 1)
For c = 1 + r - 1 To UBound(out, 2)
out(r2, c) = out(r2, c) - out(r, c) * d
Next
Next
Next
Triangelize = out
End Function
Private Sub Form_Load()
Dim arr() As Double, i As Long, j As Long
ReDim arr(1 To 5, 1 To 5)
For i = 1 To 5
For j = 1 To 5
arr(i, j) = Rnd * 100
Next
Next
For i = 1 To 5
For j = 1 To 4
Debug.Print arr(i, j),
Next
Debug.Print arr(i, 5)
Next
arr = Triangelize(arr)
Debug.Print
Debug.Print
For i = 1 To 5
For j = 1 To 4
Debug.Print arr(i, j),
Next
Debug.Print arr(i, 5)
Next
End Sub
GSerg писал(а):...
Определитель произвольного размера считается рекурсивно, путём последовательного разложения по строке или столбцу, пока не останется матрица 2 или 3 порядка...
GSerg писал(а):Определитель произвольного размера считается рекурсивно, путём последовательного разложения по строке или столбцу, пока не останется матрица 2 или 3 порядка...
Option Explicit
Private Sub Command1_Click()
Dim arr() As Double, i As Long, j As Long
ReDim arr(1 To 5, 1 To 5)
For i = 1 To 5
For j = 1 To 5
arr(i, j) = Int(Rnd * 10)
Next
Next
For i = 1 To 5
For j = 1 To 4
Debug.Print arr(i, j),
Next
Debug.Print arr(i, 5)
Next
arr = Triangelize1(arr)
Debug.Print
Debug.Print
For i = 1 To 5
For j = 1 To 4
Debug.Print arr(i, j),
Next
Debug.Print arr(i, 5)
Next
End Sub
Private Function Triangelize1(arr() As Double) As Double()
Dim r As Long, r2 As Long, c As Long, d As Double, out() As Double
Dim i As Long 'ïî ñòîëáöàì
Dim j As Long, number As Long 'ïî ñòðîêàì
Dim k As Long ' ïî ïîðÿäêó
Dim m As Long
Dim n As Long
Dim koeff As Double
number = 2
For k = 1 To (UBound(arr) - 1)
For j = number To UBound(arr)
If arr(k, k) <> 0 Then koeff = (-1) * arr(j, k) / arr(k, k) Else koeff = 0
For i = number - 1 To UBound(arr)
d = arr(k, i) * koeff
arr(j, i) = arr(j, i) + d
If Abs(arr(j, i)) < 0.00000001 Then arr(j, i) = 0
Next i
Next j
number = number + 1
Next k
Triangelize1 = arr
End Function
dim arr(1 to 5, 1 to 5) as single, det as single
'заполняем...
with createobject("excel.application")
det=.worksheetfunction.mdeterm(arr)
.quit
end with
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 130