PDA

Просмотр полной версии : Выбор отрезка аппроксимации



Владислав Г.
20.10.2015, 10:15
В кусочно-линейной аппроксимации необходимо определить к какому отрезку привязать текущее значение параметра. Например, наш массив абсцисс будет иметь такие значения: Х1=0, Х2=1, Х3=2, Х4=3. Входная величина Хi=1.5. Получается: (Х2=1)<(Xi=1.5)<(X3=2).
Как в КДС на CFC решить эту задачу?

capzap
20.10.2015, 10:29
изучайте как использовать "прыжки" либо переходите к изучению ST

spectrum48k
20.10.2015, 11:06
А что мешает выполнять в CFC n сравнений вхождения в диапазон, и результат операции выводить на вход en блока MOVE, который по данному условию нужной переменной присвоит, например, номер отрезка? Раз уж нужно в CFC

Владислав Г.
20.10.2015, 15:06
А что мешает выполнять в CFC n сравнений вхождения в диапазон, и результат операции выводить на вход en блока MOVE, который по данному условию нужной переменной присвоит, например, номер отрезка? Раз уж нужно в CFC

После n сравнений у меня не получается выделить необходимый номер отрезка.

petera
20.10.2015, 15:56
После n сравнений у меня не получается выделить необходимый номер отрезка.
А если так?
20450
x=1.5
20451
x=2.2
20452
x=4.35
20453

capzap
20.10.2015, 17:30
А если ...

а если будет 100 точек?

Валенок
20.10.2015, 19:22
А что мешает выполнять в CFC n сравнений вхождения в диапазон,
Ну вот если n и будет входным параметром n

Владислав Г.
21.10.2015, 10:25
а если будет 100 точек?
Хорошее решение для небольшого количества точек. Но у меня таких точек будет около 45.
Задействовал CHARCURVE в количестве 6 шт. Хотя, наверняка, есть другие варианты.

Владислав Г.
21.10.2015, 10:27
А если так...
Спасибо за наглядный пример!

Владислав Г.
21.10.2015, 10:30
изучайте как использовать "прыжки"
Что такое "прыжки"? )

Yegor
21.10.2015, 10:36
Например, наш массив абсцисс будет иметь такие значения: Х1=0, Х2=1, Х3=2, Х4=3.С такими массивами ваша задача сводится к отбрасыванию дробной части из Хi=1.5. Может, и с реальными данными хватит простой арифметики?

petera
21.10.2015, 11:26
Хорошее решение для небольшого количества точек. Но у меня таких точек будет около 45.
Задействовал CHARCURVE в количестве 6 шт. Хотя, наверняка, есть другие варианты.
А не проще изменить количество точек в ФБ CHARCURVE, например до 45
20486
и импортировать его в свой проект?
20487

capzap
21.10.2015, 11:29
А не проще изменить количество точек в ФБ CHARCURVE, например до 45
20486
и импортировать его в свой проект?
20487
да, Вы,батенька обленились )))
взяли бы да потренировались как делать цикл for на CFC и человеку помогли и сами навыки повторили

petera
21.10.2015, 11:43
да, Вы,батенька обленились )))
взяли бы да потренировались как делать цикл for на CFC и человеку помогли и сами навыки повторили
А какой смысл в цикле, судя по всему ТС хочет определить в какой из шести отрезков попадает входная величина для того, чтобы затем определить какой из шести ФБ CHARCURVE задействовать для этой входной величины?
Не проще ли сразу использовать всего один ФБ CHARCURVE.

Владислав Г.
21.10.2015, 11:46
С такими массивами ваша задача сводится к отбрасыванию дробной части из Хi=1.5. Может, и с реальными данными хватит простой арифметики?
Этот пример был упрощен, на самом деле значения будут выглядеть по другому.

Эдуард_Н
21.10.2015, 19:54
А не проще изменить количество точек в ФБ CHARCURVE, например до 45
20486
и импортировать его в свой проект?
20487

Выдаёт ошибку.

petera
21.10.2015, 20:24
Выдаёт ошибку.
Какую ошибку?

https://www.youtube.com/watch?v=kQL5UEFpObQ
Вы должны обязательно подключить библиотеку Util.lib, т.к. для CHARCURVE_45 нужен тип данных "POINT". А этот тип прописан в библиотеке Util.lib.
На самом ютубе качество лучше https://www.youtube.com/watch?v=kQL5UEFpObQ

Эдуард_Н
22.10.2015, 04:21
Всё нормально, нет никакой ошибки. Извините, сам проморгал.

Владислав Г.
22.10.2015, 07:28
А не проще изменить количество точек в ФБ CHARCURVE, например до 45...
Все получилось. Большое спасибо!