示例#1
0
        // граничний обєднання
        public static FuzzySet1D gUnion(FuzzySet1D f1, FuzzySet1D f2)
        {
            FuzzySet1D res = new FuzzySet1D();

            foreach (KeyValuePair <double, double> pair in f1.dots)
            {
                double x = pair.Key;
                res.AddDot(pair.Key, Math.Min(f1.Mu(x) + f2.Mu(x), 1));
            }
            foreach (KeyValuePair <double, double> pair in f2.dots)
            {
                double x = pair.Key;
                res.AddDot(pair.Key, Math.Min(f1.Mu(x) + f2.Mu(x), 1));
            }
            return(res);
        }
示例#2
0
        // альфа сума
        public static FuzzySet1D alphaSum(FuzzySet1D f1, FuzzySet1D f2, double alpha)
        {
            FuzzySet1D res = new FuzzySet1D();

            if (alpha > 1)
            {
                alpha = 1;
            }
            foreach (KeyValuePair <double, double> pair in f1.dots)
            {
                double x = pair.Key;
                res.AddDot(pair.Key, alpha * f1.Mu(x) + (1 - alpha) * f2.Mu(x));
            }
            foreach (KeyValuePair <double, double> pair in f2.dots)
            {
                double x = pair.Key;
                res.AddDot(pair.Key, alpha * f1.Mu(x) + (1 - alpha) * f2.Mu(x));
            }
            return(res);
        }
示例#3
0
 public static FuzzySet1D operator |(FuzzySet1D f1, FuzzySet1D f2)
 {
     if ((!f1.discrete && f2.discrete) || (f1.discrete && !f2.discrete))
     {
         MessageBox.Show("Операцію об'єднання можна робити тільки над множинами одного типу");
         return(null);
     }
     if (f1.discrete && f2.discrete)
     {
         FuzzySet1D res = new FuzzySet1D();
         foreach (KeyValuePair <double, double> pair in f1.dots)
         {
             res.AddDot(pair.Key, Math.Max(pair.Value, f2.Mu(pair.Key)));
         }
         foreach (KeyValuePair <double, double> pair in f2.dots)
         {
             res.AddDot(pair.Key, Math.Max(pair.Value, f1.Mu(pair.Key)));
         }
         return(res);
     }
     else
     {
         FuzzySet1D res = new FuzzySet1D();
         res.Discrete = false;
         foreach (KeyValuePair <double, double> pair in f1.dots)
         {
             double x = pair.Key;
             double y = Math.Max(pair.Value, f2.Mu(pair.Key));
             res.AddDot(pair.Key, Math.Max(pair.Value, f2.Mu(pair.Key)));
         }
         foreach (KeyValuePair <double, double> pair in f2.dots)
         {
             double x = pair.Key;
             double y = Math.Max(pair.Value, f1.Mu(pair.Key));
             res.AddDot(pair.Key, Math.Max(Math.Max(pair.Value, f1.Mu(pair.Key)), res.Mu(pair.Key)));
         }
         return(res);
     }
 }