Seite 1 von 1
Fourier-Transformation
Verfasst: Do Sep 24, 2020 6:39 pm
von Uemlaeuetmaenn
Ich muss von einer gegebenen Funktion die Fourier-Transformation berechnen (Genau genommen die Fourier-Rücktransformation, aber das ist ja quasi das gleiche). Meine Versuche diesbezüglich sind jedoch alle gescheitert. Hat jemand einen Vorschlag für mich, wie ich das am besten umsetzen kann? Dafür wäre ich sehr dankbar.
Re: Fourier-Transformation
Verfasst: Fr Sep 25, 2020 8:33 am
von jogo
Hallo Uemlaeuetmaenn,
willkommen im Forum!
Wenn Du dies im Sinne der Analysis (mathematisches Teilgebiet) meinst, dann hat dies nichts mit R zu tun.
Falls es etwas mit R zu tun hat, liefere uns bitte entsprechendes Futter (Daten und Code).
Gruß, Jörg
Re: Fourier-Transformation
Verfasst: So Sep 27, 2020 6:16 pm
von Uemlaeuetmaenn
Hallo Jörg,
ich weiß wie in der Theorie eine Fourier-Transformation und eine Fourier-Rücktransformation funktionieren. Meine konkrete Fourier-Transformierte ist nur leider ein konvergentes unendliches Produkt. Daher kann ich das Integral, das in der Berechnung der entsprechenden Rücktransformationsformel auftaucht, nicht exakt analytisch berechnen. Daher approximiere ich meine Foruieretransformierte mit 1.500 Faktoren. Auf diese Approximation möchte ich nun die Fourier-Rücktransformationsformel werfen, um eine Approximation der gesuchten Funktion zu bekommen. Hier ist mein Code dazu:
Code: Alles auswählen
phi_fourier <- function(x)
{
product=1
for(count in 1:1500)
{product = product*m_0(x/(2**count))}
return(product)
} %Dieser Teil scheint noch zu funktionieren soweit ich das erkennen kann. Ich kann diese Funktion plotten.
phi <- function(x)
{
z <- 1/sqrt(2*pi)*myintegrate(function(t){y <- exp(1i*t*x)*phi_fourier(t); return(y)},lower=-Inf,upper=Inf)
return(z)
} % Dieser Code selbst gibt mir noch keine Fehlermeldung. Diese bekomme ich aber, wenn ich versuche die Funktion zu plotten.
Re: Fourier-Transformation
Verfasst: Mo Sep 28, 2020 8:25 am
von jogo
Hallo Uemlaeuetmaenn,
Hier ist mein Code dazu: ...
Was verbirgt sich hinter der Funktion
myintegrate(). Ohne diese Funktion ist Dein Code nicht reproduzierbar.
Auch die Definition der Funktion
m_0() hast Du nicht mitgeliefert.
Wenn die Funktion m_0() mit Vektoren gut umgehen kann, dann kannst Du die Funktion phi_fourier() auch so definieren
Code: Alles auswählen
phi_fourier <- function(x)
{
count <- -(1:1500)
prod(m_0(x^count))
}
% Dieser Code selbst gibt mir noch keine Fehlermeldung. Diese bekomme ich aber, wenn ich versuche die Funktion zu plotten.
Kannst Du bitte auch zeigen, wie Dein Code für das Plotten aussieht (... Du weißt ... wegen der Reproduzierbarkeit)?
Gruß, Jörg
Re: Fourier-Transformation
Verfasst: Mo Sep 28, 2020 9:27 am
von Uemlaeuetmaenn
Hallo Jörg,
das mit myintegrate wollte ich eigentlich noch schreiben, habs dann aber vergessen. Die Funktion ist aus dem package"elliptic". Ich habe sie statt "integrate" verwendet, weil ein Freund meinte "integrate" kommt nicht mit komplexwertigen Funktionen klar, "myintegrate" dagegen schon.
Hier der restliche Code.
Code: Alles auswählen
function(x)
{z <- 1/sqrt(2)*(0.482963*exp(-1i*1*x)+0.836516*exp(-1i*2*x)+0.224144*exp(-1i*3*x)-0.12941*exp(-1i*4*x));
return(z)}
plot(phi)
Mit freundlichen Grüßen,
Uemlaeuetmaenn
Re: Fourier-Transformation
Verfasst: Mo Sep 28, 2020 11:27 am
von jogo
Hallo Uemlaeuetmaenn,
Code: Alles auswählen
library("elliptic")
m_0 <- function(x) {
1/sqrt(2)*(0.482963*exp(-1i*1*x)+0.836516*exp(-1i*2*x)+0.224144*exp(-1i*3*x)-0.12941*exp(-1i*4*x))
# return(z)
}
phi_fourier <- function(x) {
product=1
for(count in 1:1500) product = product*m_0(x/(2**count))
return(product)
} # Dieser Teil scheint noch zu funktionieren soweit ich das erkennen kann. Ich kann diese Funktion plotten.
plot(phi_fourier)
x <- seq(0, 1, .02)
y <- phi_fourier(x)
plot(x, Re(y), type="l")
phi <- function(x) {
z <- 1/sqrt(2*pi) *
myintegrate(function(t) {y <- exp(1i*t*x)*phi_fourier(t); return(y)},lower=-Inf,upper=Inf)
return(z)
}
# Dieser Code selbst gibt mir noch keine Fehlermeldung.
# Diese bekomme ich aber, wenn ich versuche die Funktion zu plotten.
plot(phi) # error, weil plot() einen Vektor an die Funktion schickt
# so geht es:
x <- seq(0, 1, .02)
y <- sapply(x, phi)
plot(x, Re(y), type="l")
... und es ist wahr, integrate() kann nicht mit komplexwertigen Funktionen umgehen:
https://stackoverflow.com/questions/383 ... wrong-type
Mein Versuch einer Lösung mit Vectorize() erzeugt im ersten Anlauf auch einen Fehler:
Code: Alles auswählen
plot(Vectorize(phi)) # error: maximum number of subdivisions reached
weitere Infos zu diesem Fehler gibt es hier:
https://stackoverflow.com/questions/239 ... ns-reached
Gruß, Jörg
Re: Fourier-Transformation
Verfasst: Mo Sep 28, 2020 12:38 pm
von Uemlaeuetmaenn
Ok vielen Dank Jörg,
wenn ich das richtig verstehe lag das Problem tatsächlich "nur" im Plotten der Funktion (was ich eigentlich nur machen wollte, um zu sehen, ob der Rest geklappt hat)!? Ich kann also mit dem Rest weiterarbeiten!?
Liebe Grüße,
Ümläütmänn
Re: Fourier-Transformation
Verfasst: Mo Sep 28, 2020 1:26 pm
von jogo
Hallo Ümläütmänn,
Uemlaeuetmaenn hat geschrieben: Mo Sep 28, 2020 12:38 pm
wenn ich das richtig verstehe lag das Problem tatsächlich "nur" im Plotten der Funktion (was ich eigentlich nur machen wollte, um zu sehen, ob der Rest geklappt hat)!? Ich kann also mit dem Rest weiterarbeiten!?
im Prinzip schon. Gelegentlich muss Du Dir des Problems der nichtvektorisierten Funktionen bewusst sein.
(also solcher Funktionen, die augelegt wurden, um nur eine einzelne Zahl zu verarbeiten, und mit einem Vektor nicht zurecht kommen)
Gruß, Jörg