/* ** Program : cdfuzz.h ** This is the header file for cdfuzz.c */ /******** define some common functions *******/ #define min(A, B) ((A) < (B) ? (A) : (B)) #define max(A, B) ((A) > (B) ? (A) : (B)) #define sqr(A) ((A)*(A)) #define sgn(A) ( ((A) >= 0.0) ? 1.0 : (-1.0)) #define abs(A) ( ((A) >= 0.0) ? (A) : (-1*(A))) #define sigmoid(A, B) ( min(max((A),(-1*(B))),(B))/(B) ) #define inclim(A, B, C) ( min(max((A)+(B),(-(C))),(C)) ) /*#define PI 3.141592654*/ /******** Define membership function types ********/ #define LEFTTRI 1 #define RIGHTTRI 2 #define TRI 3 #define LEFTGAUSS 4 #define RIGHTGAUSS 5 #define GAUSSIAN 6 #define LEFTCOS 7 #define RIGHTCOS 8 #define COS 9 #define LEFTCOS2 10 #define RIGHTCOS2 11 #define COS2 12 /******** Define the different types of t-norms *******/ #define MINTNORM 0 #define PRODTNORM 1 /******** Define the defuzzification techniques *******/ #define CENTROID 0 #define COG 1 /* define the structure for the input memberships */ typedef struct in_mem { int *type; /* type of membership fcn */ double *cent; /* input membership centers */ double *wdth; /* input membership widths */ } IN_MEM; /* define the structure for the output memberships */ typedef struct out_mem{ double *cent; /* output membership centers */ double *wdth; /* output membership widths */ } OUT_MEM; /* define the structure for the fuzzy system */ typedef struct f_sys{ int *size; /* size of the fuzzy system */ int *invar; /* membership locations */ IN_MEM *inmem; /* input membership functions */ OUT_MEM *outmem; /* output membership centers */ int *rules; /* the fuzzy rule base */ int *type; /* fuzzy system type: type[0]: 0 - min implication 1 - prod implication type[1]: 0 - centroid defuzz 1 - COG defuzz */ double *dom; /* input degree of mem */ double *imdom; /* implied degree of mem */ double area; } F_SYS; /***** define the function prototypes *****/ void initfuzz(F_SYS *fuzzy); void clearfuzz(F_SYS *fuzzy); void finddom(double *u, F_SYS *fuzzy); double evalrules(double *u, F_SYS *fuzzy); void fuzzupdate(double *u, F_SYS *fuzzy); double fuzzsys(double *u, F_SYS *fuzzy); void dumpmatrix(F_SYS *); # define kk1 0.7 /* LQR values */ # define kk2 1.0 # define kk3 10.8 # define kk4 0.7 # define LQRk /* can be LQRTYPE, LQRk or LFTYPE */