Блог пользователя evlinkov

Автор evlinkov, 11 лет назад, По-русски

Всем привет, интересует такая задача : Даны две ф-ции F1(x) и F2(x) нужно найти все корни уравнения : F1(x)=F2(x), с точностью до некоторого эпсилонта (в функциях могут содержаться : логарифм, корень, возведение в степень) .

  • Проголосовать: нравится
  • -9
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится -22 Проголосовать: не нравится

Вроде можно перенести F2(x) влево и запустить бинарный поиск.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    а как он будет работать ? какое условие присваивания центра влево или вправо ?

    • »
      »
      »
      11 лет назад, # ^ |
      Rev. 4   Проголосовать: нравится -22 Проголосовать: не нравится

      В правке неверное решение.

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Возможно, глупый вопрос, но все же как узнать, что корней нет?

        • »
          »
          »
          »
          »
          11 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится -6 Проголосовать: не нравится

          Ну я исходил из предположения, что корни всегда есть :) Думаю это делается так (не уверен, что этого достаточно):

          1. На каждом шагу обе функции должны быть определены.

          2. После алгоритма проверить, что abs(F1(l) - F2(l)) < EPS

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        а если на отрезке несколько корней ?

      • »
        »
        »
        »
        11 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

        1) Не думаю, что "int" — хороший выбор для l, r, mid.
        2) Вряд ли хорошо иметь сразу l == r
        3) Данный метод найдёт только один корень, да и то, если F1(x)-F2(x) имеет разный знак в точках x=l и x=r.
        Если это практическая задача, то самое простое — построить график функции. И уже из графика брать начальные значения для l и r бинпоиска или других численных методов. Вместо графика можно использовать возможности функционального анализа.

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Это будет работать, только если (F1(x) — F2(x)) монотонная.

        • »
          »
          »
          »
          »
          11 лет назад, # ^ |
          Rev. 3   Проголосовать: нравится +5 Проголосовать: не нравится

          Нет, это работает если значение слева меньше нуля, а справа больше. Функция может и не быть монотонной, но должна быть непрерывной.

»
11 лет назад, # |
Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

Менее глупый вопрос: является ли эта задача вообще алгоритмически разрешимой? Нельзя ли в указанных функциях поставить задачу как решение заданного диофантова уравнения, если эпсилон наперед известен?

»
11 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Решай с помощью численных методов или поставь задачу более конкретно.

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Возведение в степень — натуральную? Корень — только квадратный или всех натуральных степеней? И да, сложение, вычитание, умножение и деление-то в этих функциях может быть?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    корень только квадратный, возведение в натуральную, да может быть все из перечисленного