К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

ОФФ: v77 Арифметика. Ряды чисел. Написать кратчайшуу ф-цию.

0 - 19.05.2017 - 19:40
Для тех, кому не лень размяться в арифметике - Задача :
Составить наикратчайшую функцию, вычисляющую У от Х.
Имеем Таблицу значений из двух колонок Х, У .
У= f(x); Написать ф-цию на 1Сv77. А можно и на любом языке, важен алгоритм.
Сравнивать длину кода будем по коду в 77.



41 - 21.05.2017 - 18:09
у=0,0009х^2+3.4519х+38,367
Гость
42 - 21.05.2017 - 18:17
МИН() норм экономит, забираю :-)

y=?(X>28,МИН(256,Окр(2,535*(x-29))+110+X),0);

а где на 1Се функция Гены?
43 - 21.05.2017 - 18:17
36-Блондинка в шок > Шикарное решение! Но у Зеленого короче. А он еще один символ выкроил :)
Как ты пришла к квадратному уравнению?
44 - 21.05.2017 - 18:21
Цитата:
Сообщение от Зелёный тролль Посмотреть сообщение
а где на 1Се функция Гены?
Перевод с С1 на 1С
Ф-ция от Гены
У=?(Г>61,256,?(Г>44,цел(3.52*Г+37.85),?(Г>29,цел(3 .5*Г+38),0)));
Модернизированная
У=Мин(256,?(Г>44,цел(3.52*Г+37.85),?(Г>29,цел(3.5* Г+38),0)));
45 - 21.05.2017 - 18:22
38-Шухер > ну ясно же, это была просто функция основного ряда
уточняю коэффициенты -
Y=ОКР(МИН(256,?(X>28,0.0009*X*X+3.452*X+38.36,0))) ;
Гость
46 - 21.05.2017 - 18:27
45-Блондинка в шок > то есть изначально функция закладывалась как квадратное уравнение, а потом коэффициенты подбирались?
47 - 21.05.2017 - 18:28
Цитата:
Сообщение от Шухер Посмотреть сообщение
Как ты пришла к квадратному уравнению?
"апроксимация", сэр :)
пришлось вспомнить институт.
коэффициенты не подбирались, а решались.
система уравнений.
48 - 21.05.2017 - 18:32
Цитата:
Сообщение от Блондинка в шок Посмотреть сообщение
уточняю коэффициенты -
Принято, считает правильно.
Это самое красивое решение, на мой взгляд, из всех виденных.
49 - 21.05.2017 - 18:46
Цитата:
Сообщение от Зелёный тролль Посмотреть сообщение
то есть изначально функция закладывалась как квадратное уравнение
Я подозревал что-то такое. Смотрел, на графике прямая линия с изломом, не парабола, подумал - обычное линейное уравнение с заскоками.

Надо проверить твою формулу в другом диапазоне. Независимо от результата, мои симпатии остаются за твоим решением, высший пилотаж.
Гость
50 - 21.05.2017 - 19:03
"апроксимация", сэр :)
Только по моему это не аппроксимация, а интерполяция )
Аппроксимация - это приближение по минимуму критерия отклонения, например среднеквадратичного )
51 - 21.05.2017 - 19:24
50-USSR >апроксимация, интерполяция..
как хочу, так и делаю

например, вот так:

У=ОКР(?(X>28,МИН(256,3.5352*Х+36.46),0));
52 - 21.05.2017 - 19:46
51-Блондинка в шок >
Фантастика! Работает, даром что не аппрокси.. , как его там по научному-то ?
Шухер в шоке - 42 буква вся формула.
53 - 21.05.2017 - 19:49
Цитата:
Сообщение от Блондинка в шок Посмотреть сообщение
+36.46
Ты не на градуснике высчитывала формулу? :)
54 - 21.05.2017 - 19:59
Зеленый, твою формулу посокращать бы можно
(2.5345*(х-29))+110 ->
2.5345*х - 2.5345*29 - 110
не проверял, может поплывет из за округления
55 - 21.05.2017 - 20:06
Математика, это вам не русский и литература, где могут быть разночтения. :) Математика - это как в шахматах, мат на доске означает безусловную победу, без всяких "НО".
Мат, сэр!
56 - 21.05.2017 - 20:42
51-Блондинка в шок > скорее всего не сработают дробные до копеек... придётся скорее всего задать сначала:
Х=ЦЕЛ(X+0.999);
57 - 21.05.2017 - 21:11
56-Гена >Гена, так это ж вроде обсудили и утвердили:
Цитата:
Сообщение от Гена Посмотреть сообщение
можно сначала определить в ячейке B1 =ОКРУГЛВВЕРХ(A1;0)
Цитата:
Сообщение от Шухер Посмотреть сообщение
Принимается округление вверх в другой ячейке.
я исходила из этого и никаких больше
Цитата:
Сообщение от Гена Посмотреть сообщение
Х=ЦЕЛ(X+0.999);
не подразумевала.


Цитата:
Сообщение от Шухер Посмотреть сообщение
Шухер в шоке - 42 буква вся формула.
А я насчитала 41 вместе с последней точкой с запятой.
58 - 21.05.2017 - 21:34
57-Блондинка в шок > Нет уж. Надо всё считать, потому что у ЗТ два раза иксы используются кроме X>28, где не требуется округление, а у Вас только в ОДНОМ месте, поэтому у Вас пойдёт выигрыш ещё в три знака "Х=" и ";".
Окончательно:
У=ОКР(?(X>28,МИН(256,3.5352*ЦЕЛ(Х+0.99)+36.46),0)) ;
59 - 21.05.2017 - 21:55
58-Гена >
Цитата:
Сообщение от Гена Посмотреть сообщение
Нет уж. Надо всё считать,
Вот именно - нет уж.
Читаем сабж:
1. Имеется таблица.
2. По таблице построить функцию.
3. Точка.

Возьми экселевский файлик из задания (точнее из поста (1).
Подставь мою формулу из (51) (прямо в ту табличку эксель) и проверь.
Никаких Х=ЦЕЛ(X+0.999) не требуется.

Поэтому я не буду настаивать, чтобы ЗТ тоже округлял Х непосредственно в формуле.
А то так действительно у меня еще больше выигрыш получится.
60 - 21.05.2017 - 21:59
В посте #12 автор уточнил, что рассматривает и копейки.
61 - 21.05.2017 - 22:06
60-Гена > Но с другой стороны ты прав.
Если формально соблюдать требование, что не должно быть никаких дополнительных операторов, даже через";",
И если сделать предположение, что речь идет именно о рублях и копейках (т.е. два знака после запятой), то принимаю твою окончательную поправку:
У=ОКР(?(X>28,МИН(256,3.5352*ЦЕЛ(Х+0.99)+36.46),0)) ;

И при этом никаких "дополнительных округлений вверх в отдельной ячейке" не требуется.
62 - 21.05.2017 - 22:25
Когда 1Снику делать нечего, он... нет, не дотягивается.
Гость
63 - 22.05.2017 - 01:00
54-Шухер > конечно можно )) всё ж таки два X в формуле первой степени ))

попробую ещё что-нить альтернативное подумать

Отредактировано qweqwe123123; 22.05.2017 в 01:01. Причина: 111
64 - 22.05.2017 - 01:26
Еще порция на вентилятор: только Зелёный тролль выстроил свою формулу в (42) как программист, а остальные "рекордисты" - как не знаю кто... математики, наверное?

И вот почему: и в (58), и в (61) при значениях Х вне диапазона 29...62 округлению будут подвергнуты либо 0, либо 256, которые заданы явно и в этом округлении ничуть не нуждаются.

Да, приведение формул к "программистскому" виду не сократит (но и не увеличит!) их длину, а выполняться они будут немножко оптимальнее.

И вообще не факт, что самая короткая формула будет выполняться наиболее быстро - может быть, с точки зрения компьютера оптимальной будет формула вообще без вычислений. По крайней мере, без вычислений с плавающей точкой.
Гость
65 - 22.05.2017 - 01:40
мм, копейки!
Гость
66 - 22.05.2017 - 01:52
64-Ткачик > ну я экономфак заканчивал, а там самое сложное - какой-нить банковский процент посчитать. так что всё успешно забыто. но спасибо на добром слове )
67 - 22.05.2017 - 07:45
Цитата:
Сообщение от Блондинка в шок Посмотреть сообщение
А я насчитала 41 вместе с последней точкой с запятой.
Да, 41 символ, <;> от последнего вычисления осталась при вставке, не заметил.
СтрДлина("у=ОКР(?(у>28,МИН(256,3.5352*у+36.46),0)) ;;") = 42
68 - 22.05.2017 - 11:06
Цитата:
Сообщение от Ткачик Посмотреть сообщение
Еще порция на вентилятор
Так его, так, давай-поддавай, "золотарь" ты наш. Работать, негры, работать, солнце еще не зашло. Так что усердней набрасывай, трудись, не ленись. :)
69 - 22.05.2017 - 11:09
(68) Почувствовали себя "озолоченной", мадам?
70 - 22.05.2017 - 11:37
Цитата:
Сообщение от Блондинка в шок Посмотреть сообщение
МИН(256,3.5352
Ты этот аппроксиматор 3.5352 каким образом вычислила?
3,545454545 - вот шаг прогрессии при х = от 29 до 62.
71 - 22.05.2017 - 12:40
70-Шухер > Элементарно, Ватсон. Не проверял, но думаю, что БвШ воспользовалась методом наименьших квадратов:

72 - 22.05.2017 - 13:31
+(71) МНК даёт а = 3.53521772... и b = 36.50053476
Округление приводит к результату:
a = 3.535
b = 36.49
73 - 22.05.2017 - 18:27
71-Гена > Вон оно что, вот спасибо за подсказку !
Я то сразу как-то не придал значение, когда она про аппроксимацию намекнула, подумал - вот выделывается. :) Попробуем разобраться, надо еще для одного ряда подогнать а и b.
74 - 22.05.2017 - 20:24
Где мои семнадцать лет ... Сейчас для учебы фантастические возможности. Кампутер, интернет, любые книжки, обсуждения, видеоуроки, обучающие программы. И не хотят учиться. Это же так интересно - учиться.
Гость
75 - 22.05.2017 - 20:45
Цитата:
Сообщение от Ткачик Посмотреть сообщение
И вообще не факт, что самая короткая формула будет выполняться наиболее быстро - может быть, с точки зрения компьютера оптимальной будет формула вообще без вычислений. По крайней мере, без вычислений с плавающей точкой.
Да. НайтиЗначение в готовой таблице значений будет работать быстрее. Особенно, при большом количестве вызовов.:)
Но, задача не в том, чтобы быстрее.
76 - 22.05.2017 - 21:02
Цитата:
Сообщение от Оля П Посмотреть сообщение
Но, задача не в том, чтобы быстрее.
Производительность тоже будем замерять.
Кстати, глянул мельком замер -
ч=ч+1 0,52%
Найти() 0.23%
Страшно представить, сколько времени займет вычисление с плавающей точкой :)
77 - 22.05.2017 - 21:08
Интересное наблюдение :)
1С прежде чем что-то ляпнуть - прежде хорошенько подумает. Основное время выполнения заняло Сообщить()
Сообщить(Строка(х)+ " = " + Строка(у) ); 18 0.066128 97.90%
78 - 23.05.2017 - 00:49
Цитата:
Сообщение от Шухер Посмотреть сообщение
Попробуем разобраться, надо еще для одного ряда подогнать а и b.
Эксель замечательно все это умеет делать.

Честно и откровенно говоря, всех моих усилий то - это всего лишь предположить, что твой ряд можно попытаться аппроксимировать с заданной погрешностью.

А дальше железяка все считала сама.
Рассказывать подробнее думаю незачем, если в яндексе набрать "аппроксимация в excel", то с десяток миллионов вариантов тебе яндекс вывалит точно :)
Гость
79 - 23.05.2017 - 03:16
Цитата:
Сообщение от Шухер Посмотреть сообщение
ч=ч+1 0,52% Найти() 0.23%
Не все так просто. После НайтиЗначение естественно вызвать ПолучитьЗначение. Иначе зачем?
Гость
80 - 23.05.2017 - 04:22
Только 1С-ники могут решать задачу, у которой нет четкой постановки Если это аппроксимация - то с какой точностью? Бессмысленно сравнивать 2 решения по длине кода функции или по быстродействию, если эти решения дают разную точность. Задача поставлена некорректно, поэтому и решать ее бессмысленно.
"Параметр (х) - может принимать целые положительные значения от 0 до бесконечности." - с этим что делать? Аппроксимировать можно только какие-то конкретные наборы данных, а не абстрактные понятия


К списку вопросов






Copyright ©, Все права защищены