Objektorientierte Implementierung von Eingangs- und Ausgangsfuzzysets
  | 
Implementierung eines Eingangsfuzzysets
  | 
class Eingangsfuzzyset
{
    public:
        int fg_anzahl;
        Fuzzygroesse** fg;
        double* zwerte;
        Eingangsfuzzyset(int fg_anzahl)
        {
            this->fg_anzahl = fg_anzahl;
            fg = new Fuzzygroesse*[fg_anzahl];
            //Dummywerte eintragen:
            fg[0] = new Fuzzygroesse(0.0,1.0,2.0,true,false);
            for(int i=1;i<fg_anzahl-1;i++)
                fg[i] = new Fuzzygroesse((double)i,(double)(i+1),(double)(i+2),false,false);
            fg[fg_anzahl-1] = new Fuzzygroesse((double)(fg_anzahl-1),(double)(fg_anzahl),
                                               (double)(fg_anzahl+1),false,true);
            zwerte = new double[fg_anzahl];
        }
        void setzeStellen(double* stelle)
        {
            fg[0]->p[0] = stelle[0]-1.0; //Dummy-Wert
            fg[0]->p[1] = stelle[0];
            fg[0]->p[2] = stelle[1];
            for(int i=1;i<fg_anzahl-1;i++)
            {
                fg[i]->p[0] = stelle[i-1];
                fg[i]->p[1] = stelle[i];
                fg[i]->p[2] = stelle[i+1];
            }
            fg[fg_anzahl-1]->p[0] = stelle[fg_anzahl-2];
            fg[fg_anzahl-1]->p[1] = stelle[fg_anzahl-1];
            fg[fg_anzahl-1]->p[2] = stelle[fg_anzahl-1]+1.0; //Dummy-Wert
        }
        double* berechneZugehoerigkeitswerte(double x)
        {
            for(int i=0;i<fg_anzahl;i++)
                zwerte[i] = fg[i]->berechneZugehoerigkeitswert(x);
            return zwerte;
        }
};
Code 0-1: Quellcode der Klasse Eingangsfuzzyset aus der Datei Eingangsfuzzyset.h
Übungsaufgabe b): Bestimmen Sie die gleichen Größen, wie in Übungsaufgabe a), aber verwenden Sie dazu jetzt die Klasse Eingangsfuzzyset.
Implementierung eines Ausgangsfuzzysets
  | 
Bild 0-1: Anpassung der Aufgabe aus Übung 9
  | 
class Ausgangsfuzzyset
{
    public:
        int fg_anzahl;
        Fuzzygroesse** fg;
        double* zwerte;
        Ausgangsfuzzyset(int fg_anzahl)
        {
            this->fg_anzahl = fg_anzahl;
            fg = new Fuzzygroesse*[fg_anzahl];
            //Dummywerte eintragen:
            for(int i=0;i<fg_anzahl;i++)
                fg[i] = new Fuzzygroesse((double)i,(double)(i+1),(double)(i+2),false,false);
            zwerte = new double[fg_anzahl];
        }
        void setzeStellen(double* stelle) //auch hier nur p1-Werte übergeben
        {
            fg[0]->p[0] = stelle[0]-(stelle[1]-stelle[0]); //p2 an p1 spiegeln
            fg[0]->p[1] = stelle[0];
            fg[0]->p[2] = stelle[1];
            for(int i=1;i<fg_anzahl-1;i++)
            {
                fg[i]->p[0] = stelle[i-1];
                fg[i]->p[1] = stelle[i];
                fg[i]->p[2] = stelle[i+1];
            }
            fg[fg_anzahl-1]->p[0] = stelle[fg_anzahl-2];
            fg[fg_anzahl-1]->p[1] = stelle[fg_anzahl-1];
            fg[fg_anzahl-1]->p[2] = stelle[fg_anzahl-1]+(stelle[fg_anzahl-1]-stelle[fg_anzahl-2]); //p0 an p1 spiegeln
        }
        double berechneAusgang(int* fg_indices, double* fg_aktivierungen,int regel_anzahl)
        {
            double Ages=0.0;
            double sges=0.0;
            double Aaktuell=0.0;
            for(int i=0;i<regel_anzahl;i++)
            {
                Aaktuell = fg[fg_indices[i]]->berechneFlaeche(fg_aktivierungen[i]);
                Ages+=Aaktuell;
                sges+=Aaktuell*fg[fg_indices[i]]->berechneSchwerpunkt(fg_aktivierungen[i]);
            }
            return sges/Ages;
        }
};
Code 0-2: Quellcode der Klasse Ausgangsfuzzyset aus der Datei Ausgangsfuzzyset.h
Übungsaufgabe c): Lösen Sie nun vollends die Übung 9 mit Hilfe eines selbstgeschriebenen Programms unter Verwendung der hier dargestellten Klassen.
R=7 und T=12.5, => Rkalt = 0.6 Rmittel = 0.4 Rwarm = 0 Tkalt = 0.5 Twarm = 0.5 Ausgangsaktivieurng bei R=7 und T=12.5: A=13.0935 R=5 und T=7, => Rkalt = 1 Rmittel = 0 Rwarm = 0 Tkalt = 0.866667 Twarm = 0.133333 Ausgangsaktivieurng bei R=5 und T=7.5: A=20
Code 0-3: Kontrollausgabe zu Übungsaufgabe c) - Rechnen Sie die Ergebnisse zur Übung auch von Hand nach.