![]() |
Как в Екселе реализовать такой алгоритм? Есть стандартный ряд чисел, например: 367, 439, 517, 613, 721, 823, 931 и т.д. В результате расчета получилась величина, например 759. Ексель должен выбрать ближайшее большее из стандартного ряда. В данном случае 823. Подскажите, плиз! |
Таблица 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] |
[quote=vovan;44267850]Если У_табл меньше тогда спускаемся Х=х-1[/quote] Вернее наоборот. В Ехеле(1) видно, когда находим Х для (У=У-1) во всех случаях рассчитанный Х надо убавить на 1. Надеюсь, понятно |
[quote=vovan;44267850]получилась величина, например 759[/quote] Проверка: х=(759-230)/95 = 5,57 Округляем вверх х = 6 У(6) = 823 |
Еще проверяем Округление вниз до целого, чтобы не перескочить ближайшую заданную точку. Х = целое(5.57)=5 У(5) = 721 Сравниваем Если У(5) > 759 тогда округлвверх(Х) убавляем х=х-1 |
Или лучше сначала проверить округление вниз до целого, а затем добавить 1, если табличное значение окажется меньше. |
Подумал, лучше вообще не округлять вверх. Сразу проверить округление вниз до целого. Если табличное значение окажется меньше, добавляем х = цел(х)+1 Пример, вычислим ближайший больший У_табл для у= 437: х=(437-230)/95 = 2,18 х=цел(2,18) = 2 У_табл(2) = 439 х= ?(У_табл >у , х, х+1); //это на 1С, в Ехель - Если() 439 > 437 х=2 |
Текущее время: 13:07. Часовой пояс GMT +3. |