Показать сообщение отдельно
Старый 13.01.2006, 02:29   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Радость

Есть небольшая либа для решения матричной системы.
Всё работает нормально, пока при попытке инвертировать матрицу порядка 7 на 7, ф-ция аварийно не завершает работу, т.к. получает детерминант=NaN (хотя он чуть превышает 10^6).
Само собой разумеется, в остальных случаях всй считается.
Const TMatrixMaxIndex2D=99
Type TMatrix
	Field Buffer$[TMatrixMaxIndex2D]
	Field StringSize
	Field CSize
End Type

Function TMatrix_Create.TMatrix(size,size2=-1)
	M.TMatrix=New TMatrix
	M\StringSize=size
	M\CSize=size2
	If M\CSize=-1 M\CSize=size
	Return M
End Function

Function TMatrix_IN(M.TMatrix,SNumber,CNumber,Z$)
	Local Index2d=(SNumber-1)*M\StringSize+(CNumber-1)
	M\Buffer[Index2d]=Z$
End Function

Function TMatrix_OUT$(M.TMatrix,SNumber,CNumber)
	Local Index2d=(SNumber-1)*M\StringSize+(CNumber-1)
	Return M\Buffer[Index2d]
End Function

Function TMatrix_Delete(M.TMatrix)
	Delete M
End Function

Function TMatrix_Determinant#(M.TMatrix)
	
	SS=M\StringSize
	CS=M\CSize
	If SS=1 And CS=1
 *Return Float(M\buffer[0])
	EndIf
	Local DET#=0
	For i=1 To SS
 *MINOR.TMATRIX=TMatrix_minor(M,1,i)
 *DET=DET+(-1)^(i+1)*TMatrix_Determinant(MINOR)*Float(TMatrix_OUT(M,1,i))
 *TMatrix_Delete(MINOR)
	Next
	Return Float(DET)
End Function

Function TMatrix_minor.TMatrix(M.TMatrix,NS,NC)
	minSS=M\StringSize-1
	minCS=M\CSize-1
	Minor.TMatrix=TMATRIX_Create(minSS,minCS)
	Local Smin=1
	For S=1 To M\CSize
 *Local Cmin=1
 *For C=1 To M\StringSize
 *	If C=NC
 * *Cmin=Cmin-1
 *	Else
 * *TMatrix_IN(Minor,Smin,Cmin,TMatrix_OUT(M,S,C))
 *	EndIf
 *	Cmin=Cmin+1
 *Next
 *If S=NS
 *	Smin=Smin-1
 *EndIf
 *Smin=Smin+1
	Next
	Return Minor
End Function
вот - выдрал необходимые куски кода.
Собсна вопрос - можно как-нить уменьшить кол-во рекурсий, не сильно загромождая код?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)