//+++++++++++++++++++++++++++++++++++++++++++++++++++++
// File automatically generated by Xfuzzy - DO NOT EDIT
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
package pkg.xfsg.defuz;
import xfuzzy.lang.*;
public class FuzzyMean extends DefuzMethod {
public FuzzyMean() {
super("xfsg","FuzzyMean");
Parameter single[] = new Parameter[0];
setSingleParameters(single);
}
public double compute(AggregateMemFunc mf) {
double min = mf.min();
double max = mf.max();
double num=0, denom=0;
for(int i=0; i<mf.conc.length; i++) {
num += mf.conc[i].degree() * mf.conc[i].center();
denom += mf.conc[i].degree();
}
if(denom==0) return (min+max)/2;
return num/denom;
}
public boolean test () {
return true;
}
public boolean test(AggregateMemFunc mf) {
return true;
}
public String getJavaCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double num=0, denom=0;"+eol;
code += " for(int i=0; i<mf.conc.length; i++) {"+eol;
code += " num += mf.conc[i].degree() * mf.conc[i].center();"+eol;
code += " denom += mf.conc[i].degree();"+eol;
code += " }"+eol;
code += " if(denom==0) return (min+max)/2;"+eol;
code += " return num/denom;"+eol;
return code;
}
public String getCCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double num=0, denom=0;"+eol;
code += " int i;"+eol;
code += " for(i=0; i<mf.length; i++) {"+eol;
code += " num += mf.degree[i] * mf.conc[i].center();"+eol;
code += " denom += mf.degree[i];"+eol;
code += " }"+eol;
code += " if(denom==0) return (min+max)/2;"+eol;
code += " return num/denom;"+eol;
return code;
}
public String getCppCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double num=0, denom=0;"+eol;
code += " for(int i=0; i<mf.length; i++) {"+eol;
code += " num += mf.conc[i]->degree() * mf.conc[i]->center();"+eol;
code += " denom += mf.conc[i]->degree();"+eol;
code += " }"+eol;
code += " if(denom==0) return (min+max)/2;"+eol;
code += " return num/denom;"+eol;
return code;
}
//+++++++++++++++++++
public void derivative(AggregateMemFunc mf, double derror) {
double num=0, denom=0;
for(int i=0; i<mf.conc.length; i++) {
num += mf.conc[i].degree() * mf.conc[i].center();
denom += mf.conc[i].degree();
}
double y = num/denom;
for(int i=0; i<mf.conc.length; i++) {
mf.conc[i].setDegreeDeriv(derror*(mf.conc[i].center()-y)/denom);
mf.conc[i].setCenterDeriv(derror*mf.conc[i].degree()/denom);
}
}
//+++++++++++++++++++
}