Definieren Sie stückweise Funktionen in Julia

8

Ich habe eine Anwendung, in der ich eine stückweise Funktion definieren muss, IE, f (x) = g (x) für [x in einem Bereich], f (x) = h (x) für [x in einigen anderer Bereich], ... usw.

Gibt es einen schönen Weg, dies in Julia zu tun? Ich würde lieber nicht, wenn-sonst, weil es scheint, dass ich jeden Bereich für große Werte von x überprüfen müsste. Die Art, wie ich dachte, war, ein Array von Funktionen und ein Array von Grenzen / Bereichen zu konstruieren, dann, wenn f (x) aufgerufen wird, eine binäre Suche nach den Bereichen durchzuführen, um den passenden Index zu finden und die entsprechende Funktion zu verwenden (IE, h (x), g (x) usw.

Es scheint, als ob eine solche mathematisch freundliche Sprache eine gewisse Funktionalität dafür hätte, aber die Dokumentation erwähnt auf diese Weise nicht stückweise. Hoffentlich hat jemand anderes dies bedacht, danke!

    
user3587051 27.12.2014, 06:09
quelle

3 Antworten

1

Mit einer Heaviside-Funktion können Sie eine Intervallfunktion ausführen:

%Vor%

und

%Vor%

und ich denke, es könnte auch einen Subtyp Interval implementieren, wäre es viel eleganter

    
elsuizo 28.12.2014 14:56
quelle
1

Ich habe versucht, eine piecewise Funktion für Julia zu implementieren, und das ist das Ergebnis:

%Vor%     
Reza Afzalan 01.11.2015 09:51
quelle
1

Warum nicht so etwas?

%Vor%

Hier haben Sie eine Liste von (sortierten) Haltepunkten, und Sie können den optimierten searchsortedfirst verwenden, um den ersten Haltepunkt b größer als x zu finden. Der Randfall, wenn kein Haltepunkt größer als x ist, wird ebenfalls entsprechend behandelt, da length(breakpts)+1 zurückgegeben wird, so dass b der korrekte Index in den Vektor der Funktionen f ist.

    
Alex Williams 02.04.2016 17:30
quelle

Tags und Links