Chciałbym móc szybko ustalić, czy dane jądro 2D o współczynnikach całkowitych można rozdzielić na dwa jądra 1D o współczynnikach całkowitych. Na przykład
2 3 2
4 6 4
2 3 2
można podzielić na
2 3 2
i
1
2
1
Rzeczywisty test separowalności wydaje się dość prosty przy użyciu arytmetyki liczb całkowitych, ale rozkład na filtry 1D o współczynnikach całkowitych okazuje się trudniejszym problemem. Trudność wydaje się polegać na tym, że stosunki między rzędami lub kolumnami mogą być niecałkowite (ułamki wymierne), np. W powyższym przykładzie mamy stosunki 2, 1/2, 3/2 i 2/3.
Naprawdę nie chcę stosować podejścia o dużej obciążalności, takiego jak SVD, ponieważ (a) jest to stosunkowo kosztowne obliczeniowo dla moich potrzeb i (b) nadal niekoniecznie pomaga w określeniu współczynników całkowitych .
Jakieś pomysły ?
DALSZA INFORMACJA
Współczynniki mogą być dodatnie, ujemne lub zerowe i mogą wystąpić przypadki patologiczne, w których suma jednego lub obu wektorów 1D wynosi zero, np.
-1 2 -1
0 0 0
1 -2 1
można podzielić na
1 -2 1
i
-1
0
1
źródło
Odpowiedzi:
Wziąłem
@Phonon
odpowiedź i nieco ją zmodyfikowałem, aby używała metody GCD tylko w górnym wierszu i lewej kolumnie, a nie w sumach wierszy / kolumn. Wydaje się, że to trochę lepiej radzi sobie z przypadkami patologicznymi. Nadal może się nie powieść, jeśli wszystkie górne wiersze lub lewe kolumny są zerami, ale przypadki te można sprawdzić przed zastosowaniem tej metody.Wielkie dzięki
@Phonon
i@Jason R
dla oryginalnych pomysłów na to.źródło
Rozumiem! Publikując kod MATLAB, opublikuję wyjaśnienie dziś wieczorem lub jutro
źródło
A=[-2 1 0 -1 2]; B=[2 -3 6 0 -1]; M=A'*B;
. Problem w tym, żesum(A) = 0
takSb = [0 0 0 0 0]
. Spróbuję zmodyfikować algorytm, aby używał sumy wartości bezwzględnych współczynników i sprawdził, czy to pomoże. Jeszcze raz dziękuję za pomoc.abs(M)
IESa=abs(M)*ones(N,1); Sb=ones(1,N)*abs(M);
, a następnie kontynuować jak wyżej, ale nie mogę jeszcze zobaczyć, jak przywrócić znaki doSa
,Sb
na końcu. Dodałem patologiczny przykład, który ilustruje problem w pierwotnym pytaniu powyżej.Może trywializuję problem, ale wygląda na to, że możesz:
Nie jest to najbardziej elegancka metoda i prawdopodobnie istnieje lepszy sposób, ale powinna działać, jest dość prosta do wdrożenia i powinna być stosunkowo szybka w przypadku matryc o skromnych rozmiarach.
źródło
(Od przybliżonych splotów jako sumy rozdzielnych splotów na matematyce. Wymiana_kumulacji.)
źródło