Added determinate function (#1429)

* Added determinate function

* Changed determinate function name

* Changed instance of .det() to .determinate()

* Added force_test() function

* Update tests.py
This commit is contained in:
Alex Veltman 2019-10-24 11:08:45 +02:00 committed by Christian Clauss
parent 7b3d385ad6
commit 07483139d1
3 changed files with 44 additions and 2 deletions

View File

@ -46,6 +46,7 @@ This module contains some useful classes and functions for dealing with linear a
- component(x,y) : returns the specified component.
- width() : returns the width of the matrix
- height() : returns the height of the matrix
- determinate() : returns the determinate of the matrix if it is square
- operator + : implements the matrix-addition.
- operator - _ implements the matrix-subtraction

View File

@ -277,6 +277,33 @@ class Matrix(object):
"""
return self.__height
def determinate(self) -> float:
"""
returns the determinate of an nxn matrix using Laplace expansion
"""
if self.__height == self.__width and self.__width >= 2:
total = 0
if self.__width > 2:
for x in range(0, self.__width):
for y in range(0, self.__height):
total += (
self.__matrix[x][y]
* (-1) ** (x + y)
* Matrix(
self.__matrix[0:x] + self.__matrix[x + 1 :],
self.__width - 1,
self.__height - 1,
).determinate()
)
else:
return (
self.__matrix[0][0] * self.__matrix[1][1]
- self.__matrix[0][1] * self.__matrix[1][0]
)
return total
else:
raise Exception("matrix is not square")
def __mul__(self, other):
"""
implements the matrix-vector multiplication.

View File

@ -118,6 +118,13 @@ class Test(unittest.TestCase):
A = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)
self.assertEqual("|1,2,3|\n|2,4,5|\n|6,7,8|\n", str(A))
def test_determinate(self):
"""
test for determinate()
"""
A = Matrix([[1, 1, 4, 5], [3, 3, 3, 2], [5, 1, 9, 0], [9, 7, 7, 9]], 4, 4)
self.assertEqual(-376, A.determinate())
def test__mul__matrix(self):
A = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 3, 3)
x = Vector([1, 2, 3])
@ -149,6 +156,13 @@ class Test(unittest.TestCase):
str(squareZeroMatrix(5)),
)
def force_test() -> None:
"""
This will ensure that pytest runs the unit tests above.
To explore https://github.com/TheAlgorithms/Python/pull/1124 uncomment the line below.
>>> # unittest.main()
"""
pass
if __name__ == "__main__":
unittest.main()