Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
1

Реализация класса функций принадлежности треугольника и трапеций

17.05.2014, 10:19. Показов 2179. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Передо мной стоит такая задача. Необходимо реализовать задачу поиска регрессионной зависимости в условиях нечеткой логики. Для этого надо прописать класс функций принадлежности. В котором у меня будут две функции: для построения треугольника и для построения трапеции.
C
1
2
3
4
5
6
class funcMembership
{
public:
    double funcTriangle(double x,double a, double b);//треугольная функция принадлежности
    double funcTrapezoid(double x,double a, double b);//трапециедальная функция принадлежности
};
Формулы для функций в картинках.
Как я поняла, для треугольника я задаю координаты х точек на основании, а координату х для пика должна вычислить. Так? Собственно, для трапеции такая же ситуация, координаты х пиков я должна тоже вычислить?
Миниатюры
Реализация класса функций принадлежности треугольника и трапеций   Реализация класса функций принадлежности треугольника и трапеций  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2014, 10:19
Ответы с готовыми решениями:

Правильная реализация функций класса вне main-а
Привет. такая ситуация- если я пишу функцию после main, а потом ее вызываю (например, запись...

Построение функций принадлежности
Никак не пойму как сделать.

Выясните вопрос о принадлежности построенных функций классам
Доопределить функции f(x,y,z), g(x,y,z), h(x,y,z) так,чтобы f∈M,g∈L,h∈S.Если построение какой-либо...

Графики функций (Полярные системы,параметрические функции,знак принадлежности)
Здравствуйте. Помогите пожалуйста, уже второй час сижу , пытаюсь понять как поставить знак...

10
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 10:33  [ТС] 2
Нагуглила вот такую реализацию функции треугольника, но совсем не понимаю ее. Задаются значения 1о и high, которые определяют базовые вершины треугольника. Высшая точка задается как high/2.
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
//функция принадлежности в виде треугольника
public float spikeProfile (float value, float lo, float high)
{
    float peak;
    value += (-lo);
    if ((lo < 0) && (high < 0))
    {
        high = -(high - lo);
    }
    else 
        if ((lo < 0) && (high > 0))
        {
            high += -lo;
        }
        else 
            if ((lo > 0) && (high > 0))
            {
                high -= lo;
            }
    peak = (float)(high / 2.0);
    lo =(float)0.0;
    if (value < peak)
        {
            return (value / peak);
        }
        else if (value > peak)
        {
            return ((high - value) / peak);
        }
    return (float)1.0;
}
0
Эксперт по математике/физике
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
17.05.2014, 12:22 3
Цитата Сообщение от oksanaBM Посмотреть сообщение
Нагуглила вот такую реализацию функции треугольника
Наверное, в том месте должно быть и описание функции - параметры, интерфейс вызова. Без этого понять, что делает функция, восстановить алгоритм по коду - весьма сложно. Вам проще написать свой код функции - формулы уже есть.
И всё это лучше обсуждать в разделе форума С++, к статистике это не имеет никакого отношения.
0
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 12:33  [ТС] 4
В том месте, к сожалению, просто перечислены функции, без их вызова. Так вот написала начало:
C++
1
2
3
4
5
6
7
8
9
double funcMembership::funcTriangle(double x,double a, double b)//треугольная функция принадлежности
{
    float peak;//верхняя вершина треугольника 
 
    if (x<=a) return 0.0;
    if (x>a && x<=c) return (x-a)/(c-a);
    if (x>c && x<b) return (b-x)/(b-c);
    if (x>=b) return 1.0;
}
А как вычислить точку пика я не знаю(
0
Эксперт по математике/физике
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
17.05.2014, 13:19 5
Цитата Сообщение от oksanaBM Посмотреть сообщение
как вычислить точку пика я не знаю(
Что такое "точка пика"? Смысл строки 3 в коде? В алгоритме (формула, рисунок) есть параметр с, в коде тоже, а где его определение?
0
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 13:23  [ТС] 6
Ну так я и не знаю, с я должна вычислять или задавать.
0
Эксперт по математике/физике
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
17.05.2014, 13:40 7
В найденном Вами коде функции spikeProfile происходит просто смещение координат вершин треугольника, чтобы конечные выражения были проще.
В Вашем коде peak - это координата вершины, т.е. то же самое, что точка c, ввиду симметрии
C++
1
peak = (a+b)/2;
0
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 13:51  [ТС] 8
хорошо.
а как найти в трапециевидной точки с и d подобные точке с треугольника ?
C++
1
2
3
4
5
6
7
8
9
double funcMembership::funcTriangle(double x,double a, double b)//трапециевидная функция принадлежности
{
    float c,d;//вершины верхнего основания трапеции
 
    if (x<=a && x>=b) return 0.0;
    if (x>a && x<c) return (x-a)/(c-a);
    if (x>=c && x<=d) return 1.0;
    if (x>d && x<b) return (b-x)/(b-c);
}
0
Эксперт по математике/физике
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
17.05.2014, 14:10 9
Цитата Сообщение от oksanaBM Посмотреть сообщение
как найти в трапециевидной точки с и d подобные точке с треугольника
Никак, хотя бы одну нужно задавать, вторую по симметрии.
0
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 14:18  [ТС] 10
Хм. Мне необходимо их как-то вычислять.. А в этом файле слишком замудрено? Тут вычисляются эти точки.
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
public float plateauProfile(float value, float lo, float lo_plat, float hi_plat, float hi)
{
    float upslope;
    float downslope;
    value += (-lo);
    
    if (lo < 0.0)
    {
        lo_plat += -lo; hi_plat += -lo;
        hi += -lo; lo = 0;
    }
        else
        {       
            lo_plat -= lo; hi_plat -= lo;
            hi -= lo; lo = 0;
        }
    upslope =(float) (1.0 / (lo_plat - lo));
    downslope = (float)(1.0 / (hi - hi_plat));
    
    if (value < lo) return (float)0.0;
    else 
        if (value > hi) return (float)0.0;
        else 
            if ((value >= lo_plat) && (value <= hi_plat)) return (float)1.0;
            else 
                if (value < lo_plat) return ((value - lo) * upslope);
                else 
                    if (value > hi_plat) return ((hi - value) * downslope);
    return (float)0.0;
}
0
Эксперт по математике/физике
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
17.05.2014, 15:54 11
Судя по названиям переменных, здесь задаются координаты нижнего основания и величины верхнего и нижнего оснований трапеции. Вычисление точек c, d требует знаний геометрии на уровне 6-7 классов.
0
17.05.2014, 15:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2014, 15:54
Помогаю со студенческими работами здесь

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

Реализация работы с классами, конструктор, методы класса и переменные класса
Всем привет, решил изучать Java. Нашел прикольное задание : Реализовать класс, представляющий...

Реализация класса на базе класса Stack с возможностью !индексирования!
Помогите пожалуйста!!! Нужно реализовать на базе класса stack другой класс с возможностью...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru