Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2010, 15:57   #1
Маришка_Курносова
Пользователь
 
Регистрация: 01.07.2010
Сообщений: 24
По умолчанию Си/Си++ Поиск минимума кусочно-линейной функции

Задано n линейных функций:
y1=A1*x + B1;
y2=A2*x + B2;
…;
Yn=An*x + Bn;
Найти минимум «верхнюю огибающей» этих функций, то есть кусочно-линейной функции
Y(x) = max(Ai*x +Bi) -> min. Под max i. а под min х

Указание: Можно от произвольной точки двигаться точкам излома огибающей в сторону её убывания

Сама мало понимаю как это должно происходить.

P.S. буду благодарна за подсказки к решению или готовые варианты ответов, даже если не на Си. Заранее спасибо. Ребят, если можно, поскорее, пожалуйста.
Маришка_Курносова вне форума Ответить с цитированием
Старый 10.09.2010, 19:45   #2
vlad_light
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 95
По умолчанию

сплайны только начал изучать...
Значит максимум и минимум - это числа? Если да - то алгоритм такой:
Yi(X) = Ki*Xi + Bi; Xi є [Xj,X(j+1)]
1)k<0 => max(Y) = Y(Xj);
2)k>0 => max(Y) = Y(X(j+1))
для минимума - аналогично.

Входные данные:
2-мерный массив чисел {(Ki, Bi) | i є {1, 2, ... , n} }
1-мерный массив разбития отрезка X={X1, X2, ... , Xn}
на отрезки: [A=X1, X2], [X2, X3], ... , [X(n-1), Xn=B]

Последний раз редактировалось vlad_light; 10.09.2010 в 19:51.
vlad_light вне форума Ответить с цитированием
Старый 11.09.2010, 19:34   #3
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Если не учитывать пару кривых случаев, то верхняя огибающая - выпуклая вниз кусочно-линейная функция ака ямка Надо найти минимум. Самое простое - подсмотреть идею. Откуда? Как в большинстве задач оптимизации - либо из биологии, либо из физики. Тут чистая физика. Идея такая: берем самую крутую прямую(наибольший коэффициент углового наклона (a_max)) которая, очевидно, будет правым краем нашей "ямки". И пускаем по ней шарик. Куда покатится шарик? Правильно, по антиградиенту, те в сторону наибольшего убывания. Понятно, что скатится шарик на дно ямки, его- то мы и ищем. Осталость определить когда нужно менять прямые по которым катиться. Смотрим на примере для первой линии: смотрим все пересечения (1, 2 и 3). Берем либо самое правое (наибольший х) либо самое верхнее (наибольший у) кому как больше нравиться функции линейные – результат не изменится – это точка номер 1. Меняем линию и катимся по другой. Продолжаем в том же духе пока линия не будет наклонена отрицательно(a<=0), тут стоп, шарик не покатится вверх. Ответ – последняя точка пересечения.
Изображения
Тип файла: jpg lines.jpg (12.2 Кб, 87 просмотров)
coinkrsk вне форума Ответить с цитированием
Старый 10.10.2010, 11:06   #4
sult9191
 
Регистрация: 21.03.2010
Сообщений: 8
По умолчанию

coinkrsk а как можно организовать переход от одной линии на другую в программе?

Цитата:
Сообщение от coinkrsk Посмотреть сообщение
Если не учитывать пару кривых случаев, то верхняя огибающая - выпуклая вниз кусочно-линейная функция ака ямка Надо найти минимум. Самое простое - подсмотреть идею. Откуда? Как в большинстве задач оптимизации - либо из биологии, либо из физики. Тут чистая физика. Идея такая: берем самую крутую прямую(наибольший коэффициент углового наклона (a_max)) которая, очевидно, будет правым краем нашей "ямки". И пускаем по ней шарик. Куда покатится шарик? Правильно, по антиградиенту, те в сторону наибольшего убывания. Понятно, что скатится шарик на дно ямки, его- то мы и ищем. Осталость определить когда нужно менять прямые по которым катиться. Смотрим на примере для первой линии: смотрим все пересечения (1, 2 и 3). Берем либо самое правое (наибольший х) либо самое верхнее (наибольший у) кому как больше нравиться функции линейные – результат не изменится – это точка номер 1. Меняем линию и катимся по другой. Продолжаем в том же духе пока линия не будет наклонена отрицательно(a<=0), тут стоп, шарик не покатится вверх. Ответ – последняя точка пересечения.
а как можно организовать переход от одной линии на другую в программе?

Последний раз редактировалось Stilet; 10.10.2010 в 11:15.
sult9191 вне форума Ответить с цитированием
Старый 15.10.2010, 20:39   #5
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Просто. Или сложно. Как хотите.

P.S. Чем конкретнее вопрос, тем конкретнее ответ.
coinkrsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск минимума/максимума в массиве gwarthy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.01.2010 22:27
Поиск минимума в массиве. Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 17.09.2009 19:39
Поиск минимума Иринкаа Помощь студентам 1 19.11.2007 22:00
Задача на поиск минимума Stan Паскаль, Turbo Pascal, PascalABC.NET 3 25.06.2007 19:23