Смешивание двух функций, где одна обратная - PullRequest
3 голосов
/ 26 августа 2011

Позвольте мне сначала объяснить идею. Актуальный математический вопрос ниже скриншотов. Для музыкальных целей я строю алгоритм канавки, в котором позиции события переводятся математической функцией F (X). Позиции нормализуются внутри диапазона канавок, поэтому я в основном имею дело со значениями от нуля до единицы (что облегчает формирование кривых канавок - единственное ограничение - x '> = 0). Этот алгоритм канавки принимает любую позицию события, а также работает, фильтруя статические заметки из структуры данных, такой как дорожка заметки на временной шкале. Для фильтрации событий в определенном диапазоне (размер звукового блока) мне нужна функция обратной канавки, чтобы найти ноты в дорожке и преобразовать их в пространство канавки. Все идет нормально. Это работает!

enter image description here

enter image description here

Короче говоря: я использую обратную функцию для того факта, что она зеркально отображена в (y = x). Так что я могу подключить значение х и получить у. Этот y, очевидно, может быть подключен к обратной функции, чтобы снова получить первый x.

Проблема: теперь я хочу иметь возможность смешать канавку с другой, но обычный линейный код (подсказка подсказки) не ведет себя так, как я ожидал. Чтобы было проще, я сначала попытался смешаться с y = x.

B(x)=alpha*F(x) + (1-alpha)*x;
iB(x)=alpha*iF(x) + (1-alpha)*x;

Для альфа = 1 мы получаем полную кривую. Для альфа = 0 мы получаем прямую линию. Но для альфа между 0 и 1 B (x) и iB (x) больше не отражаются (близко, но недостаточно), F (x) и iF (x) все еще отражаются.

Есть ли решение для этого (помимо квантования кривой на отрезки)? Любой предмет, на который я должен обратить внимание?

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Эта проблема вообще не может быть решена алгебраически.

Рассмотрим, например,

y = 2e^x (обратный x = log 0.5y)

и

y = 2x (обратный x = 0.5y).

Смешивание их вместе с весом 0,5 дает y = e^x+x, и хорошо известно, что здесь невозможно решить для x, используя только элементарные функции, даже если инверсию каждой части было легко найти.

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

1 голос
/ 26 августа 2011

вы объединяете две функции, f (x) и g (x), так что y = a f (x) + (1-a) g (x). и учитывая некоторые y, a, f и g, вы хотите найти х. по крайней мере, это то, что я понимаю.

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

вы хотите найти x такой, что y = a f (x) + (1-a) g (x). другими словами, когда 0 = a f (x) + (1-a) g (x) - y.

так что давайте определим r (x) = a f (x) + (1-a) g (x) - y и найдем «ноль» этого. начните с предположения в середине, x_0 = 0,5. рассчитать x_1 = x_0 - r (x_0) / r '(x_0). повторение. если вам повезет, это быстро сойдет (если нет, вы можете подумать об определении функций относительно y = x, что вы, похоже, уже делаете, и попробовать еще раз).

см. Википедия

...