mirror of
https://github.com/DeaDvey/mathgenerator.git
synced 2025-11-28 06:25:23 +01:00
@@ -2,3 +2,4 @@ pytest
|
||||
hypothesis
|
||||
flake8
|
||||
autopep8
|
||||
sympy
|
||||
@@ -76,3 +76,4 @@ from .angleBtwVectorsFunc import *
|
||||
from .absoluteDifferenceFunc import *
|
||||
from .vectorDotFunc import *
|
||||
from .binary2sComplement import *
|
||||
from .matrixInversion import *
|
||||
|
||||
68
mathgenerator/funcs/matrixInversion.py
Normal file
68
mathgenerator/funcs/matrixInversion.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from .__init__ import *
|
||||
|
||||
def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerElementsInInvertedMatrix=False):
|
||||
if OnlyIntegerElementsInInvertedMatrix is True:
|
||||
isItOk = False
|
||||
Mat = list()
|
||||
while (isItOk is False):
|
||||
Mat = list()
|
||||
for i in range(0, SquareMatrixDimension):
|
||||
z = list()
|
||||
for j in range(0, SquareMatrixDimension):
|
||||
z.append(0)
|
||||
z[i] = 1
|
||||
Mat.append(z)
|
||||
MaxAllowedMatrixElement = math.ceil(
|
||||
pow(MaxMatrixElement, 1 / (SquareMatrixDimension)))
|
||||
randomlist = random.sample(
|
||||
range(0, MaxAllowedMatrixElement + 1), SquareMatrixDimension)
|
||||
|
||||
for i in range(0, SquareMatrixDimension):
|
||||
if i == SquareMatrixDimension - 1:
|
||||
Mat[0] = [j + (k * randomlist[i])
|
||||
for j, k in zip(Mat[0], Mat[i])]
|
||||
else:
|
||||
Mat[i + 1] = [j + (k * randomlist[i])
|
||||
for j, k in zip(Mat[i + 1], Mat[i])]
|
||||
|
||||
for i in range(1, SquareMatrixDimension - 1):
|
||||
Mat[i] = [sum(i)
|
||||
for i in zip(Mat[SquareMatrixDimension - 1], Mat[i])]
|
||||
|
||||
isItOk = True
|
||||
for i in Mat:
|
||||
for j in i:
|
||||
if j > MaxMatrixElement:
|
||||
isItOk = False
|
||||
break
|
||||
if isItOk is False:
|
||||
break
|
||||
|
||||
random.shuffle(Mat)
|
||||
Mat = sympy.Matrix(Mat)
|
||||
Mat = sympy.Matrix.transpose(Mat)
|
||||
Mat = Mat.tolist()
|
||||
random.shuffle(Mat)
|
||||
Mat = sympy.Matrix(Mat)
|
||||
Mat = sympy.Matrix.transpose(Mat)
|
||||
|
||||
else:
|
||||
randomlist = list(sympy.primerange(0, MaxMatrixElement + 1))
|
||||
plist = random.sample(randomlist, SquareMatrixDimension)
|
||||
randomlist = random.sample(
|
||||
range(0, MaxMatrixElement + 1), SquareMatrixDimension * SquareMatrixDimension)
|
||||
randomlist = list(set(randomlist) - set(plist))
|
||||
n_list = random.sample(
|
||||
randomlist, SquareMatrixDimension * (SquareMatrixDimension - 1))
|
||||
Mat = list()
|
||||
for i in range(0, SquareMatrixDimension):
|
||||
z = list()
|
||||
z.append(plist[i])
|
||||
for j in range(0, SquareMatrixDimension - 1):
|
||||
z.append(n_list[(i * SquareMatrixDimension) + j - i])
|
||||
random.shuffle(z)
|
||||
Mat.append(z)
|
||||
Mat = sympy.Matrix(Mat)
|
||||
problem = 'Inverse of Matrix ' + str(Mat) + ' is:'
|
||||
solution = str(sympy.Matrix.inv(Mat))
|
||||
return problem, solution
|
||||
@@ -1,6 +1,7 @@
|
||||
import random
|
||||
import math
|
||||
import fractions
|
||||
import sympy
|
||||
from .funcs import *
|
||||
|
||||
genList = []
|
||||
@@ -161,3 +162,4 @@ angleBtwVectors=Generator("Angle between 2 vectors", 70, "Angle Between 2 vector
|
||||
absoluteDifference=Generator("Absolute difference between two numbers", 71, "Absolute difference betweeen two numbers a and b =", "|a-b|", absoluteDifferenceFunc)
|
||||
vectorDot = Generator("Dot Product of 2 Vectors", 72, "a . b = ", "c", vectorDotFunc)
|
||||
binary2sComplement = Generator("Binary 2's Complement", 73, "2's complement of 11010110 =", "101010", binary2sComplementFunc)
|
||||
invertmatrix = Generator("Inverse of a Matrix", 74, "Inverse of a matrix A is", "A^(-1)", matrixInversion)
|
||||
|
||||
Reference in New Issue
Block a user