// граничний обєднання 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); }
// альфа сума 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); }
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); } }