Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583

Калькулятор нечетких чисел

12.10.2019, 14:36. Показов 2205. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста реализовать калькулятор для нечетких чисел по алгоритму Заде ?
мне пока удалось определиться с функциями принадлежности, что дальше, помогите разобраться ?
Нашла алгоритм на этом сайте https://lektsii.com/1-82171.html в определении 27
вот мои наработки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "pch.h"
#include <iostream>
#include <cmath>
#include <cstring>
 
// ограничения диапазона
const double cdMinimumPrice = 0;
const double cdMaximumPrice = 70;
 
using namespace std;
 
class FuzzyFunction {
protected:
    double dLeft, dRight; // интервал
    char   cType; // тип функции, "t" для треугольника
 
public:
    CFuzzyFunction() {};
    virtual ~CFuzzyFunction() { }
 
    // получание границы значений
    virtual void setInterval(double l, double r) {
        dLeft = l; dRight = r;
    }
 
    // для трапециевидной формы, получение двух точек между границами
    virtual void setMiddle(double dL = 0, double dR = 0) = 0;
 
    // для установки типа функции:
    // t - треугольник, r - трапеция
    virtual void setType(char c) {
        cType = c;
    }
 
    // используется для проверки принадлежности точек интервалу
    bool isDotInInterval(double t) {
        if ((t >= dLeft) && (t <= dRight)) return true; 
        else return false;
    }
 
    // получение типа нечеткой функции
    char getType(void)const { return cType; }
 
    //вычисляемое значение
    virtual double getValue(double t) = 0;
};
 
class Trapezoid : public FuzzyFunction {
private:
    double dLeftMiddle, dRightMiddle;
 
public:
    void setMiddle(double dL, double dR) {
        dLeftMiddle = dL; dRightMiddle = dR;
    }
 
    double getValue(double t) {
        if (t <= dLeft || t >= dRight)
            return 0;
        else if (dLeft < t < dLeftMiddle)
            return (t - dLeft) / (dLeftMiddle - dLeft);
        else if (dLeftMiddle <= t <= dRightMiddle)
            return 1.0;
        else if (dRightMiddle < t < dRight)
            return (dRight - t) / (dRight - dRightMiddle);
    }
};
 
int main(void) {
    FuzzyFunction *FuzzySet[4];
 
    FuzzySet[0] = new Trapezoid;
    FuzzySet[1] = new Trapezoid;
 
    FuzzySet[0]->setInterval(1, 4);
    FuzzySet[0]->setMiddle(2,3);
    FuzzySet[0]->setType('r');
 
    FuzzySet[1]->setInterval(2, 8);
    FuzzySet[1]->setMiddle(3, 4);
    FuzzySet[1]->setType('r');
 
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2019, 14:36
Ответы с готовыми решениями:

Сложение нечетких чисел А и В
Написать программный код: Функция выполняет сложение нечетких чисел А и В. Числа представлены структурой FuzzyNumber для работы с нечеткими...

Калькулятор рациональных чисел
Мне нужно написать программу калькулятора рациональных чисел. Числа должны быть представлены в виде n1, n2/n3, где n1 - целое число n2 -...

Калькулятор комплексных чисел
Ребят,помогите.Такое задание в вузе задали Калькулятор комплексных чисел. Основные операции над комплексными числами, модуль числа. Номер...

1
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
26.10.2019, 20:13  [ТС]
подскажите пожалуйста, числа х1 и х2 я задала трапециевидной функцией принадлежности. Делаю для умножения, т.е. у=х1*х2
Как восстановить функцию принадлежности для у, зная ее для каждого х и найти все пары х1*х2, удовлетворяющие некоторому фиксированному значению у?

Например, 8 будет задаваться как 1*8, 2*4 и 4*2
Я сейчас только знаю какими будут значения функции принадлежности для 1, 2 и 4 соответствующие х1 и 8,4,2 - х2
как найти все вот эти пары, которые в результате будут давать значение у=8 ?

Добавлено через 3 минуты
пока это вся моя реализация, подскажите как быть дальше ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "pch.h"
#include <iostream>
#include <cmath>
#include <cstring>
#include <vector>
 
using namespace std;
 
#define N 10
 
//функция принадлежности
double func_mu(double t, double left, double right, double leftMiddle, double rightMiddle) {
    if (t <= left || t >= right)
        return 0;
    else if ((left <= t) && (t <= leftMiddle))
        return (t - left) / (leftMiddle - left);
    else if ((leftMiddle <= t) && (t <= rightMiddle))
        return 1.0;
    else if ((rightMiddle <= t) && (t <= right))
        return (right - t) / (right - rightMiddle);
}
 
double min(int m, int n) {
    return (m < n) ? m : n;
}
 
//дефазиффикация центр тяжести
void deffuzification(double t, double a, double b, double step, double result,
                     double leftMiddle, double rightMiddle) {
    double sum1, sum2, mu;
    for (double i = a; i < b; i = i + step) {
        mu = func_mu(i, a, b, leftMiddle, rightMiddle);
        sum1 = 0;
        sum1 += mu * i;
        sum2 = 0;
        sum2 += mu;
    }
    result = sum1 / sum2;
}
int main() {
    setlocale(LC_ALL, "Russian");
    double a1, b1, leftMiddle1, rightMiddle1;
    double x1, x2;
    double a2, b2, leftMiddle2, rightMiddle2;
    
    cout << "Введите х1:\n";
    cin >> x1;
    cout <<"Введите x2:\n";
    cin >> x2;
 
    // задаем области для функций принадлежности
    cout << "Введите границы области для х1:\n";
    cin >> a1 >> b1;
    cout << "Введите внутренние точки для х1:\n";
    cin >> leftMiddle1 >> rightMiddle1;
 
    cout << "Введите границы области для x2:\n";
    cin >> a2 >> b2;
    cout << "Введите внутренние точки для х2:\n";
    cin >> leftMiddle2 >> rightMiddle2;
 
    //// функция принадлежности для х1
    //double mu_x1;
    //vector<double> vect_mu_x1;
    //for (double i = a1; i <= b1; i += 0.5) {
    //  mu_x1 = func_mu(i, a1, b1, leftMiddle1, rightMiddle1);
    //  vect_mu_x1.push_back(mu_x1);
    //  mu_x1 = 0;
    //}
    //for (int i = 0; i < vect_mu_x1.size(); i++) {
    //  cout << vect_mu_x1[i] << " ";
    //}
    //cout << endl;
 
    //// функция принадлежности для х2
    //double mu_x2;
    //vector<double> vect_mu_x2;
    //for (double i = a2; i <= b2; i += 0.5) {
    //  mu_x2 = func_mu(i, a2, b2, leftMiddle2, rightMiddle2);
    //  vect_mu_x2.push_back(mu_x2);
    //  mu_x2 = 0;
    //}
    //for (int i = 0; i < vect_mu_x2.size(); i++) {
    //  cout << vect_mu_x2[i] << " ";
    //}
    //cout << endl;
 
    double mu_x1, mu_x2;
    mu_x1 = func_mu(x1, a1, b1, leftMiddle1, rightMiddle1);
    mu_x2 = func_mu(x2, a2, b2, leftMiddle2, rightMiddle2);
 
    double mu_y = min(mu_x1, mu_x2);
    cout << mu_y << " ";
    cout << endl;
 
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2019, 20:13
Помогаю со студенческими работами здесь

Калькулятор комплексных чисел
помогите пожалуйста с курсовиком по информатике...

Калькулятор комплексных чисел
Помогите пожалуйста с задачей. Выполнить структурную декомпозицию, разработать структурную схему и алгоритмы программ. Реализовать на...

Калькулятор шестнадцатеричных чисел
Помогите пожалуйста!как в си/с++ сделать калькулятор для арифметических действий над шестнадцатеричными числами,а также с операциями...

Калькулятор римский и арабских чисел
Нужно написать калькулятор, чтобы считал как римские так и арабские числа (до 10 достаточно). Так же достаточно всего лишь одного действия...

Простой калькулятор рациональных чисел на C++
Всем доброго времени суток, Только начал изучать C++ и задали вот такое задание: Напишите программу, которая позволяет совершать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru