| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
НЛО Регистрация: 09.07.2007
Тутошние мы.
Сообщений: 6,078
|
Год на форум не заходил и все головоломки и головоломы исчезли
Вот практическая задача, которую сейчас думаю, как бы оптимизировать. Чтобы не путать, приведу только графический её смысл - в таком виде задача как раз представляет собой интересную головоломку. Она из разряда "для программирования", но хотелось бы максимально её упростить. Дано: Есть некий график, заданный точками (Х,У) - чёрный на рисунке. Как и полагается уважающему себя графику, у каждого Х есть только один У. Есть некая горизонтальная прямая (У=константа) - красная на рисунке. Задача 1 (простая) Найти площадь (жёлтая на рисунке), которая лежит над черным графиком, но под красной линией. Задача 2 (сложная) При заданном графике и при заданной площади найти У, которой соответствует красная линия. То есть решить задачу, обратную первой. Мои соображения Первую задачу решить не тяжело, просто пройдя циклом по всем отрезкам графика. При этом пришлось на каждом отрезке определять 1 из 4 вариантов (обе точки выше красной, обе очки ниже, левая ниже, правая ниже) - формулы для всех 4 случаев разные. И потом суммировать всё. Можно ли это упростить - не знаю... А вот точного решения для второй задачи вообще не вижу. Только методом последовательных приближений. Предположить У, найти площадь, сравнить с искомой, откорректировать У, найти новую площадь, сравнить... Но это: - неточно - требует весьма большого количества циклов для более менее точного результата А можно ли точно решить или хотя бы упростить? Меня всё тенет попробовать как-то интегралы применить... И/или метод Ньютона... Но что-то не могу сообразить, как это всё в коде реализовать. А ещё меня смущает то, что для одиночной трапеции или треугольника "задача 2" примитивна на уровне 7 класса школы. Может, есть простой способ и для нескольких трапеций и треугольников, объединённых в одну произвольную фигуру? |
|||
|
||||
Сообщений: n/a
|
А чем плох метод последовательных приближений, кроме того, что это слишком примитивно и ничуть не красиво?)
Был бы график не дискретным, а функцией (собственно, соответствие только одной ординаты каждой абсциссе - это и есть свойство функции) - там с интегралами аналитически все бы в два счета считалось. Хотя интегралов в численных методах не бывает - там все сводится к рядам и циклам точно так же в итоге. |
|||
|
||||
КМ (+КМД), КЖ (КЖФ) Регистрация: 30.05.2007
Далече
Сообщений: 25,086
|
Зачем так усложнять?
Все можно решить тригонометрически - куски графика ЛИНЕЙНЫ. Т.е. все свести к площадям прямоугольников и треугольников. А это уже задача 6-го класса приходской школы. Хоть прямая, хоть обратная. Раз уж Вы задали ломаную, то и надо ломаную рассматривать. Или Вы условно нарисовали?
__________________
Воскресе Последний раз редактировалось Ильнур, 12.02.2017 в 17:55. |
|||
|
||||
НЛО Регистрация: 09.07.2007
Тутошние мы.
Сообщений: 6,078
|
Цитата:
Цитата:
|
|||
|
||||
люблю мастерить Регистрация: 21.01.2005
Челябинск
Сообщений: 9,897
|
Тоесть есть некая таблица со списком точек перегиба графика? В чем же тогда проблема? Считаете площадь трапеции (по высоте средней линии, по существу прямоугольник), считаете площадь отсекаемого треугольника/трапеции (по условию), складываете. Такое Экселю под силу легко. Обратная задача для того же Экселя, только для функции "подогнать" - сделает на раз.
И уж коли мы с Автокадом работаем - ЛИСПом строим фигуру по списку, отсекаем лишнее, свойствами смотрим площадь. Подгонку я тоже делал - условно надо было рассчитывать уровень жидкости в переворачивающемся стакане. В общем на головоломню не сильно тянет. А вот сейчас попробуем мозги сломать, задача от NetDolphina: Есть такое классическое упражнение по creative writing: ты должен описать выбранную тобой книгу пятью предложениями. Ровно пять, не больше и не меньше, при этом категорически запрещается раскрывать суть персонажей и сюжетные детали. Мне тут одна девочка выдала истинный шедевр жанра: Цитата:
|
|||
|
||||
НЛО Регистрация: 09.07.2007
Тутошние мы.
Сообщений: 6,078
|
Цитата:
Цитата:
|
|||
|
||||
Сообщений: n/a
|
Ильнур, есть ведь общий случай. И площади трапеций/треугольников - вещь непостоянная - при положении линии полностью над куском графика зависимость между её положением и площадью под ней одна. Как только она опускается до треугольника - зависимость уже другая.
Всё это легко в отдельном случае и для конкретного графика, в общем случае зависимость Положение_Красной_Линии(площадь под ней) весьма заковыристая штука. |
|||
|
||||
КМ (+КМД), КЖ (КЖФ) Регистрация: 30.05.2007
Далече
Сообщений: 25,086
|
Цитата:
А тут, повторюсь, тривиальная задачка, арифметического уровня. Исходная формула: S=0,5*a*b. Далее - суммирование. Дмитррр, твоя задача банальна, и решение получается путем рутинного суммирования. Как тут один говорил, удочку дали, а уж рыбу сам...
__________________
Воскресе |
|||
|
||||
Вода - моя работа Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639
|
Я ещё студентом писал программу, которая считала площадь под графиком разбивая её на прямоугольники минимальной ширины и складывая их площади, работала быстро и точно, кстати. Всё, что просил Дмитррр сделала бы легко.
__________________
Нерешаемых проблем не бывает. |
|||
|
||||||
Сообщений: n/a
|
Цитата:
Цитата:
Дай мне формулу нахождения такого y, при котором площадь под ним на отрезке [0;4] = S. ----- добавлено через ~2 мин. ----- Цитата:
Решение обратной через прямую - это и есть метод последовательного приближения. Задаемся случайным y, вычисляем площадь, если слишком много - смотрим площадь от y/2 и т.д. НО: Цитата:
Цитата:
|
|||||
|
||||
НЛО Регистрация: 09.07.2007
Тутошние мы.
Сообщений: 6,078
|
Цитата:
И как программу научить это всё обрабатывать - тот ещё вопрос. Пока у меня лишь смутная теория о том, что надо: - во-первых, научить программу для каждого конкретного случая составлять аналитическую функцию зависимости площади от положения кривой, - во-вторых, научить программу выражать игрек из этого уравнения. И то, и то весьма не тривиальные задачи. Цитата:
Цитата:
Молодец, что писал. Подскажи, как получить точное решение второй задачи. |
|||
|
||||
Вода - моя работа Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639
|
В общем случае, не зная заранее закономерностей, обратная задача решается только методом последовательных приближений, но раз у тебя функция с известными экстремумами и линейными участками, то можно заставить программу пробежаться по экстремумам, найти два, между которыми лежит искомая площадь, ответ обратной задачи вычислить линейным уравнением.
__________________
Нерешаемых проблем не бывает. |
|||
|
||||
Сообщений: n/a
|
|
|||
|
||||
НЛО Регистрация: 09.07.2007
Тутошние мы.
Сообщений: 6,078
|
Цитата:
Код не малый получится, но считать должно быстрее, чем последовательными приближениями. А главное, точно. |
|||
|
||||
Вода - моя работа Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639
|
Цитата:
Цитата:
__________________
Нерешаемых проблем не бывает. |
|||