Wpis z mikrobloga

próbuję napisać kod w pythonie na liczenie wyznacznika macierzy metodą Leibniza

# szukanie znaku permutacji
def znak_permutacji(L: list):
lista_wag = []
suma = 0
for i in range(0, len(L)):
waga = 0
for j in range(i+1, len(L)):
if L[j] < L[i]:
waga = waga + 1
else:
waga = 0
lista_wag.append(waga)
for k in lista_wag:
suma = suma + k
znak = (-1)**suma
return znak

# wypisywanie wszystkich możliwych permutacji zadanej listy
def grupa_permutacji(L: list):
if len(L) == 0:
return [[]]
permutacje = []
for l in L:
temp_list = L[:]
temp_list.remove(l)
for p in grupa_permutacji(temp_list):
permutacje.extend([[l] + p])
return permutacje

def det_leibniz(A):
wyzn = 0
lista = []
for i in range(0, len(A)):
lista.append(i)
lista_permutacji = grupa_permutacji(lista)
for p in lista_permutacji:
iloczyn = 1
iloczyn_znak = 1
for j in lista:
iloczyn = iloczyn * A[j][p[j]]
iloczyn_znak = iloczyn * znak_permutacji(p)
#print("p = ", p, ", j = ", j, ", A[j][p[j]] = ", A[j][p[j]], ", iloczyn = ", iloczyn, ", iloczyn_znak = ", iloczyn_znak)
wyzn = wyzn + iloczyn_znak
return wyzn

ma ktoś może pomysł co tu jest nie tak? to co mnie udało się zauważyć, to że zdarzają się pojedyncze przypadki, w których znak permutacji nie jest wyznaczany poprawnie. pozostałe wyniki wydają się być w porządku i przy poprawnym znaku wyznacznik raczej wychodziłby prawidłowy

funkcja znakpermutacji ma wyznaczać znak na takiej zasadzie, że w zadanej liście sprawdza, ile elementów listy, na prawo od sprawdzanego aktualnie elementu, jest od niego mniejszych, wrzuca tę wartość do nowej listy (listawag) i wówczas potęgą -1 jest suma elementów nowej listy

#programowanie #python #matematyka #informatyka
  • 24
@black-kitsune: to moja praca skończona, niech się mądrzejsi teraz wypowiadają. Miałem to tak dawno, że potrzebowałbym dobrej chwili, żeby zrozumieć samą tę metodę nie mówiąc o implementacji ( ͡° ͜ʖ ͡°). No chyba że znasz jakieś dobre źródło wyjaśniające tę metodę, to pomyślę w wolnej chwili
funkcja znakpermutacji ma wyznaczać znak na takiej zasadzie, że w zadanej liście sprawdza, ile elementów listy, na prawo od sprawdzanego aktualnie elementu, jest od niego mniejszych, wrzuca tę wartość do nowej listy (listawag) i wówczas potęgą -1 jest suma elementów nowej listy


@black-kitsune: wiesz co sobie myślę, że to co napisałaś o tej funkcji powinnaś opisać w krótkiej dokumentacji wewnątrz niej i najlepiej podając działające dane w formie przykładu. Nie
serio ludzie siedaja z nudow i rozkminiaja czyjs kod za darmo?


@kimikini: czasem to fajne ćwiczenie, ja kiedyś szwagrowi za darmo pomogłem dół wykopać, a potem razem ten dół zasypaliśmy.

Czasem za darmo staruszkę przez drogę przeprowadzę
funkcja znakpermutacji_ ma wyznaczać znak na takiej zasadzie, że w zadanej liście sprawdza, ile elementów listy, na prawo od sprawdzanego aktualnie elementu, jest od niego mniejszych


@black-kitsune: i zerujesz wagę za każdym razie gdy któryś element nie jest mniejszy? linia 10-11
@black-kitsune: Wiesz do bym zrobił jak bym dostał dane testowe oraz oczekiwany wynik? Uruchomił debuger.

Kiedyś pisałem już o tym komuś że są pewne problemy których nie jesteśmy w stanie ogarnąć wyobraźnią np. bo już człowiek jest zmęczony.

Wtedy uruchamiasz kod w debugerze i krok po kroku śledzisz jakie masz dane wynikowe w tym konkretnym miejscu kodu. Oczywiście musisz wiedzieć jakie dane są poprawne w danym momencie.

Tym sposobem szybko dojdziesz