Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Как в Екселе реализовать такой алгоритм? (http://forums.kuban.ru/f1024/kak_v_eksele_realizovat-_takoj_algoritm-8333596.html)

vovan 26.05.2017 11:56

Как в Екселе реализовать такой алгоритм?
 
Есть стандартный ряд чисел, например: 367, 439, 517, 613, 721, 823, 931 и т.д.
В результате расчета получилась величина, например 759. Ексель должен выбрать ближайшее большее из стандартного ряда. В данном случае 823. Подскажите, плиз!

Шухер 27.05.2017 06:38

Таблица
x y
1 367
2 439
3 517
4 613
5 721
6 823
7 931

Уравнение линейной регрессии имеет вид
у=95*х+ 250
Спускаем вниз на 20 пунктов нашу прямую, чтобы все заданные известные точки оказались выше расчетных, и потом при вычислениях округляем вверх.
у = 95*х +230 --> вычисляем х и округляем вверх до целого.
х=(у-230)/95
Нашли ближайшее значение Х, теперь сравниваем У(х) с У_табличным(х). Если У_табл меньше тогда спускаемся Х=х-1.
Х- порядковый номер в заданном ряду значений У.

Можно написать макрос, а можно и в ячейке формулу составить по условию.
Еще надо по диапазону ограничение на Мин, чтобы не выскочить.
В данном примере Х не может быть больше 7.

[img]https://img-fotki.yandex.ru/get/170815/17660635.2/0_193f41_d66cae30_orig.png[/img]

Шухер 27.05.2017 07:09

[quote=vovan;44267850]Если У_табл меньше тогда спускаемся Х=х-1[/quote]
Вернее наоборот. В Ехеле(1) видно, когда находим Х для (У=У-1) во всех случаях рассчитанный Х надо убавить на 1.
Надеюсь, понятно

Шухер 27.05.2017 07:23

[quote=vovan;44267850]получилась величина, например 759[/quote]
Проверка:
х=(759-230)/95 = 5,57 Округляем вверх х = 6
У(6) = 823

Шухер 27.05.2017 07:40

Еще проверяем Округление вниз до целого, чтобы не перескочить ближайшую заданную точку.
Х = целое(5.57)=5
У(5) = 721
Сравниваем
Если У(5) > 759 тогда округлвверх(Х) убавляем х=х-1

Шухер 27.05.2017 07:49

Или лучше сначала проверить округление вниз до целого, а затем добавить 1, если табличное значение окажется меньше.

Шухер 27.05.2017 08:17

Подумал, лучше вообще не округлять вверх. Сразу проверить округление вниз до целого. Если табличное значение окажется меньше, добавляем х = цел(х)+1
Пример, вычислим ближайший больший У_табл для у= 437:
х=(437-230)/95 = 2,18
х=цел(2,18) = 2
У_табл(2) = 439
х= ?(У_табл >у , х, х+1); //это на 1С, в Ехель - Если()
439 > 437 х=2


Текущее время: 05:22. Часовой пояс GMT +3.