Snažím se přeložit některé pseudokódu z matlabu do skript v pythonu, ale mám nějaké potíže s dostat správnou odpověď? Může mi někdo pomoci identifikovat, kde jsem to pokazil překlad?
Pseudokód jsem dal v jednom pro Choleského rozklad uveden v Trefethan & Bau kniha je
To se provádí pro horní trojúhelníkové matice, pokud chápu popis správně, ale myslím, že tohle by mělo fungovat pro obecné matice taky, ne?
Každopádně, jsem napsal následující kód v pythonu:
def is_SPD(A):
if np.all(A == A.T):
if np.all(la.eigvals(A) > 0):
return True
return False
def cholesky_decomp(A):
#first check if matrix is symmetric and positive definite
if is_SPD(A) == True:
R = np.copy(A)
for k in range (0, len(A)):
for j in range (k+1, len(A)):
R[j,j:] = R[j,j:] - (R[k,j:]*(R[k,j]/R[k,k]))
R[k,k:] = R[k,k:]/sqrt(R[k,k])
return R
else:
return print('Cholesky decomposition not applicable')
Pracuji na 4x4 matrix, a já jsem udělal rozklad do np.linalg metoda, a mé odpovědi jsou zcela odlišné.
Myslím, že to může? kvůli mé neznalosti MATLAB a můj nedostatek kódování dovednosti obecně, ale nedostal jsem žádnou správné odpovědi na všechny a nemůžu přijít na to, kde jsem jít špatně.
Přidávám vzorek matrice tady, že jsem pomocí, a že to shoulddd být použitelný, a měl by dát správné Choleského rozklad, ale já jsem stále zcela nesprávnou odpověď.
Mohl by mi někdo, prosím, použijte to, aby mi pomohl přijít na to, kde jsem jít špatně?
A = np.array([[16, -12, -12, -16], [-12, 25, 1, -4], [-12, 1, 17, 14], [-16, -4, 14, 57]])
můj kód mi dal:
[[ 4 -3 -3 -4]
[-12 4 -2 -4]
[-12 1 2 -3]
[-16 -4 14 4]]
zatímco numpy Choleskyho funkce mi dal:
[[ 4. 0. 0. 0.]
[-3. 4. 0. 0.]
[-3. -2. 2. 0.]
[-4. -4. -3. 4.]]