summaryrefslogtreecommitdiff
path: root/examples/takagi-sugeno/approximation.fcl
diff options
context:
space:
mode:
Diffstat (limited to 'examples/takagi-sugeno/approximation.fcl')
-rw-r--r--examples/takagi-sugeno/approximation.fcl68
1 files changed, 68 insertions, 0 deletions
diff --git a/examples/takagi-sugeno/approximation.fcl b/examples/takagi-sugeno/approximation.fcl
new file mode 100644
index 0000000..8b5f121
--- /dev/null
+++ b/examples/takagi-sugeno/approximation.fcl
@@ -0,0 +1,68 @@
+FUNCTION_BLOCK approximation of sin(x)/x
+
+VAR_INPUT
+ inputX: REAL;
+END_VAR
+
+VAR_OUTPUT
+ outputFx: REAL;
+ trueFx: REAL;
+ diffFx: REAL;
+END_VAR
+
+FUZZIFY inputX
+ RANGE := (0.000 .. 10.000);
+ TERM NEAR_1 := Triangle 0.000 1.000 2.000;
+ TERM NEAR_2 := Triangle 1.000 2.000 3.000;
+ TERM NEAR_3 := Triangle 2.000 3.000 4.000;
+ TERM NEAR_4 := Triangle 3.000 4.000 5.000;
+ TERM NEAR_5 := Triangle 4.000 5.000 6.000;
+ TERM NEAR_6 := Triangle 5.000 6.000 7.000;
+ TERM NEAR_7 := Triangle 6.000 7.000 8.000;
+ TERM NEAR_8 := Triangle 7.000 8.000 9.000;
+ TERM NEAR_9 := Triangle 8.000 9.000 10.000;
+END_FUZZIFY
+
+DEFUZZIFY outputFx
+ RANGE := (-1.000 .. 1.000);
+ TERM f1 := 0.840;
+ TERM f2 := 0.450;
+ TERM f3 := 0.040;
+ TERM f4 := -0.180;
+ TERM f5 := -0.190;
+ TERM f6 := -0.040;
+ TERM f7 := 0.090;
+ TERM f8 := 0.120;
+ TERM f9 := 0.040;
+ METHOD : COGS;
+ DEFAULT := nan | NC;
+END_DEFUZZIFY
+
+DEFUZZIFY trueFx
+ RANGE := (-1.000 .. 1.000);
+ TERM fx := Function sin(inputX)/inputX;
+ METHOD : COGS;
+ DEFAULT := nan | NC;
+END_DEFUZZIFY
+
+DEFUZZIFY diffFx
+ RANGE := (-1.000 .. 1.000);
+ TERM diff := Function fabs(outputFx-trueFx);
+ METHOD : COGS;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK
+ RULE 1 : if inputX is NEAR_1 then outputFx is f1
+ RULE 2 : if inputX is NEAR_2 then outputFx is f2
+ RULE 3 : if inputX is NEAR_3 then outputFx is f3
+ RULE 4 : if inputX is NEAR_4 then outputFx is f4
+ RULE 5 : if inputX is NEAR_5 then outputFx is f5
+ RULE 6 : if inputX is NEAR_6 then outputFx is f6
+ RULE 7 : if inputX is NEAR_7 then outputFx is f7
+ RULE 8 : if inputX is NEAR_8 then outputFx is f8
+ RULE 9 : if inputX is NEAR_9 then outputFx is f9
+ RULE 10 : if inputX is any then trueFx is fx and diffFx is diff
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK