Регистрация Правила Главная форума Поиск |
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С Ф-ция от Гены У=?(Г>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
| Ты не на градуснике высчитывала формулу? :) | | |
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-Гена >Гена, так это ж вроде обсудили и утвердили: я исходила из этого и никаких больше не подразумевала. А я насчитала 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 символ, <;> от последнего вычисления осталась при вставке, не заметил. СтрДлина("у=ОКР(?(у>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
| Ты этот аппроксиматор 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
| Эксель замечательно все это умеет делать. Честно и откровенно говоря, всех моих усилий то - это всего лишь предположить, что твой ряд можно попытаться аппроксимировать с заданной погрешностью. А дальше железяка все считала сама. Рассказывать подробнее думаю незачем, если в яндексе набрать "аппроксимация в excel", то с десяток миллионов вариантов тебе яндекс вывалит точно :) | | |
79
- 23.05.2017 - 03:16
| Не все так просто. После НайтиЗначение естественно вызвать ПолучитьЗначение. Иначе зачем? | | |
80
- 23.05.2017 - 04:22
|
Только 1С-ники могут решать задачу, у которой нет четкой постановки Если это аппроксимация - то с какой точностью? Бессмысленно сравнивать 2 решения по длине кода функции или по быстродействию, если эти решения дают разную точность. Задача поставлена некорректно, поэтому и решать ее бессмысленно. "Параметр (х) - может принимать целые положительные значения от 0 до бесконечности." - с этим что делать? Аппроксимировать можно только какие-то конкретные наборы данных, а не абстрактные понятия | |
| Интернет-форум Краснодарского края и Краснодара |