На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> кусочная функция на отрезке + табулирование + поиск экстремумов
    Всем хай! Сходу к делу!

    Нашел в сети такую задачку.
    Дана функция на отрезке (см.рис.). Вводятся границы отрезка [a ... b] и n - число шагов табулирования(n > 80). Нужно протабулировать ф-цию на этом отрезке [a; b] и вывести результат в таком виде (табличном):

    --------------------------------------------------------
    | Текущее значение х | Значение функции | Экстремум |
    --------------------------------------------------------

    3-я колонка предназначена только для вывода МИН/МАКС значения функции.
    Прикреплённая картинка
    Прикреплённая картинка

    - конец условия -


    1. область определения ф-ции: [-1; 1]
    2. все элементы графика составляют полуокружности (половина окружности единичного радиуса)
    3.
    если x = [0; 4] ИЛИ x = [8; 12], то y = +(1 - x^2)
    если x = [4; 8], то y = -(1 - x^2)
    *правда в формулах не просто х нужно подставлять, а учитывать сдвиг окружности (x^2 + y^2 = 1^2) вдоль оси Ох.

    ГЛАВНАЯ ПРОБЛЕМА с выводом/поиском экстремальных значений функции.
    1. хоть предельные значения заданной функции = +-1 нет гарантий, что табулирование пройдет строго через них, может пройти через окрестность
    2. как я понимаю, периодичность появления, например, максимумов, не совпадает с периодичностью полуокружностей (№1, №2, №5 или №6). Из этого вытекает такое заключение, что НЕВОЗМОЖНО узнать максимумы до тех пор, пока не будет проведен анализ всего отрезка [a; b]?? Это приводит к тому, что ЗА ОДИН ЦИКЛ результирующую таблицу НЕВОЗМОЖНО построить? Вообще, это задача похожа, например, на задачу, когда нужно вывести на экран все максимальные элементы массива (за 1 цикл такое не делается, но за 1 цикл можно было бы узнать ОБЩЕЕ кол-во максимальных, без печати).
    1-ый вопрос: невозможно ли построить результирующую таблицу ЗА 1 ЦИКЛ по отрезку [a; b]??
    2-й вопрос: все эти окружности получаются парал.переносом окружности x^2 + y^2 = 1 вдоль оси Ох. Как оптимально обращаться к нужной окружности (их всего 6 штук) при текущем х?
    Сообщение отредактировано: FasterHarder -
      Цитата FasterHarder @
      1. область определения ф-ции: [-1; 1]

      А график прорисован в [0, 12].

      Цитата FasterHarder @
      нет гарантий, что табулирование пройдет строго через них

      А когда это таблично заданная недискретная функция давала точно значение экстремума?

      Цитата FasterHarder @
      1-ый вопрос: невозможно ли построить результирующую таблицу ЗА 1 ЦИКЛ по отрезку [a; b]??

      Запросто. Формула есть, считать умеем...

      Цитата FasterHarder @
      2-й вопрос: все эти окружности получаются парал.переносом окружности x^2 + y^2 = 1 вдоль оси Ох. Как оптимально обращаться к нужной окружности (их всего 6 штук) при текущем х?

      Параметризовать.
        Цитата Akina @
        А график прорисован в [0, 12].

        ок, попутал я здесь, конечно с областью допустимых значений ф-ции

        Цитата Akina @
        Запросто. Формула есть, считать умеем...

        смотря, что считать. Для данного случая я не вижу такой возможности...)
          Надо обозначить всего лишь отрезки, где функция положительна или отрицательна. Т.е. нужна функция типа

          y([0..4])=m
          y([4..8])=n
          y([8..12])=m
          ...

          Это элементарно

          y=(x DIV 4) MOD 2

          имеет именно такой вид, m=0, n=1.

          Аналогично размечаются и центры полуокружностей - по формуле

          xo = (x DIV 2) * 2 + 1
          Сообщение отредактировано: Akina -
            Akina, твой предыдущий пост описывает, как я понял, параметризацию окружностей (определение центров), это все хорошо, но ГЛАВНАЯ проблема ведь не эта, а нахождение экстремальных за 1 проход табулирования...

            еще раз о проблеме, на др.примере: дан одномерный массив целых чисел, нужно вывести на экран ВСЕ МАКСИМАЛЬНЫЕ И МИНИМАЛЬНЫЕ элементы. Вспомог.памяти использовать нельзя.
              Цитата FasterHarder @
              дан одномерный массив целых чисел, нужно вывести на экран ВСЕ МАКСИМАЛЬНЫЕ И МИНИМАЛЬНЫЕ элементы.

              Ну так это ж типичный поиск локального экстремума. Если предыдущий больше текущего и пред-предыдущего - вывести. Ну и по-любому вывести первый и последний - они тоже локальные экстремумы. Три переменные под "доп. память" не подпадают же ж?
              Сообщение отредактировано: Akina -
                в общем, спустя почти год, пришлось вернуться к данной задаче и ДОБИТЬ ее
                все вроде получилось

                т к функция периодическая, то все переносил для анализа в самый первый период положительный
                поиск минимального и максимального значения были реализованы предобработкой ДО начала табулирования, т к на лету нереально понять, что это макс/мин, пока не проверены все точки функции

                в итоге в прожке получилось под 240 строк кода и около 8-10 функций
                Скрытый текст

                у меня в загашнике лежит несколько сотен тысяч нерешенных задач, по моим прикидкам мне потребуется порядка 33-37 миллионов лет, чтобы с ними разобраться :yes:. Дорогу осилит идущий! Проблема в том, что еще идти желательно в нужном направлении))
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0280 ]   [ 18 queries used ]   [ Generated: 19.03.24, 09:59 GMT ]