⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cluster.h

📁 模糊聚类分析的源程序!
💻 H
字号:
/********************************************************//*   filename: cluster.h                                *//*                                                      *//********************************************************//* programmed by: Oliver Wagner                         *//* last change:  (XXX: not updated)                     *//********************************************************/#ifndef _CLUSTER_H#define _CLUSTER_H#include <math.h>#include <stdio.h>#include <values.h>#define DEFAULT_M 	2.0#define DEFAULT_K 	1.0#define DEFAULT_DELTA_U	0.0001#define DEFAULT_HUEGEL_GRENZE .05enum Cluster_Typ {  FCM, GK, GK_parallel, GG, GG_parallel};enum Art {  KEINE, OPTIMAL, ANZAHL, KLASSEN};#define CLUSTER_KONVEXGRENZE 0.03#define WINKEL_COSINUS .9848078	/* +- 10 Grad */#define NAEHER_ERLAUBT 2#define Namen_Laenge 20class Clustering;class FCM_Clustering;class GK_Clustering;class GK_parallel_Clustering;class GG_Clustering;class GG_parallel_Clustering;#include "fehler.h"#include "guete.h"#include "matrix.h"#include "vektor.h"#include "norm.h"#endif#ifndef _CLUSTER_DATA#define _CLUSTER_DATAvoid Errechne_Covarianz (DVektorArray & Daten, DMatrix & U,			 DMatrixArray & CMatrix, DVektorArray & Cluster,			 double M);class Clustering{  friend class FHV_Guete;  friend class DPA_Guete;  friend class PD_Guete;    protected:  char Name[Namen_Laenge];	/* Name des ClusterVerfahrens   */  int Max_Iterationen;		/* Max-Anzahl der Iterationen   */  int Iterationen;		/* Aktuelle Anzahl der Iterat.  */  DVektorArray Vorgabe_Cluster;	/* Hier Vorgaben speichern      */  DVektorArray Cluster;		/* Cluster-Zentren              */  DVektorArray ClusterBuffer;	/* Bei Optimum-Suche alte sp.   */  IVektor Zuordnung;		/* In welches Cl. gehoert Datum */  IVektor Klassen;		/* Nummer der Klassen           */  DMatrix Zugehoerigkeit;	/* Zugehoerigkeitsmatrix        */  DMatrix UBuffer;		/* Bei Optimum-Suche alte sp.   */  BVektor Die_sind_relevant;	/* welchen Dim's der Cluster    */  BVektor Die_waren_relevant;	/* die nach angef. Clustern     */  Guete *Guete_Verfahren;	/* Mein Guete_Verfahren         */  double M, K;			/* Cluster-Parameter            */  char Fertig, ClusterFertig;	/* Beides fertig ?              */  enum Art Art;			/* Welche Clustermethode        */  char Possibilistisch;		/* Nach Clustern noch poss.?    */  int Possib_Zaehler;		/* i.d.R. werden's 2 Durchlaeufe */  int zu_berechnen;		/* beim naechsten Durchlauf sov. */  DVektor neuer_Proto;		/* Zum Zwischenspeichern des n. */  DVektor eta;			/* fuer possibil. Nachclustern  */  double Delta_U;		/* Veraenderungs-Grenze         */  Norm Die_Norm;		/* Nicht immer wieder neu !!    */    public:    Clustering (Guete_Typ Guete = S, int Soll_Iterationen = MAXINT,		char Possib = FALSE);    virtual ~ Clustering ();  /* Die oben definierte Nummer */  virtual Cluster_Typ Lese_Typ () = 0;  char *Lese_Name () {    return (Name);  };  /* Gibt es ueberhaupt noch etwas zu tun */  char Ist_Fertig () {    return (Fertig);  };  inline enum Art Lese_Art () {    return (Art);  };  /* Soll es possibilistisch werden ?! */  inline char Lese_Possib () {    return (Possibilistisch);  };  inline void Setze_Possib (char So) {    Possibilistisch = So;  };  inline Lese_Clusterdimension () {    return (Die_waren_relevant.Lese_Dim ());  };  inline DVektorArray & Lese_Vorgabe_Prototypen () {    return (Vorgabe_Cluster);  };  /* Eine der Guete Klassen auswaehlen: */  void Setze_Guete (Guete_Typ Damit);  /* Gueten auslesen: */  inline Guete & Lese_Guete () {    return (*Guete_Verfahren);  };  /* Setze die Indizes, die bei Uebergabe von Daten relevant sind: */  void Setze_relevant (BVektor & Damit) {    Die_sind_relevant = Damit;  };  inline BVektor & Lese_relevant () {    return (Die_sind_relevant);  };  /* Wieviele Schritte, um naechsten Schritt ausgeben zu koennen */  inline void Setze_Max_Iteration (int Damit) {    Max_Iterationen = Damit;  };  inline int Lese_Max_Iteration () {    return (Max_Iterationen);  };  /* Fuer die Cluster-Parameter: */  inline void Setze_M (double Damit) {    M = Damit;  };  inline double Lese_M () {    return (M);  };  inline void Setze_K (double Damit) {    K = Damit;  };  inline double Lese_K () {    return (K);  };  inline void Setze_Delta_U (double Damit) {    Delta_U = Damit;  };  inline double Lese_Delta_U () {    return (Delta_U);  };  /* Setzt zurueck, was bisher geclustert wurden ist: */  void Reset ();  /* der einzige Weg, Cluster vorzugeben: */  void Setze_Cluster (DVektorArray & Damit) {	/*Reset(); */    Vorgabe_Cluster = Damit;  };  /* Findet Clusteranzahl-viele Cluster, stockt dabei evtl. die     Vorgabe auf: */  void Clustere (DVektorArray & Das, int Clusteranzahl);  /* Findet Cluster in optimaler Anzahl, vorher sollte resetet      sein: */  void Clustere (DVektorArray & Das);  /* Findet Cluster in optimaler Anzahl aus klassif. Daten: */  void Clustere_Klassen (DVektorArray & Das, int Fehlerprozent);  /* Zu welchem Cluster gehoeren die Daten ?: */  inline IVektor & Lese_Zuordnung () {    return (Zuordnung);  };  inline int &Lese_Zuordnung (int i) {    return (Zuordnung[i]);  };  /* Zum Auslesen der Ergebnisse */  inline DVektor & Lese_Cluster (int Nummer) {    return (Cluster[Nummer]);  };  inline DVektorArray & Lese_Cluster () {    return (Cluster);  };  inline int Lese_Clusteranzahl () {    return (Cluster.Lese_Groesse ());  };  inline DMatrix & Lese_Zugehoerigkeit () {    return (Zugehoerigkeit);  };  virtual DMatrixArray Lese_Form (IVektor & Dimensionen,				  DVektorArray & Daten) = 0;  DVektor Berechne_Zugehoerigkeit (DVektor & Datum);  void Speichern (char *Name);  friend Clustering *Clustering_Laden (char *Name);  virtual void Berechne_fuer_neue_Daten (DVektorArray & Diese_Daten);    protected:/******** NUR FUER MICH ************/    virtual void Mein_Speichern (FILE * File) {  };  virtual int Mein_Laden (FILE * File) {  };  virtual DVektorArray Mein_Clustern (DVektorArray & Daten,				      DVektorArray & Vorgabe_Protos) = 0;  void Berechne_Zuordnung ();  virtual int Berechne_Dist (DVektor & Dist, DVektor & Datum,			     DVektorArray & Cluster) = 0;  DVektorArray Berechne_v (DMatrix & MatrixU, DVektorArray & DieDaten);  virtual void Berechne_U (DVektorArray & Daten,			   DVektorArray & Cluster, DMatrix & U);  virtual void Berechne_possib_U (DVektorArray & Daten,				  DVektorArray & Cluster, DMatrix & U) = 0;  virtual void Mache_Possibilistisch (DVektorArray & Das,				      DVektorArray & Cluster) = 0;  inline void Berechne_Covarianz (DVektorArray & Daten, DMatrix & U,			   DMatrixArray & CMatrix, DVektorArray & Cluster) {    Errechne_Covarianz (Daten, U, CMatrix, Cluster, M);  };  virtual DVektor Berechne_eta (DVektorArray & Daten,				DVektorArray & Cluster, DMatrix & U);  virtual void Berechne_Form (DVektorArray & Daten,			      DVektorArray & Cluster) = 0;  virtual void Speichere_Buffer ();  virtual void Uebernehme_Buffer ();  virtual void Tausche_Buffer ();  virtual void Loesche_Buffer ();};Clustering *Clustering_Laden (char *Name);/******************************************************************/class FCM_Clustering: public Clustering{  protected:  DVektor Radien;		/* Fuer die graphische Ausgabe  */  public:  FCM_Clustering (Guete_Typ Guete = S, int Soll_Iterationen = MAXINT,		  char Possib = FALSE);  Cluster_Typ Lese_Typ ();  DMatrixArray Lese_Form (IVektor & Dimensionen, DVektorArray & Daten);    protected:    DVektorArray Mein_Clustern (DVektorArray & Daten,				DVektorArray & Vorgabe_Protos);  int Berechne_Dist (DVektor & Dist, DVektor & Datum,		     DVektorArray & Cluster);  virtual void Berechne_possib_U (DVektorArray & Daten,				  DVektorArray & Cluster, DMatrix & U);  void Mache_Possibilistisch (DVektorArray & Das,			      DVektorArray & Cluster);  void Berechne_Form (DVektorArray & Daten,		      DVektorArray & Cluster);};/******************************************************************/class GK_Clustering: public Clustering{  protected:  DVektor rho, rho_Buffer;	/* fuer GK                      */  DMatrixArray Covar;		/* fuer nicht-parallel Ellipso. */  DVektorArray Laengen;		/* fuer parallele Ellipsoide    */  DMatrixArray AMatrizen;		/**/  DMatrixArray  ABuffer;		/**/  A_Norm Die_A_Norm;    public:    GK_Clustering (Guete_Typ Guete = S, int Soll_Iterationen = MAXINT,		   char Possib = FALSE);   ~GK_Clustering ();  Cluster_Typ Lese_Typ ();  inline void Setze_rho (DVektor & Damit) {    rho = Damit;  };  DMatrixArray Lese_Form (IVektor & Dimensionen, DVektorArray & Daten);    protected:    virtual void Mein_Speichern (FILE * File);  virtual int Mein_Laden (FILE * File);  DVektorArray Mein_Clustern (DVektorArray & Daten, DVektorArray & Vorgabe_Protos);  int Berechne_Dist (DVektor & Dist, DVektor & Datum,		     DVektorArray & Cluster);  virtual void Berechne_possib_U (DVektorArray & Daten,				  DVektorArray & Cluster, DMatrix & U);  void Mache_Possibilistisch (DVektorArray & Das,			      DVektorArray & Cluster);  virtual void Berechne_Ai (DVektorArray & Daten, DMatrix & U,			    DVektorArray & Cluster);  DVektor Berechne_eta (DVektorArray & Daten,			DVektorArray & Cluster, DMatrix & U);  void parallel_Form_Berechnen (DVektorArray & Daten,				DVektorArray & Cluster);  DMatrixArray Lese_parallel_Form (IVektor & Dimensionen, DVektorArray & Daten);  void Berechne_Form (DVektorArray & Daten,		      DVektorArray & Cluster);  void Speichere_Buffer ();  void Uebernehme_Buffer ();  void Tausche_Buffer ();  void Loesche_Buffer ();};/******************************************************************/class GK_parallel_Clustering: public GK_Clustering{  protected:  public:  GK_parallel_Clustering (Guete_Typ Guete = S, int Soll_Iterationen = MAXINT,			  char Possib = FALSE);  Cluster_Typ Lese_Typ ();  inline DMatrixArray Lese_Form (IVektor & Dimensionen, DVektorArray & Daten) {    return (Lese_parallel_Form (Dimensionen, Daten));  };    protected:  void Berechne_Form (DVektorArray & Daten,		      DVektorArray & Cluster);  void Berechne_Ai (DVektorArray & Daten, DMatrix & U,		    DVektorArray & Cluster);};/******************************************************************/class GG_Clustering: public GK_Clustering{  protected:  DVektor Faktor, Faktor_Buffer;  DVektor p, p_Buffer;    public:    GG_Clustering (Guete_Typ Guete = S, int Soll_Iterationen = MAXINT,		   char Possib = FALSE);  Cluster_Typ Lese_Typ ();    protected:    virtual void Mein_Speichern (FILE * File);  virtual int Mein_Laden (FILE * File);  DVektorArray Mein_Clustern (DVektorArray & Daten,			      DVektorArray & Vorgabe_Protos);  int Berechne_Dist (DVektor & Dist, DVektor & Datum,		     DVektorArray & Cluster);  virtual void Berechne_possib_U (DVektorArray & Daten,				  DVektorArray & Cluster, DMatrix & U);  void Mache_Possibilistisch (DVektorArray & Das,			      DVektorArray & Cluster);  DVektor Berechne_eta (DVektorArray & Daten,			DVektorArray & Cluster, DMatrix & U);  void Berechne_Ai (DVektorArray & Daten, DMatrix & U,		    DVektorArray & Cluster);  void Berechne_p (DMatrix & U);  void Speichere_Buffer ();  void Uebernehme_Buffer ();  void Loesche_Buffer ();  void Tausche_Buffer ();  virtual void Berechne_Faktor ();};/******************************************************************/class GG_parallel_Clustering: public GG_Clustering{  protected:  public:  GG_parallel_Clustering (Guete_Typ Guete = S, int Soll_Iterationen = MAXINT,			  char Possib = FALSE);  Cluster_Typ Lese_Typ ();  inline DMatrixArray Lese_Form (IVektor & Dimensionen, DVektorArray & Daten) {    return (Lese_parallel_Form (Dimensionen, Daten));  };    protected:  void Berechne_Form (DVektorArray & Daten,		      DVektorArray & Cluster);  void Berechne_Ai (DVektorArray & Daten, DMatrix & U,		    DVektorArray & Cluster);  void Berechne_Faktor ();};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -