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

    Такой вопрос, парни и красавицы.

    Нужно построить логарифмическую шкалу.
    Если я правильно понимаю, она строится по принципу:
    Y = Ymin + Log( (Ymin+X*(Ymax-Ymin))/Ymin ) / Log(Ymax/Ymin)
    где X - нормализованная позиция на шкале (от 0 до 1); Ymin, Ymax - диапазон значений; Y - искомое значение на позиции X.

    Всё бы хорошо, но есть нюанс.
    При Ymin <= 0 эта функция не имеет решения.

    Как обычно такая задача решается?

    Скажем, нужна шкала от 0 до 1000.
    Или от -10 до +10 (чтобы она сжималась в обе стороны по мере удаления от 0, надо полагать(?)).
      Jin X, не нужно искать сложностей там, где их нет! На сколько я понял, у тебя есть две "сущности":
      1) Логарифмическая зависимость
      2) Нужная тебе шкальная система отсчета
      Вот возьми и наложи ее на твою систему отсчета. Логарифмическую зависимость ты вправе:
      1) Двигать относительно координат 0,0
      2) Масштабировать по нужному тебе коэффициенту (константе или функции)
      У тебя весь "инструментарий" есть, или я что-то не понимаю :-?
        JoeUser, не совсем понимаю тебя.
        Давай конкретно.
        Есть область значений [A; B], нужно найти значение на лог. шкале в относительной позиции X (0..1).

        К примеру, частота от 0 до 22050 Гц.
        Каково значение частоты будет в середине шкалы (X = 0.5)?
        Как это посчитать?
          Цитата Jin X @
          К примеру, частота от 0 до 22050 Гц.
          Если ты выбрал логарифмическую шкалу, будь добр, обеспечь чтобы весь диапазон значений был строго положительным.
          У тебя здесь явно слышимый человеком диапазон звуков. Зачем тебе частоты ниже 15 Гц?
          Цитата Jin X @
          Каково значение частоты будет в середине шкалы (X = 0.5)?
          Предположим, ты ограничил частоту снизу значением 22050/2048=10.7666015625.
          Тогда в середине шкалы у тебя будет значение sqrt(10.7666015625*22050) = 487.2407664113554
            Не понимаю проблемы... считаешь логарифм (раз ордината остаётся линейной - только для абсциссы), после чего обычным образом нормализуешь линейную шкалу. Для разметки реперных точек и расчёта значений (в т.ч. для расчёта абсциссы в середине шкалы) делаешь обратное преобразование (экспонента).

            Цитата Jin X @
            Всё бы хорошо, но есть нюанс.
            При Ymin <= 0 эта функция не имеет решения.

            Ну так какая может быть логарифмическая шкала для отрицательных абсцисс?
              Цитата amk @
              Если ты выбрал логарифмическую шкалу, будь добр, обеспечь чтобы весь диапазон значений был строго положительным.
              Ну я видел такие шкалы, которые начинаются с 0.
              Значит, там за 0 просто берут какое-то малое значение (типа 0.1)?

              Цитата amk @
              Предположим, ты ограничил частоту снизу значением 22050/2048=10.7666015625.
              Откуда такое значение? :huh:

              Цитата Akina @
              считаешь логарифм (раз ордината остаётся линейной - только для абсциссы), после чего обычным образом нормализуешь линейную шкалу. Для разметки реперных точек и расчёта значений (в т.ч. для расчёта абсциссы в середине шкалы) делаешь обратное преобразование (экспонента).
              Давай по-русски. Формулами и с конкретным примером :)
              Вот у меня конкретный вопрос:
              Цитата Jin X @
              К примеру, частота от 0 до 22050 Гц.
              Каково значение частоты будет в середине шкалы (X = 0.5)?
              Как это посчитать?


              Добавлено
              Цитата Akina @
              Ну так какая может быть логарифмическая шкала для отрицательных абсцисс?
              Зеркально, ИМХО. Главное разобраться, что делать с нулём :)
                Jin X, походу твой вопрос - не вопрос. Используй формулу:

                у = k + log(x+m)

                Где с помощью коэффициентов ты сможешь график двигать относительно 0:0 как тебе заблагорассудится.
                Остается вопрос "среднего" которое ты реально хочешь. Для функции у = x вполне хватит у/2 при max x.
                В случае логарифмической функции, х3, возможно следует брать интегралы. Так, чтобы интеграл от
                [0,n] == [n,max]. Но я не полностью вкуриваю что именно тебе нужно от логарифма.
                  То, что называют логарифмической шкалой, применяется только к величинам, которые не могут быть и отрицательными, и положительными. Например - шкала громкости в децибелах. И эта шкала не может включать ноль, так как ноль находится на -∞ по шкале.
                    Цитата Jin X @
                    К примеру, частота от 0 до 22050 Гц.

                    А нулевая частота возможна?
                    Ее в принципе нет, есть значения, рядом с нулем, но мы же таким на графике не будем заморачиваться.
                    Т.е. имеем формальную шкалу с нулем, но X не может в принципе принимать нулевые значения.
                    Ну и добавить проверку на ноль, чтоб возвращало результат "инфинити"
                      Цитата Black_Dragon @
                      А нулевая частота возможна?
                      Да, она называется "постоянный ток", а гармоника на нулевой частоте - "постоянная составляющая".
                      Сообщение отредактировано: Dushevny -
                        Цитата Dushevny @
                        гармоника на нулевой частоте - "постоянная составляющая".

                        А фаза?
                          Цитата Mikle @
                          А фаза?
                          А фазы нет.
                            Цитата JoeUser @
                            у = k + log(x+m)
                            Что такое k, что такое m, что такое x3, что такое n, что такое max? :lol:
                            В каких единицах это, в каких единицах x?
                            Я не понимаю вообще ничего из того, что ты написал... <_<

                            Цитата Mikle @
                            То, что называют логарифмической шкалой, применяется только к величинам, которые не могут быть и отрицательными, и положительными. Например - шкала громкости в децибелах. И эта шкала не может включать ноль, так как ноль находится на -∞ по шкале.
                            Я понимаю. Но вот, к примеру, скрин из Sound Forge.
                            Прикреплённая картинка
                            Прикреплённая картинка

                            Получается, что они вместо 0 взяли, скажем, 0.5, правильно? От балды по сути.

                            Я думал, может есть какая-то стандартная практика на эти случаи...
                              Цитата Jin X @
                              вот, к примеру, скрин из Sound Forge

                              Так тут шкала не логарифмическая, не соответствует запросу из п.1:
                              Цитата Jin X @
                              Нужно построить логарифмическую шкалу.
                                Присоединяюсь, это - не логарифмическая шкала.
                                  А какая же это шкала?
                                  Смотрите частоты, а не амплитуду. Хотя и по вертикали децибелы (но там нижний порог = -100db, а не -∞, поэтому тут вопросов нет).

                                  Добавлено
                                  Там даже опция есть "Логарифмическая шкала", она как раз включена. Отключаешь – линейная становится (равномерно частоты расположены).

                                  Добавлено
                                  Расстояния между 1-10, 10-100, 100-1000 и 1000-10000 одинаковые. А вы говорите, не логарифмическая.
                                    Цитата Jin X @
                                    Нужно построить логарифмическую шкалу.

                                    Спрашиваем у Яндекса - "Построение ЛАЧХ"
                                    Получем ссылки, например:
                                    ЛАЧХ
                                    Сообщение отредактировано: ЫукпШ -
                                      Цитата Jin X @
                                      Ну я видел такие шкалы, которые начинаются с 0.

                                      Или ноль там не на месте, или шкала кривая.

                                      Цитата Jin X @
                                      вот, к примеру, скрин из Sound Forge.

                                      На глаз там то, где по абсциссе написан ноль, значение будет приблизительно 0,4. Какого хрена - вопрос к рисователям... может, они в школе не дошли до логарифмов.

                                      Вот как оно выглядит, есть посчитать:

                                      Прикреплённая картинка
                                      Прикреплённая картинка


                                      Цитата Jin X @
                                      Вот у меня конкретный вопрос:

                                      К примеру, частота от 0 до 22050 Гц.

                                      На логарифмической шкале ноль быть не может. Только по ошибке.
                                        Понятно.
                                        Короче, если нужен ноль, просто берём вместо него некое малое значение, меньшее которого считать особого смысла нет.
                                        Всем спасибо ;)
                                          Цитата Jin X @
                                          Откуда такое значение?
                                          Человеческое ухо слышит звуки в диапазоне примерно от 16 Гц до 16 кГц. Есть люди, диапазон слышимости которых чуть шире,но не намного.

                                          Добавлено
                                          Шкала не логарифмическая. Точнее она составлена из двух шкал - правая часть логарифмическая шкала, но меньше какого-то значения она меняется на какую-то другую, м.б. линейную.
                                            Цитата Jin X @
                                            Что такое k, что такое m, что такое x3, что такое n, что такое max?
                                            В каких единицах это, в каких единицах x?
                                            Я не понимаю вообще ничего из того, что ты написал...

                                            Я тебе рассказывал, что твой логарифмический график, любой график вааще (равно как и шкалу) можно двигать относительно начала координат 0:0 с помощью коэффициентов. Обычный школьный курс математики. При этом, если ты используешь коэффициенты с операциями сложения или вычитания - то изначально график свою форму не меняет, а лишь "перемещается" по координатной сетке. Вот пример:

                                            y=ln(x)
                                            y=ln(x-1)
                                            y=ln(x)+1
                                            y=ln(x+e)+1

                                            user posted image

                                            А вот если используешь коэффициенты с операциями умножения или деления - график "деформируется". Это хорошо видно на гармонических функциях - меняется амплитуда или/и частота. Вот пример:

                                            y=sin(x)
                                            y=2sin(x) // увеличили амплитуду
                                            y=sin(2x) // увеличили частоту

                                            user posted image

                                            Таким образом, правильно задав коэффициенты, ты сможешь сформировать нужную тебе шкалу. И при этом она не перестанет иметь логарифмическую зависимость. Ну как-то так :-?
                                              JoeUser, у тебя только синее и зелёное преобразование дают логарифмическую шкалу.
                                              Главная особенность логарифмической шкалы - сдвиг по шкале на фиксированное расстояние означает увеличение величины в строго определённое число раз.
                                              Красное и чёрное преобразования таким свойством не обладают.

                                              Чаще поступают другим способом. Обрезают график логарифма в какой-то точке и заменяют ближнюю к нулю часть на касательную. После этого сдвигают график по высоте так, чтобы он начинался в нуле.
                                              После этого можно ещё достроить график до симметричного, получив линейную зависимость для малых и логарифмическую для больших значений
                                              Можно для перехода взять полиномиальную зависимость, тогда переход от логарифмической к другой зависимости получается не так заметен. Но так поступают редко.
                                                Цитата amk @
                                                JoeUser, у тебя только синее и зелёное преобразование дают логарифмическую шкалу.
                                                Главная особенность логарифмической шкалы - сдвиг по шкале на фиксированное расстояние означает увеличение величины в строго определённое число раз. Красное и чёрное преобразования таким свойством не обладают.

                                                Тут я согласен - исходя из определения "логарифмической шкалы":
                                                Цитата
                                                Логарифмический масштаб (шкала) — шкала, длина отрезка которой пропорциональна логарифму отношения величин, отмеченных на концах этого отрезка, в то время как на шкале в линейном масштабе длина отрезка пропорциональна разности величин на его концах.

                                                При этом если мы двигаем по аргументу влево-вправо - функция логарифма остается, а если двигаем вверх-вниз - это уже не функция логарифма (а логарифма плюс-минус что-то), хотя график совпадает с логарифмическим по форме.

                                                Добавлено
                                                amk, Упс ... ты же хотел сказать - синее и черное? У зеленого добавляется к логарифму единица по-любому, а это уже не соответствует закономерности ln(x)?
                                                  Цитата JoeUser @
                                                  amk, Упс ... ты же хотел сказать - синее и черное?
                                                  Нет, именно синее и зелёное. У зелёного добавляемая вне логарифма единица не влияет на приращение шкалы.
                                                  У чёрного единица вычитается из аргумента. Пусть логарифм будет по основанию два. При увеличении x от 2 до 3 (в полтора раза), y увеличивается от 0 до 1 (на 1). При увеличении x от 3 до 4.5 y увеличивается от 1 до log23.5 (немного меньше 2), то есть менее чем на 1. Ну а при уменьшении x с 1.5 до 1, у уменьшается с -1 до -∞ (изменение совсем не похоже на 1)
                                                  Сообщение отредактировано: amk -
                                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                  0 пользователей:


                                                  Рейтинг@Mail.ru
                                                  [ Script execution time: 0,0802 ]   [ 19 queries used ]   [ Generated: 2.05.24, 10:01 GMT ]