[ Übersicht ] [ Installation ] [ Namenskonvention ] [ In/Output ] [ Parameterfile ] [ Demos ] [ to do ] [Autor: A. Röttig ]

Zurück

Algorithmen: Modellfunktionen: akornn, mp1mnn, mp2mnn, mpa3nn, mpa4nn,cknnpp, amnnpp, bmnnpp, mp3mnn, cmnnpp

Dei Übersicht kann man ausnahmsweise nicht sequentiell nutzen, dies ist eher ein Index zum schnellen Zugriff.

Der schnelle Zugriff

Prinzipieller Aufbau

Es kann ein allgemeines Modell bestehend aus vier Strukturen definiert werden. Jede der Strukturen kann eine beliebige theoretische Modellfunktion sein. Diese Funktionen entsprechen den Korrelationsfunktionen ohne Nuggeteffekt. Dieser wird extra spezifiziert. Jede Struktur der Modellfunktion kann außerdem mit einer cosinus- oder sinus-Funktion überlagert werden. Hier nun ein Versuch einer allgemeinen Darstellung den man in [hjsdjh] in gedruckter Form finden kann (zweidimensionaler Fall):

σ(x,y)={{ σ2gesamtfürx2+y2=0 σ2gesamt-σ2nugget(v1f1(x,y,α,ν)g1(x,y,β) + v2f2(x,y,α,ν)g2(x,y,β) + v3f3(x,y,α,ν)g3(x,y,β) + v4f4(x,y,α,ν)g4(x,y,β))fürx2+y2=0 }

Die Funktionen fi(x,y,α,ν) können lineare, exponentielle, GAUSS'sche, sphärische, HIRVONEN-, verallgemeinerte exponentielle, verallgemeinerte HIRVONEN-Modelle oder die Konstante Eins sein. Der Parameter α ist das Maß für die Abnahme der Nachbarschaftsbeeinflussung und ν ein Exponent bei den verallgemeinerten Modellen [
TTIG 1997]. Mit den Funktionen gi(x,y,β) lassen sich den obengenannten Modellen Schwingungen aufprägen, deren Wellenlänge λ über den Parameter β=2π/λ eingeht. Die vi sind Verhältniszahlen, deren Summe Eins ergeben muß.


Hinzufügen von neuen Modellen

Die Ableitungen der Modellfunktionen sind strenggenommen natürlich auch Modellfunktionen. Sie werden jedoch im Programm aus den den Ausgangs(Grund)funktionen numerisch berechnet. Diese Algorithem sind für beliebige Modellfunktionen gleich, man braucht deshalb nur die Ausgangsfunktionen auszuprogrammieren.

Das Hinzufügen von neuen, eigenen Modellen gestaltet sich deshalb recht einfach. Alle Modellfunktionen, die in irgendeinem Programm aufgerufen werden, sind für den zweidimensionalen Fall in der Datei ../grille/allg/modell2.c definiert. Für den 1D bzw 3D-Fall gelten die Ausführungen dieser Seite ganz genauso. Sie sind nur in ../grille/allg/modell1.c bzw. ../grille/allg/modell3.c, mit einem Aufrufparameter (Koordinatenunterschiede) weniger bzw. mehr, definiert. Im weiteren beschränke ich mich deshalb auf den 2D-Fall.

Als Ausgangspunkt soll das Beispiel der isotropen Gauß'schen Funktion dienen:
    
    double gaussI2(double h,double r,mostruk *m)
    {
          double s;
          s=exp(-((*m).alphak)*((*m).alphak)*(h*h+r*r));
          return(s);
    }
    

Eine neue Funktion muß die gleichen Aufrufparameter haben und kann die in der Struktur
mostruk *m definierten Variablen verwenden. Man muß also einen festen Funktionsaufruf vereinbaren, im Funktionskörper darf vom Einfachsten bis zum Kompliziertesten alles stehen, der Return-Wert ist der berechnete Wert der Funktion. Nuggeteffekt und Streuungen werden außerhalb dieser Funktionen berücksichtigt. Diese Funktionen sind quasi die reinen Korrelationsfunktionen. Hier die allgemeine Vereinbarung, deren Funktionsname im weiteren verwendet wird, um die neue Funktion bekannt zu machen:
    
    double neueFunktionI2(double h,double r,mostruk *m)
    {
          double s;
          .
          .
          Funktionskörper mit (*m).alphak, (*m).alphag usw. usf.
          .
          .
          return(s); 
    } 
    

Das große "I" im Funktionsnamen bedeutet bei mir immer "isotrope Funktion". So wie das "A" "anisotrope Funktion" bedeutet.

In diesem Funktionskörper kann man auf folgende Modellparameter zugreifen, sie seien mit ihren korrespondierenden Bezeichnungen in den ID's aufgeführt:
Variable ID's (Auto-,Kreuzkorrelation) Inhalt
alphag mp1mnn, amnnpp (1.Wert) minimale Reichweite
alphak mp1mnn, amnnpp (2.Wert) maximale oder isotrope Reichweite
tba mp1mnn, amnnpp (3.Wert) Richtungswinkel zur maximalen Reichweite
betak mp1mnn, amnnpp (4.Wert) minimale oder isotrope Wellenlänge
betag mp1mnn, amnnpp (5.Wert) maximale Wellenlänge
tbb mp1mnn, amnnpp (6.Wert) Richtungswinkel zur maximalen Wellenlänge
nue mp2mnn, bmnnpp (1. Wert) Exponent der verallg. Modelle
mqmglatt mp3mnn, cmnnpp (1. Wert) meist Glättungsfaktor in Kernfunktionen
kern2 mp3mnn, cmnnpp (2. Wert) 2. Parameter in Kenfunktionen
kern3 mp3mnn, cmnnpp (3. Wert) 3. Parameter in Kenfunktionen

Benötigt man für seine Funktion weitere Parameter, muß dies in in der Strukturvereinbarung verändert werdenHINWEIS.

Hat man sich seine Funktion geschrieben, muß man sie dem Funktionsarray in ../grille/allg/modell2.h bekannt machen. Dieses indexierte Feld ist die Grundlage für die Auswahl des jeweiligen Modells während der Berechnung. Der Index ist gleich der Zahl der Modellnummer in akornn bzw. cknnpp. Hier ein Beispiel:
    
    struct ftab modell[] = {
                         dummy,
                         exponI2,
                         lineaI2,
                         spherI2,
                         gaussI2,
                         alexpI2,
                         alhirI2,
                         konstI2,
                         cosmoI2, /* 8. Element siehe COSMOD */
                         sinmoI2, /* 9. Element siehe SINMOD */
                         mqmHAI2,
    		     mqm_inverse2,
    		     multilog2,
    		     na_cubic_spline2,
    		     thin_plate_spline2, 
    		     sincI2,  /* 15. Element, siehe ANZISOMOD */
                         exponA2,
                         lineaA2,
                         spherA2,
                         gaussA2,
                         alexpA2,
                         alhirA2,
                         konstI2,
                         cosmoA2,
                         sinmoA2,
                         };
    /* COSMOD = 8; SINMOD = 9; ANZISOMOD = 15; */
    

In das obige Feld ist nun die nue Funktion mit ihrem Namen neueFunktionI2 einzutragen. Da die Reihenfolge den Arrayindizes entspricht, kann dann die neue Funktion über dies Index (respektive Modellnummer in den ID's) angesprochen werden. Der Plazierung innerhalb des Feldes ist also entscheidend, ebenso wie die Besetzung der drei Konstanten (COSMOD SINMOD ANZISOMOD). Doch dazu ausführlich in den anisotropen Modellen. Hier nun ein Beispiel mit der neuen Funktion, an dem Platz, an der sie bevorzugt stehen sollte, wenn sie auch ein anisotropes Äquivalent hat.
    
    struct ftab modell[] = {
                         dummy,
                         exponI2,
                         lineaI2,
                         spherI2,
                         gaussI2,
                         alexpI2,
                         alhirI2,
                         konstI2,
                         neueFunktionI2; 
                         cosmoI2, /* 9. Element siehe COSMOD */
                         sinmoI2, /* 10. Element siehe SINMOD */
                         mqmHAI2,
    		     mqm_inverse2,
    		     multilog2,
    		     na_cubic_spline2,
    		     thin_plate_spline2, 
    		     sincI2,  /* 16. Element, siehe ANZISOMOD */
                         exponA2,
                         lineaA2,
                         spherA2,
                         gaussA2,
                         alexpA2,
                         alhirA2,
                         konstI2,
                         neueFunktionA2; 
                         cosmoA2,
                         sinmoA2,
                         };
    /* COSMOD = 9; SINMOD = 10; ANZISOMOD = 16; */
    

Die Funktion kann dann über die Modellnummer 8 benutzt werden. Vor muß jedoch der Prototyp der Funktion in zwei Headerfiles bekann gemacht werden, ansonsten passiert z. B. unter LINUX gar nichts (siehe ../grille/allg/modell2.h) und ../grille/allg/model2ex.h)). Nun muß man die Programme nur noch neu übersetzen. Allerdings sollten vor noch die nächsten Ausführungen zu den anisotropen Modellen gelesen werden, auch wenn man keines definieren will.

Anisotrope Modelle

Die geometrische Anisotropie ist an dieser Stelle uninteressant, da dieser Fall vor der eigentlichen Vorhersage auf den isotropen Fall transformiert wird und dann hier die isotropen Modelle benutzt werden. In den anisotropen Modellen wird einfach der aktuelle Modellparameter der auf dem Umfang einer Ellipse liegt, über die Ellipsengleichung berechnet, in dem man jeweils die Korordinatenunterschiede, den minimalen und maximalen Parameter sowie den Richtungswinkel zum Maximum der Funktion Ellippara_actual_2d(..) übergibt. Hier das Beispiel der Gauß'schen anisotropen Funktion:
    
    double gaussA2(double h,double r,mostruk *m)
    {
    double para,s;
    para = Ellippara_actual_2d(h,r,(*m).alphak,(*m).alphag,(*m).tba);
    s = h*h + r*r;
    s = s * para * para * (-1.0);
    s = exp(s);
    return(s);
    }
    

Wichtig ist nun vor allem die Reihenfolge und der Platz in dem Funktionsarray modell[], da die anisotropen Modelle im gleichen Array stehen. Dies war notwendig, um gleichzeitig isotrope und anisotrope Modellfunktionen beim Co-Kriging verarbeiten zu können. Alle Korrelationsfunktionen haben eine isotrope und eine anisotrope Realisation. Die Isotrope wird wie beschrieben angesprochen. Wenn in isotnn bzw. isnnpp eine 0 (Anisotropie) spezifiziert wurde, dann wird intern zu dem Index (Modellnummer) die Konstante ANZISOMOD hinzugezählt, um auf den Index der zugehörigen anisotropen Funktion zu kommen. Diese Konstante muß deshalb immer mit der letzten isotropen Funktion (Korrelationsfunktionen und Kernfunktionen) übereinstimmen. Die zwei Winkelfunktionen haben eine Sonderbedeutung, denn diese werden benutzt, um sie mit den anderen Grundmodellen multiplikativ zu verknüpfen. Deshalb müssen auch die Konstanten COSMOD und SINMOD jeweils aktualisiert werden. Sie haben den Wert ihres aktuellen Indizes im Array, haben aber auch ihre anisotropen Entsprechungen. Die Kernfunktionen ( verfügbare Modelle) haben kein anisotropes Äquivalent, werden aber ansonsten genauso wie die isotropen Korrelationsmodelle hinzugefügt. Sie sollten ihren Platz jedoch nach den Winkelfunktionen und vor den anisotropen Modellen finden. Prinzipiell sollten die Korrelationsmodelle immer in ihrer Dualität programmiert werden, man kann den Funktionskörper leer lassen. Es ist aber auch möglich das Korrelationsmodell nur isotrop ( Platz im Array ist dann nach den Winkelfunktionen) und die Kernfunktion dual (Platz im Array vor den Winkelfunktionen) zu programmieren. Vorsicht!! an dieser Stelle fällt mir auf, daß man, wenn man diese anisotropen Kernfunktionsmodelle nutzen in den Kernschätzern nutzen will, die echte Modellenummerangeben muß. Das hat den Grund, daß es für die Kernschätzer noch keine Anisotropie-ID festgelegt hat; die ID's isnnpp bzw. isotnn gelten nur in den Krigematrizen aller Art. Hier muß man noch einen geeigneten Modus finden, es gibt jedoch viel, viele Möglichkeiten!!


Verfügbare Modellfunktionen (Übersicht)

ModellbezeichnungIsotrAnis Name im FunktionsarrayNr.Formel
Leere Funktion x x dummy0
Exponentielles x x exponI2,exponA21,16
Lineares x x lineaI2,lineaA22,17
Sphärisches x x spherI2,spherA23,18
Gauß'sches x x gaussI2,gaussA24,19
Verallg. Exponetilles x x alexpI2,alexpA25,20
Verallg. Hirvonen x x alhirI2,alhirA26,21
Konstante 1 x x konstI2,konstI27,22
Cosinus x x cosmoI2,cosmoA28,23
Sinus x x sinmoI2,sinmoA29,24
Multiquadratisches x mqmHAI210
ModellbezeichnungIsotrAnis Name im FunktionsarrayNr.Formel
Inverses Multiquadrat. x mqm_inverse211
Multilogarithmisches x multilog212
Natürlicher Kubischer Spline x na_cubic_spline213
"Dünne Platte" Spline x thin_plate_spline214
Sinc x sincI215


Modellfunktionen als Formeln

Weiter

.
.
.
.
.
.
.
.
.
.
.
.
.
.

Hinzufügen neuer Modellparameter

zurück zur Inhaltsübersicht oder zurück zur Modellparametertabelle
.
.
.
.
.
.
.
.
.
.
.
.

Andree Röttig
Wed Sep 2 1998