[PYTHON] So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets

Es gibt verschiedene Arten von bi-orthogonalen Wavelets, aber dieses Mal finden wir den Skalierungskoeffizienten von ** Cohen-Daubechies-Feauveau-Wavelet **.

Bibliothek zu verwenden

Wir werden Sympy verwenden, um den Skalierungsfaktor im interaktiven Modus von Python zu berechnen.

Präzisionseinstellung

sympy verwendet mpmath für Gleitkomma-Arithmetik mit beliebiger Genauigkeit. Die Standardgenauigkeit (die Anzahl der Bits im formalen Teil) beträgt 53, was der Gleitkommazahl mit doppelter Genauigkeit entspricht. Stellen Sie sie daher entsprechend auf etwa 256 ein.

Terminal


>>> import sympy
>>> sympy.mpmath.mp.prec
53
>>> sympy.mpmath.mp.prec = 256

Faktorisierung nach DKA-Methode

Setzen Sie $ N = 4 $, um die Lösung der folgenden Gleichung zu finden.

q(y) =
\sum_{k=0}^{N-1}
\begin{pmatrix}
N-1+k \\
k
\end{pmatrix}
y^k = 0

Die spezifische Beschreibung lautet wie folgt.

q(y) = 20y^3 + 10y^2 + 4y + 1 = 0

Terminal


>>> qy = [sympy.mpmath.binomial(4-1+k,k) for k in [3,2,1,0]]
>>> qy
[mpf('20.0'), mpf('10.0'), mpf('4.0'), mpf('1.0')]

Da es sich um eine kubische Gleichung handelt, ist es möglich, mit der Cardano-Formel eine genaue Lösung zu finden. Da es jedoch ausreicht, den Skalierungskoeffizienten mit einer Gleitkommazahl zu erhalten, DKA-Methode E2% 80% 93Kerner_method) wird verwendet.

Terminal


>>> y = sympy.mpmath.polyroots(qy)
>>> y
[mpf('-0.3423840948583691316993036540027816871936619136844427977504078911201017562570965'), mpc(real='-0.07880795257081543415034817299860915640316904315777860112479605443994912187145069', imag='0.3739306454336101226089715992265723406258901629829692932753904369966748441011043'), mpc(real='-0.07880795257081543415034817299860915640316904315777860112479605443994912187145069', imag='-0.3739306454336101226089715992265723406258901629829692932753904369966748441011043')]

Da eine reale Lösung und zwei konjugierte Komplexlösungen erhalten werden, kann $ q (y) $ in das Produkt der aus der realen Lösung erhaltenen linearen Gleichung und der aus der konjugierten komplexen Lösung erhaltenen quadratischen Gleichung zerlegt werden.

Skalierungskoeffizient

Erstellen Sie $ h_0 (z) $ mit einer realen Lösung. Setzen Sie $ y = - (1/4) z + (1/2) - (1/4) z ^ {-1} $ und passen Sie es so an, dass $ h_0 (1) = \ sqrt {2} $ Ich werde es verlassen.

Terminal


>>> h0z = sympy.sympify('-sqrt(2.0)*(y-y0)/y0') \
...            .subs({'y':'-1/4*z+1/2-1/4/z', 'y0':y[0]})
>>> h0z
-1.032622122063015088779015687939062566223023943573534440451244148644675318677*z + 3.479457806499125323032653234616953582887408360779881380902488297289350637353 - 1.032622122063015088779015687939062566223023943573534440451244148644675318677/z

Wenden Sie verschwindende Momente an, um $ h (z) $ zu erstellen.

h(z) = z^{-2} \left( \frac{1+z}{2} \right)^4 h_0(z)

Terminal


>>> hz = (sympy.sympify('z**(-2)*((z+1)/2)**4')*h0z).expand()
>>> hz
-0.06453888262893844304868848049619141038893899647334590252820275929029220741729*z**3 - 0.04068941760955843950521309482120604262529296334464102380640551858058441483457*z**2 + 0.4180922732222122294173439451808985229992791148815490275282027592902922074173*z + 0.7884856164056644517477371190118263104712661635056882976128110371611688296691 + 0.4180922732222122294173439451808985229992791148815490275282027592902922074173/z - 0.04068941760955843950521309482120604262529296334464102380640551858058441483457/z**2 - 0.06453888262893844304868848049619141038893899647334590252820275929029220741729/z**3

Nehmen Sie den Koeffizienten heraus.

Terminal


>>> scaling_coeff = [hz.coeff('z',k) for k in [-3,-2,-1,0,1,2,3]]
>>> scaling_coeff
[-0.06453888262893844304868848049619141038893899647334590252820275929029220741729, -0.04068941760955843950521309482120604262529296334464102380640551858058441483457, 0.4180922732222122294173439451808985229992791148815490275282027592902922074173, 0.7884856164056644517477371190118263104712661635056882976128110371611688296691, 0.4180922732222122294173439451808985229992791148815490275282027592902922074173, -0.04068941760955843950521309482120604262529296334464102380640551858058441483457, -0.06453888262893844304868848049619141038893899647334590252820275929029220741729]
n h[n]
0 0.7884856164056644517477371190118263104713
-1,+1 0.4180922732222122294173439451808985229993
-2,+2 -0.04068941760955843950521309482120604262529
-3,+3 -0.06453888262893844304868848049619141038894
-4,+4 0.0

Dualer Skalierungskoeffizient

Erstellen Sie $ \ tilde {h_0} (z) $ mit einem Paar konjugierter komplexer Lösungen. Setzen Sie $ y = - (1/4) z + (1/2) - (1/4) z ^ {-1} $ und dann $ \ tilde {h_0} (1) = \ sqrt {2} $ Ich werde es so einstellen.

Terminal


>>> d_h0z = sympy.sympify('sqrt(2.0)*(y-y1)/y1*(y-y2)/y2') \
...              .subs({'y':'-1/4*z+1/2-1/4/z', 'y1':y[1], 'y2':y[2]})
>>> d_h0z
(-0.353553390593274*z + 0.818558056535050389640616746751093460160688904372839526463833807943026504668 - 0.5288177901591365145695624730424192033800671915517564410974157359390278433361*I - 0.353553390593274/z)*(-z/4 + 0.5788079525708154341503481729986091564031690431577786011247960544399491218714 + 0.3739306454336101226089715992265723406258901629829692932753904369966748441011*I - 1/(4*z))/((-0.07880795257081543415034817299860915640316904315777860112479605443994912187145 - 0.3739306454336101226089715992265723406258901629829692932753904369966748441011*I)*(-0.07880795257081543415034817299860915640316904315777860112479605443994912187145 + 0.3739306454336101226089715992265723406258901629829692932753904369966748441011*I))

Wenden Sie den Fluchtmoment an, um $ \ tilde {h} (z) $ zu erstellen.

\tilde{h}(z) = z^{-2} \left( \frac{1+z}{2} \right)^4 \tilde{h_0}(z)

Terminal


>>> d_hz = (sympy.sympify('z**(-2)*((z+1)/2)**4')*d_h0z).expand()
>>> d_hz
0.03782845550699546397896088239109810588598928919558903883377596750890210864563*z**4 - 0.02384946501938000354347538567498536776364603312870487872179724070970779258271*z**3 - 0.1106244044184234045317958917055274640064847218822291494893245217456879810963*z**2 + 1.848054221112700632088327353557561911770062193154051589356698864673908481848e-78*I*z**2 + 0.3774028556126537624098752472272712265473030007883118118671540106333915390923*z - 0.00000000000000001776744107070853984299687632133069137868739252186023273178181181386681671503*I*z + 0.852698679009403501358319120148908609110388988411630399468592427310915899508 + 7.392216884450802528353309414230247647080248772616206357426795458695633927391e-78*I + 0.3774028556126537624098752472272712265473030007883118118671540106333915390923/z - 0.00000000000000001776744107070853984299687632133069137868739252186023273178180811775837448963*I/z - 0.1106244044184234045317958917055274640064847218822291494893245217456879810963/z**2 + 1.848054221112700632088327353557561911770062193154051589356698864673908481848e-78*I/z**2 - 0.02384946501938000354347538567498536776364603312870487872179724070970779258271/z**3 + 0.03782845550699546397896088239109810588598928919558903883377596750890210864563/z**4

Nehmen Sie den Koeffizienten heraus. Da der Imaginärteil praktisch 0 ist, wird nur der Realteil verwendet.

Terminal


>>> d_scaling_coeff = [sympy.re(d_hz.coeff('z',k)) for k in [-4,-3,-2,-1,0,1,2,3,4]]
>>> d_scaling_coeff
[0.03782845550699546397896088239109810588598928919558903883377596750890210864563, -0.02384946501938000354347538567498536776364603312870487872179724070970779258271, -0.1106244044184234045317958917055274640064847218822291494893245217456879810963, 0.3774028556126537624098752472272712265473030007883118118671540106333915390923, 0.8526986790094035013583191201489086091103889884116303994685924273109158995080, 0.3774028556126537624098752472272712265473030007883118118671540106333915390923, -0.1106244044184234045317958917055274640064847218822291494893245217456879810963, -0.02384946501938000354347538567498536776364603312870487872179724070970779258271, 0.03782845550699546397896088239109810588598928919558903883377596750890210864563]
n h~[n]
0 0.8526986790094035013583191201489086091104
-1,+1 0.3774028556126537624098752472272712265473
-2,+2 -0.1106244044184234045317958917055274640065
-3,+3 -0.02384946501938000354347538567498536776365
-4,+4 0.03782845550699546397896088239109810588599

Wavelet-Koeffizient

Der Wavelet-Koeffizient $ g_n $ ist das invertierte Vorzeichen jedes anderen dualen Skalierungskoeffizienten $ \ tilde {h} _n $.

Terminal


>>> wavelet_coeff = [s*(-1)**k for k,s in zip([-4,-3,-2,-1,0,1,2,3,4], d_scaling_coeff)]
>>> wavelet_coeff
[0.03782845550699546397896088239109810588598928919558903883377596750890210864563, 0.02384946501938000354347538567498536776364603312870487872179724070970779258271, -0.1106244044184234045317958917055274640064847218822291494893245217456879810963, -0.3774028556126537624098752472272712265473030007883118118671540106333915390923, 0.8526986790094035013583191201489086091103889884116303994685924273109158995080, -0.3774028556126537624098752472272712265473030007883118118671540106333915390923, -0.1106244044184234045317958917055274640064847218822291494893245217456879810963, 0.02384946501938000354347538567498536776364603312870487872179724070970779258271, 0.03782845550699546397896088239109810588598928919558903883377596750890210864563]
n g[n]
0 0.8526986790094035013583191201489086091104
-1,+1 -0.3774028556126537624098752472272712265473
-2,+2 -0.1106244044184234045317958917055274640065
-3,+3 0.02384946501938000354347538567498536776365
-4,+4 0.03782845550699546397896088239109810588599

Dualer Wavelet-Koeffizient

Der duale Wavelet-Koeffizient $ \ tilde {g} _n $ ist die Inversion jedes anderen Skalierungskoeffizienten $ h_n $.

Terminal


>>> d_wavelet_coeff = [s*(-1)**k for k,s in zip([-3,-2,-1,0,1,2,3], scaling_coeff)]
>>> d_wavelet_coeff
[0.06453888262893844304868848049619141038893899647334590252820275929029220741729, -0.04068941760955843950521309482120604262529296334464102380640551858058441483457, -0.4180922732222122294173439451808985229992791148815490275282027592902922074173, 0.7884856164056644517477371190118263104712661635056882976128110371611688296691, -0.4180922732222122294173439451808985229992791148815490275282027592902922074173, -0.04068941760955843950521309482120604262529296334464102380640551858058441483457, 0.06453888262893844304868848049619141038893899647334590252820275929029220741729]
n g~[n]
0 0.7884856164056644517477371190118263104713
-1,+1 -0.4180922732222122294173439451808985229993
-2,+2 -0.04068941760955843950521309482120604262529
-3,+3 0.06453888262893844304868848049619141038894
-4,+4 0.0

Zeichnen Sie mit dem Kaskadenalgorithmus

Den ungefähren Wert der Skalierungsfunktion können Sie mit dem Kaskadenalgorithmus ermitteln. cdf_9_7_scaling.png cdf_9_7_wavelet.png

Verweise

Recommended Posts

So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
So berechnen Sie die Volatilität einer Marke
So finden Sie den Bereich des Boronoi-Diagramms
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
[Ubuntu] So löschen Sie den gesamten Inhalt des Verzeichnisses
So finden Sie die optimale Anzahl von Clustern für k-means
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
So ermitteln Sie die durchschnittliche Informationsmenge (Entropie) der ursprünglichen Wahrscheinlichkeitsverteilung aus der Stichprobe
So bestimmen Sie die Existenz eines Selenelements in Python
So überprüfen Sie die Speichergröße einer Variablen in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
[NNabla] So entfernen Sie die mittlere Ebene eines vorgefertigten Netzwerks
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
So überprüfen Sie die Version von Django
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[NNabla] Hinzufügen einer Quantisierungsschicht zur mittleren Schicht eines trainierten Modells
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
So spielen Sie ein Video ab, während Sie die Anzahl der Bilder ansehen (Mac)
Die Hand von "Millijan" durch Kombinationsoptimierung finden
So finden Sie die Korrelation für kategoriale Variablen
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Wie man eine Benutzergruppe mit Slack-Benachrichtigung erwähnt, wie man die ID einer Benutzergruppe überprüft
[NNabla] So erhalten Sie die Ausgabe (Variable) der mittleren Schicht des erstellten Netzwerks
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
[Python] So sortieren Sie nach dem N-ten M-ten Element eines mehrdimensionalen Arrays
[Numpy, scipy] Wie berechnet man die Quadratwurzel einer Elmeet-Matrix mit halbregelmäßigem Wert?
So ermitteln Sie den Koeffizienten der ungefähren Kurve, die in Python durch die Scheitelpunkte verläuft
So erstellen Sie einen Raspberry Pi, der die Tweets eines bestimmten Benutzers spricht
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Lesen Sie die Python-Markdown-Quelle: So erstellen Sie einen Parser
Wie man die Portnummer des xinetd-Dienstes kennt
So schreiben Sie eine GUI mit dem Befehl maya
So ermitteln Sie die Anzahl der Stellen in Python
Hinweise zur Verwendung von AIST Spacon ABCI
Ein Memo zum visuellen Verstehen der Achse von Pandas.Panel
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Die Entscheidung von scikit-learn Wie man ein Holzmodell visualisiert
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
Schritte zur Berechnung der Wahrscheinlichkeit einer Normalverteilung
[Blender] So legen Sie die Auswahlelemente von EnumProperty dynamisch fest
Grundlagen von PyTorch (2) - Wie erstelle ich ein neuronales Netzwerk?
[Python] Zusammenfassung, wie die Farbe der Figur angegeben wird
Wie man das Dokument der magischen Funktion (Linienmagie) trifft
So greifen Sie auf die globale Variable des importierten Moduls zu
So veröffentlichen Sie ein Ticket über die Shogun-API
[Selen] Wie wird der relative Pfad des Chromedriver angegeben?
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
So zeigen Sie das Änderungsdatum einer Datei in C-Sprache bis zu Nanosekunden an
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
Ich kann die Uhrenquelle tsc nicht finden! ?? Die Geschichte des Versuchs, einen Kernel-Patch zu schreiben
[Ruby] Wie ersetze ich nur einen Teil der Zeichenkette, der mit dem regulären Ausdruck übereinstimmt?
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
Suchen Sie eine Richtlinie für die Anzahl der Prozesse / Threads, die auf dem Anwendungsserver festgelegt werden sollen
Die weltweit am einfachsten zu verstehende Erklärung zur Herstellung von LINE BOT (1) [Kontoerstellung]