62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
import numpy as np
|
|
import pandas as pd
|
|
from scipy.sparse.linalg import lsqr
|
|
from scipy.linalg import *
|
|
from sympy import Matrix
|
|
from sympy import symbols, Add, Mul, S
|
|
from numpy.linalg import matrix_rank
|
|
from itertools import combinations
|
|
|
|
|
|
N = np.array([[ 0, 1, 1],
|
|
[ 0, -1, -1],
|
|
[ 1, 0, 0],
|
|
[ 0, 0, 0],
|
|
[ 0, 0, 0],
|
|
[ 0, 0, 0],])
|
|
|
|
N = np.array([[ 0, 0, 3, 1, 1, 1, 1, 1, 1],
|
|
[ 0, 0, -2, 0, 0, 0, 0, 0, 0],
|
|
[ 1, 1, -1, 0, 0, 0, 0, 0, 0],
|
|
[ 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
[ 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
[ 0, 0, 0, 0, 0, 0, 0, 0, 0]])
|
|
|
|
a = np.array([ 1, -2, 1, 0, 0, 0])
|
|
|
|
def getPowers(N,a):
|
|
rand_drop_cols = np.arange(0,len(N[0]),1)
|
|
rand_drop_rows = np.arange(0,len(N),1)
|
|
rand_drop_rows = np.flip(rand_drop_rows)
|
|
rank = matrix_rank(N)
|
|
d_cols = list(combinations(rand_drop_cols,len(N[0])-rank))
|
|
d_rows = list(combinations(rand_drop_rows,len(N)-rank))
|
|
for i in d_cols:
|
|
M = N
|
|
M = np.delete(M,i,1)
|
|
M = np.transpose(M)
|
|
for j in d_rows:
|
|
P = M
|
|
P = np.delete(P,j,1)
|
|
if np.linalg.det(P)!=0:
|
|
solved_M = np.transpose(P)
|
|
indices_sol = j
|
|
indices_powers = i
|
|
break
|
|
|
|
b = np.delete(a,indices_sol)
|
|
params = np.linalg.solve(solved_M,b)
|
|
|
|
sol = []
|
|
for i in range(len(N[0])):
|
|
if i in indices_powers:
|
|
sol = sol + [0]
|
|
else:
|
|
sol = sol + [params[0]]
|
|
params = np.delete(params,0)
|
|
|
|
# this is the solution:
|
|
sol = np.array(sol)
|
|
return(sol)
|
|
|
|
|