Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- REM "" Law 3andak mashakel fel copy, 5odha men 3l link dah: http://pastebin.com/raw.php?i=z9wbsCiS
- REM Computing Inverse of a Matrix by using the Adjoint Matrix Method
- REM Ver 0.3
- 'input "size? "; size //TODO
- 'USER INTERACTION
- print "Computing Inverse of a Matrix by using the Adjoint Matrix Method"
- input "Show Steps ? (yes?)"; ans$
- if ans$ = "1" or lower$(ans$) = "yes" then
- debug = 1
- else
- if ans$ = "2" or lower$(ans$) = "debug" then debug = 2
- end if
- size = 3 '7gm el matrix
- DIM orig(size+1,size+1)
- for r = 1 to size
- for c = 1 to size
- input "Row :";r;" Column :";c;" :"; orig(r,c)
- next c
- next r
- REM ~~ START
- dim modi(size, size)
- CrossX = 1 'X coord of the value which minor we want
- CrossY = 1 'Y coord of same
- n = 0 'Where to "goto" after execution
- goto 80 'ro7 e7seb el minor
- 10 'back
- Determinant = Det(orig, 3, 0) 'Calculate Determinant
- print
- if Determinant <> 0 then
- print "Determinant: "; Determinant
- else
- print "|A| = 0, No Inverse exists for Zero-Matrix"
- end
- end if
- if debug > 0 then
- print "Minors:"
- end if
- '------------------------------------- ne7seb el cofactors
- DIM co(size+1,size+1) 'CoFactor Matrix
- for Roww = 1 to size
- for Coll = 1 to size
- CrossX = Roww
- CrossY = Coll
- n = 2
- goto 80 'Minor
- 40 'back
- if debug > 0 then
- for r = 1 to size-1
- print
- print chr$(5);
- for c = 1 to size-1
- print modi(r,c),
- next c
- print chr$(5);
- next r
- end if
- co(Roww,Coll) = Det(modi, size-1, 1)
- 'print ">";co(Roww,Coll)
- if debug > 0 then print "*";orig(Roww,Coll)
- next Coll
- next Roww
- '- ne5aiar el esharat we n2leb el matrix we n2sem 3l determinant
- dim inv(size+1,size+1)
- for r = 1 to size
- for c = 1 to size
- inv(r,c) = co(c,r) * -1^(r+c) / Determinant
- if debug > 1 then print inv(r,c)
- next c
- if debug > 0 then print
- next r
- print 'nekteb el nateg
- 'print "!!!!!"
- print chr$(23);"Inverse" , " " ,"","";chr$(2) 'awel satr
- for r = 1 to size
- print chr$(5) ;
- for c = 1 to size
- if int(inv(r,c)) = inv(r,c) then print inv(r,c),
- if int(inv(r,c)) <> inv(r,c) then
- if int(inv(r,c)*abs(Determinant))^2 = abs(inv(r,c)*Determinant)^2 then
- print int(inv(r,c)*abs(Determinant)) ; "/" ; abs(Determinant),
- else
- print inv(r,c)*abs(Determinant) ; "/" ; abs(Determinant),
- end if
- end if
- 'print Determinant/abs(Determinant) *inv(r,c)*Determinant ;"/"; abs(Determinant)
- next c
- print chr$(5)
- next r
- print chr$(3);"" , " " ,"","";chr$(4) 'el a5eer
- end 'The
- 80 ' e7seb el minor lel 3onsor(CrossX, CrossY) fel matrix orig(n*n) : n = size
- x = 1
- y = 1
- for nRow = 1 to size
- if nRow <> CrossX then
- for nCol = 1 to size
- if nCol <> CrossY then
- modi(x,y) = orig(nRow,nCol)
- if y >= size-1 then
- x = x+1
- y = 0
- end if
- y = y + 1
- end if
- next nCol
- end if
- next nRow
- if n = 0 then goto 10
- if n = 1 then goto 94
- if n = 2 then goto 40
- 'print Det(orig, 3, 1)
- Function Det(orig, DetSize, InsideJob)
- if InsideJob then
- DIM basicsucks(DetSize,DetSize)
- for r = 1 to DetSize
- for c = 1 to DetSize
- basicsucks(r,c) = modi(r,c)
- next c
- next r
- else
- DIM basicsucks(DetSize,DetSize)
- for r = 1 to DetSize
- for c = 1 to DetSize
- basicsucks(r,c) = orig(r,c)
- next c
- next r
- end if
- if DetSize = 1 then Det = orig(1,1)
- if DetSize = 2 then
- Det = basicsucks(1,1) * basicsucks(2,2) - basicsucks(2,1) * basicsucks(1,2)
- if debug > 1 then
- print "[";orig(1,1);"*";orig(2,2);"-";
- print orig(2,1);"*" ;orig(1,2);"]"
- end if
- end if
- if DetSize > 2 then
- 'for row = 1 to DetSize
- row = 1
- for col = 1 to DetSize
- CrossX = row
- CrossY = col
- pass = 1
- goto 96
- 94 'code
- 'for r = 1 to DetSize-1
- 'for c = 1 to DetSize -1
- 'print modi(r,c),
- 'next c
- 'print
- 'next r
- 'print
- if debug > 1 then
- print "Det= ";Det ," + (-1)^";(row+col);" * ";
- print orig(row,col);"*";Det(modi,DetSize-1,1);
- end if
- Det = Det + (-1)^(row+col) * basicsucks(row,col) * DuoDet(modi, DetSize - 1, 1)
- if debug > 1 then print "= ",Det
- next col
- 'next row
- end if
- 96
- if pass = 1 then
- 'DIM modi(DetSize-1,DetSize-1)
- x = 1
- y = 1
- for nRow = 1 to DetSize
- if nRow <> CrossX then
- for nCol = 1 to DetSize
- if nCol <> CrossY then
- modi(x,y) = orig(nRow,nCol)
- if debug > 1 then print orig(nRow,nCol)
- if y >= DetSize-1 then
- x = x+1
- y = 0
- end if
- y = y + 1
- end if
- next nCol
- end if
- next nRow
- pass = 0
- goto 94
- end if
- end function
- Function DuoDet(modi, DetSize, hmmm)
- DuoDet = modi(1,1) * modi(2,2) - modi(2,1) * modi(1,2)
- End function
- function GCD(u, v)
- if v then
- GCD = GCD(v, u mod v)
- else
- GCD = abs(u)
- end if
- end function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement