Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   ОФФ: v77 Арифметика. Ряды чисел. Написать кратчайшуу ф-цию. (http://forums.kuban.ru/f1040/off_v77_arifmetika_ryady_chisel_napisat-_kratchajshuu_f-ciyu-8325756.html)

Шухер 23.05.2017 07:13

[quote=USSR;44249777]Задача поставлена некорректно, поэтому и решать ее бессмысленно. [/quote]
Задача поставлена корректно, ты нашел Таблицу ?
Все опубликованные решения вычисляют значения у=f(x) с абсолютной точностью. Видел, там у всех ф-ция ОКР() используется ?

[quote=USSR;44249777]Параметр (х) - может принимать целые положительные значения от 0 до бесконечности." - с этим что делать? [/quote]
Еще раз - Таблица
[url]https://cloud.mail.ru/public/41KG/UkKPLUoLn[/url]

[img]https://img-fotki.yandex.ru/get/196161/17660635.2/0_193f21_c3f58a52_orig.png[/img]
Функции посмотри, как они справляются с этой нелегкой задачей и находят значения У при Х<29 и Х>61
Естественно, что без логических условных операторов никакая аппроксимация не справится с решением.
Но у нас-то задача [b]написать Программу - Функцию[/b] на любом языке программирования.
Не знаю уж как понятнее поставить эту задачу.

USSR 23.05.2017 08:15

(81)Ну значит я не до конца вьехал, приношу извинения.

Шухер 23.05.2017 12:03

[quote=Блондинка в шок;44249704]Рассказывать подробнее думаю незачем,[/quote]
Да мы-то знаем. Что там решать, простейшая задачка с линейным уравнением для первого курса. Так спрашиваем, вас проверить :)))))

Шухер 23.05.2017 12:11

82-USSR > Ну вот, с техзаданием разобрались.
Конкретные значения пар {x,y** уже есть, теперь может методами интерполяции получится найти элегантное решение?

Шухер 23.05.2017 18:40

Вот, а для ряда Х, 2*У то есть
Х, У, 2*У
29 139 278
30 143 286
31 146 292
и так далее, уже не получается подобрать а и в
У меня так получилось
а = 7,070435447
в = 73,00106952
Цифры рядом, но погрешность не позволяет воспользоваться Окр. Где-то теряем 1, где-то лишняя.

qweqwe123123 23.05.2017 18:51

если разрядности не хватает, повышай степень функции.
и у ОКР можно явно указать количество знаков после запятой

Шухер 23.05.2017 19:03

[quote=Зелёный тролль;44253727]повышай степень функции.[/quote]
Куда еще повышать, и так а,в, подбираются чтобы погрешность стремилась к нулю. Шаг влево - вправо ухудшают картину.

Шухер 23.05.2017 19:34

Не получается аппроксимировать, с идеей 2*у можно расстаться. Кому надо узнать 2*У может получить -
2*У=2*ОКР(?(X>28,МИН(256,3.5352*ЦЕЛ(Х+0.99)+36.46),0)) ;

Пока это сам короткий код. Код от БвШ, ну и округвверх от Гены. Кстати он тоже самый короткий.

USSR 23.05.2017 19:43

Деймос был хотя бы прикольнее

Шухер 23.05.2017 20:00

[quote=USSR;44254018]Деймос был хотя бы прикольнее [/quote]
Да, по прикольности ему нет равных.
Что с интерполяцией, решается? Или ты так просто, жажда общения?

Шухер 24.05.2017 05:06

Вот дожили,
Онлайн калькулятор Аппроксимация.
[url]http://planetcalc.ru/5992/[/url]
На блюдечке, с графиками, погрешностями ... с формулами.
Эдак разучимся столбиком умножать, делить.

Шухер 24.05.2017 11:26

Еще по-экспериментировал с цифрами. Блондинке в шок повезло с аппроксимацией, уже этот метод не проходит с рядом 2*У.

yˆ=7.07043545x+73.00106952.
Даже пробовал кубатурить
yˆ=−0.00000304x3+0.00224569x2+6.88550573x+76.87680561
Но погрешность такова, что без программных трюков не получается весь ряд чохом округлить ни каким образом.
Не решает проблему, если этот ряд уменьшить в 10 раз
т.е получаем ряд у = 2*У(xi)/10 -> У=0.2*У
yˆ=0.70704354x+7.30010695 // А и В просто в 10 раз меньше стали, а ситуация не изменилась.

Вроде цифры уже меньше и погрешность должна бы уменьшиться, но получаем ровно такую же картину, как и при У=2У. В общем, хочешь поднимай, хочешь опускай - расползаются точки на графике.
Ну, повезло Блондинке в шок. :)

Чатланин 24.05.2017 12:03

Dctv Ghtdtl!
Я думаю это видео немного подходит для данного случая,особливо концовка :)
[youtube][url]https://www.youtube.com/watch?v=-ckaPGoQ6XU[/url][/youtube]

USSR 24.05.2017 12:11

Есть куда более крутые способы аппроксимации, чем полиномиальные (то есть степенями X), например сплайнами.

Чатланин 24.05.2017 12:15

[url]https://www.youtube.com/watch?v=-ckaPGoQ6XU[/url]

USSR 24.05.2017 12:47

На Ютубе лучше Алишера Усманова посмотрим ) честного нашего олигарха

Блондинка в шок 24.05.2017 12:53

[quote=Шухер;44257074]Ну, повезло Блондинке в шок. :)[/quote] не повезло, а простое понимание.
на пальцах:
Нарисуй треугольник. Прямоугольный. С катетами равными 1. Проведи высоту из прямого угла к гипотенузе. Проведи перпендикулярно высоте (раздели пополам высоту) штрих-линию, параллельно гипотенузе. Легко увидеть, что кратчайшее расстояние от этой линии к любой вершине треугольника равно 0,3536... т.е. меньше 0.5. Иными словами, я могу "[em]низложить треугольник до отрезка[/em]" :) с погрешностью 0,3536.
А результат мы округяем до целых, т.е. погрешность [b]меньше половины младшего разряда[/b] У.

Изначально у тебя ступенька (перелом) была на 1.
апроксимирующая линия "условно посередины" высоты и "двигая" эту линию вдоль высоты, мы имеем запас (0,5-0,35=0,15), некую возможность подвести ближе/дальше линию к нужной вершине (округлить до 1 к нужному нам результату). Поэтому я осознавала, что имеется возможность аппроксимировать твои ступеньки.

а вот при 2У треугольник уже получается с высотой больше 1 и ты не сможешь провести апроксимирующую линию так, чтобы расстояние до всех из вершин треугольника было меньше 0.5.
Поэтому для 2У я даже и начинать не буду, потому что заведомо " превратить [em] треугольник в отрезок с погрешностью меньше половины младшего разряда У [/em]" не получится :)

несколько сумбурно, но это дольше рассказывалось, а на самом деле мелькнуло в голове и все.

USSR 24.05.2017 13:01

(92)Просветление ) не иначе как Николай Угодник помог ))

Шухер 24.05.2017 17:28

[quote=USSR;44257378]Есть куда более крутые способы аппроксимации[/quote]
Ну так покажи решение более крутым способом, без лишних слов.
Эта задача давно решена программно, мне просто интересно вспомнить математику. И не Николай Угодник, а Пискунов Н.С. помогает. Скачал оба тома, сижу вспоминаю забытое.

Шухер 24.05.2017 17:32

[quote=Блондинка в шок;44257675] 2У треугольник уже получается с высотой больше 1[/quote]
А 0.2У - почему не получается.
И почему 2У - нельзя построить треугольник и считать за 1. На самом деле ряд с У, который решили, это 0.5 от этого нового ряда 2У.

USSR 24.05.2017 17:34

(99)я не увидел нигде задачи. В чем она состоит ? закинута какая то мулька - кто предложит самый короткий код. Это не задача, это упражнение для смекалки. Если есть задача, то ее надо нормально ставить

Шухер 24.05.2017 17:58

[quote=USSR;44259358]я не увидел нигде задачи.[/quote]
Ясно. Видимо задача слишком мелка, чтобы ты её увидел.
Тебе три раза пришлось таблицу показывать, стрелки рисовать. Ну а задачу с 2У я просто даже не берусь ставить, не подъемно для меня пока.

USSR 24.05.2017 18:10

(102)так тебе дали цже несколько решений, чем они не устраивают ? Задача - это не таблицу нарисовать. Для меня тоже неподьемно, что ты хочешm от этой функции. А когда я не понимаю, то не могу решить.

USSR 24.05.2017 18:14

Есть целые книжки по аппроксимации. Но решение часто зависит от предметной области, в которой процессы подчиняются или описываются некоторыми уже общепринятыми закономерностями. Например экспоненциальными функциями, а не простыми степенными рядами. Что надо то ???)

USSR 24.05.2017 18:21

Таблица - это набор точек. Можно просто записать их в массив или в таблицу значений и извлекать оттуда. Вот и вся задача. Называется - табличное хранение данных, Но если не знать, что же надо решить, то и не решить никогда. Может просто я такой тупой, не отрицаю. Но я так и не врубился в чем смысл этой темы. То кто короче, то кто точнее, то кто быстрее. Зачем, почему? Если просто головоломка - это одно, если есть прикладной смысл - другое

Шухер 24.05.2017 18:32

Задача уже решена.
Сейчас, используя любую на выбор модель регрессии: линейную, квадратичную, кубическую ... любую, или какие другие еще круче, построить математическую формулу, по которой точно определяется значение у от х. То есть написать функцию у=f(x).
Здесь значения Х, и соответствующие им значения У
Х (может принимать целые положительные значения от 29 до 62)
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
Соответствующие им занчения У
278 286 292 300 306 314 320 328 334 342 348 356 362 370 376 384 392 398 406 412 420 426 434 440 448 454 462 468 476 484 490 498 504 512
Пример:
у=f(x) y=f(29) = 278
29 - 278
30 - 286
и так далее. Можно использовать округление какое угодно, вверх/вниз, до целого. Нельзя использовать условные операторы "Если", и поиск по таблице.
Значения "У" получены путем умножения чисел на 2. Можешь скачать таблицу из задания в теме, которую я тебе уже показывал, подставить формулу =2*У, и получишь нужный ряд.
Что-то не понятно?

Шухер 24.05.2017 18:56

Бесценная книжка. Цена 1руб 10 коп.

[img]https://img-fotki.yandex.ru/get/100269/17660635.2/0_193f25_4a1a9a67_orig.png[/img]

USSR 24.05.2017 19:09

Если задача уже решена, то зачем ее решать ?))
По Пискунову не учился, за него били, учился по Фехтейнгольцу.

Шухер 24.05.2017 19:18

[quote=USSR;44259790]Если задача уже решена, то зачем ее решать ?[/quote]
1. Может у тебя найдется другое интересное решение по Фехтейнгольцу. У нас же разные школы :)
2. Решили для ряда У, а вот для ряда 2У (106) это решение уже не подходит. В (85) уже подробно все рассказал.
Эта же линейная формула
y = ax + b.
Блондинка в шок объяснила на треугольнике, почему не получается.
Слушай, может тебе пересказать своими словами всё с самого начала? А? :)

Шухер 24.05.2017 19:51

Золотые времена для учебы настали!

Справочник по математике для инженеров и учащихся втузов
Бронштейн И.Н. Семендяев К.А.
Издание 1986 года
Цена 4 руб. 10 коп.

USSR 24.05.2017 20:19

У меня еще целый и многие годы неоткрываемый Корн и Корн "Справочник по математике", 1978, Цена 4 руб.
Я еше раз говорю, что инженерные задачи так не ставятся, либо просто я чего-то не догоняю. Ну есть таблица (Х,Y). Надо построить функцию, которая с какой точностью приближается к выборке ? Только в заданных точках ? Если только в них, то задача практически не имеет смысла, зачем вычислять в точках, в которых итак все известно ? Какой у задачи практический смысл? Или это просто упражнение ? Аппроксимация - это построение функции для вычисления не только в заданных точках, а между ними. Интерполяция - обычно используется для прогнозирования. А тут я не пойму для чего) Не воспринимай как наезд, просто именно я не понимаю эту задачу

Шухер 24.05.2017 21:00

[quote=USSR;44260149]Если только в них, то задача практически не имеет смысла, зачем вычислять в точках, в которых итак все известно ?[/quote]
Лан, раскрываю секрет, откуда цифры взялись.
Есть Таблица, я её показывал
[url]https://cloud.mail.ru/public/2MB5/xzW7mYrbU[/url]
Красным выделено - это минимальные цены для оптовиков, по которым можно продавать алкоголь, для кодов АП (алкопрод) водки и прочие
Найти("200,212,236,237,280",КодАП)>0 Тогда ----
емкостью 0.5 литра
закон вступил в силу с 13 мая.
28, 29, --- 61, 62 - это градусы алкоголя
Но емкости бывают разные, сам знаешь, чекушки там - 0.25... графины и так далее. Ну, а если продашь ниже минимальной цены, получаешь штрафы - 100 тр предприятие, 50тр должностное лицо, и главное - можешь лишиться лицензии, и пиши пропало. Так вот, при продажах надо контролировать цену, чтобы дешевле не продать. Но и дороже продавать себе в убыток, растеряешь клиентуру. Можно, конечно составить таблицу на все варианты, и по ней плясать, а можно написать ф-цию у=f(x) и сравнивать Возврат У; с ценой, цена ниже У - запрет операции.
Есть еще для производителей, и розницы такие же ограничения.
Ну, а мы занялись математикой. Ибо предположили, что ряд из каких-то соображений и по какой-то формуле составлялся. :)
Но как выяснилось, после долгих мучений, без логики никак тут не обойтись. То есть уже никак не упрекнуть наших законодателей, что они вне всякой логики принимают свои законы. Научно доказано :)

Шухер 24.05.2017 21:09

Для Оптовиков так была решена задача:
чиста программно, без арифметики. На входе Х уже округлена до целого.

МинЦена=75+7*х+?(х%2=0,?(х>57,3,1),?(х>44,2,0));
//для 1 литра.
МинЦена = мин(588,?(х>28,МинЦена,0))*Емкость;
//тут по диапазонам обрезаем

Шухер 24.05.2017 21:15

Ошибка 588 - это для розницы
Для Опта - 512

EarlyBird 24.05.2017 21:40

[quote=Шухер;44260339]Но и дороже продавать себе в убыток, растеряешь клиентуру.[/quote]
Шмука! Я понимаю, что совсем ни фига не понимаю в торговле.
Видимо, какие-то новые тренды, я староват для них :(

EarlyBird 24.05.2017 21:42

Наступили времена, когда продавать алкоголь дороже стало в убыток - куда мы катимся вообще?

Шухер 24.05.2017 21:44

[quote=Ирли Бёрд;44260539] какие-то новые тренды[/quote]
В Ехеле тренд - ф-ция Тенденция. Тренд - наша ваша не понимайт.

OlgaP 25.05.2017 00:28

[quote=Шухер;44253673]Вот, а для ряда Х, 2*У то есть Х, У, 2*У 29 139 278 30 143 286 31 146 292 и так далее, уже не получается подобрать а и в[/quote]
Возможно, чего-то не понимаю. Но, зачем подбирать? Не проще в формулу Блондинки вставить 2*(формула)?

USSR 25.05.2017 03:00

Я опять не все понял, пять утра,но я бы все таки подуиал именно а сторону табличного хранения данных,справочника или оегистра сведений, из которых доставать значения.не нужна тут формула. И работать будет быстро
Ох

Шухер 25.05.2017 06:20

Вот же, пойдут на всякие ухищрения, лишь бы книжки не открывать, не учиться :)
[quote=Оля П;44261262]Не проще в формулу Блондинки вставить 2*(формула)?[/quote]
Хорошее решение, конечно, - умножить на два Формулу.БвШ. Чего проще, когда уже есть готовая формула.
Ну, а как ты используешь Формулу.БвШ для другого ряда? На сколько надо умножить Формулу.БвШ ?
Вот например:
Значения Х:
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
Значения У:
0 0 0 0 0 0 0 0 0 0 169 173 176 180 183 186 190 193 197 200 204 207 210 214 217 221 224 228 228 228 228 228 228 228

То-то! Поэтому надо уметь решать подобные задачи. Можно в лоб - и по справочникам искать, но ведь справочники составляли тоже по каким-то формулам и правилам. Кому лень найти и понять эти формулы, пусть листают справочники.


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