Какие методы аппроксимации существуют для функции квадратного суперкорня?


17

Мне нужно реализовать приближение к обратному xx , т.е. функцию квадратного суперкорня (ssrt). Например, ssrt(2)1.56 означает, что 1.561.562 . Меня не так интересует какая-либо конкретная точность / битовая глубина, как понимание того, какие у меня варианты, в отличие от более простых подходов с использованием степенных рядов.

Wolfram Alpha дает хорошее символическое решение в терминах W-функции Ламберта (т. ln(x)/W(ln(x)) ). Википедия дает такую же формулу , как и эквивалент eW(ln(x)) . Учитывая, что имеется достаточное количество информации о вычислениях W(x) [1] [2], технически это все, что нужно для реализации чего-либодля различных требований. Я знаю, по крайней мере, две книги, в которых подробно описывается аппроксимация ln(x) [3] [4], поэтому есть даже много возможностей для оптимизации в этом направлении.

Однако у меня есть два вопроса:

  1. Были ли где-нибудь опубликованы методы аппроксимации, специфичные для этой функции?
  2. Идет ли оно под другим именем, кроме «квадратный супер-корень», что немного облегчит поиск ссылок?

Википедия / Google опубликовали некоторые ссылки, посвященные более общим функциям «тетратации», которые включают ssrt(x) в качестве особого случая, но большинство из них, похоже, более приспособлены для изучения / определения общих случаев.

-

  1. Corless, R .; Gonnet, G .; Заяц, Д .; Джеффри Д. Кнут, Дональд (1996), «О функции Ламберта W» http://www.apmaths.uwo.ca/~djeffrey/Offprints/W-adv-cm.pdf
  2. Электронная библиотека математических функций . http://dlmf.nist.gov/4.13
  3. Crenshaw, Jack W. (2000), Math Toolkit для программирования в реальном времени.
  4. Харт, Джон Ф. (1978), Компьютерные аппроксимации.
  5. Chapeau-Blondeau, F. and Monir, A. (2002). Численная оценка W-функции Ламберта и ее применение для генерации обобщенного гауссовского шума с показателем 1/2. Операции IEEE по обработке сигналов 50, 2160-2165. http://www.istia.univ-angers.fr/~chapeau/papers/lambertw.pdf
  6. Минеро, Пол. Быстрая Приблизительная Ламберта W . http://www.machinedlearnings.com/2011/07/fast-approximate-lambert-w.html

-

Обновить

После этого еще несколько исследований , в течение последних нескольких дней, я до сих пор не нашел своего рода практических «Кренего стиль» лечение S S г т ( х ) я надеялся на, но я нашел новый Ссылка стоит документировать здесь. На третьей странице в [ 5 ] есть раздел, озаглавленный «Быстрое приближение», в котором подробно рассказывается о приближении W ( x ) в контексте генерации шума. Интересно отметить, что плотность вероятности «гауссовского шума с показателем 1/2» [в статье] выглядит поразительно похожей на гистограмму в ответе Келленджба на[3]ssrt(x)[5]W(x)этот вопрос об обнаружении отсечения сигнала .

Кроме того, ссылка, предоставленная rwong в комментариях является отличным ресурсом для фактической реализации W ( x ) , и она даже ссылается на лицензированный проект BSD автора под названием fastapprox , который включает в себя описанную реализацию.[6]W(x)



2
Я спрашивал об этом в Meta, так как поле комментариев не предназначено для расширенных обсуждений. Пожалуйста, предложите, как мы должны решить эти вопросы здесь: Есть вопросы по численному анализу по теме?

@datageist - Первоначальный вывод из мета-вопроса состоял в том, что если вы хотите использовать этот численный анализ для обработки данных DSP, то это по теме. Если нет, то нет. Как это относится к DSP?
Кевин Вермеер

2
@Kevin Это возникло в контексте разработки аудиоэффекта.
Datageist

1
Всякий раз, когда мне нужно написать подпрограмму для функции Ламберта, я обычно использую приближения, приведенные в этой статье, а затем полирую с помощью Ньютона-Рафсона, Галлея или любого другого итерационного метода. Вы можете адаптировать этот подход для инвертирования ...xx

Ответы:


6

Некоторые числовые удары в темноте дали следующий результат для итеративного подхода:

Мы ищем решение y = f (x), где y ^ y = x.

ylny=lnx

y=g(x,y)=elnxy

Значение для является фиксированной точкой вышеприведенного уравнения, и эмпирически оно кажется сходящимся для некоторых значений x , но для больших значений x оно колеблется или расходится.yxx

Затем я попробовал подход, подобный итеративному квадратному корню Ньютона:

y=yprevious+y2=y+elnxy2

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

Это кажется сходящимся, но очень медленно в нижнем конце (около x m i n = ( 1x )xmin=(1e)1e

Это также выглядит, как хорошее первоначальное предположение: .y0=ln(x)+1

Поэтому я подумал, что, может быть, есть более подходящее решение:

для некоторого значения a , являющегося функцией x .y=(1a)×y+a×g(x,y)ax

Тогда я нашел что-то интересное.

Если я получу сходящийся ответ из вышеприведенного подхода для y y = x , а затем вычислю y 2 = g ( x , y + ϵ ) = e ln ( x )yyy=x , этовыглядит так,как будтоy2-y= приблизительноϵ×(-ln(y)).... например, если у нас было предположение, чтоy1=y+ϵдля некоторого неизвестногоϵ, и вычислилиy2=g(x,y1), то(y2-y)ϵ×(-ln(y2=g(x,y+ϵ)=eln(x)y+ϵy2yϵ×(ln(y))y1=y+ϵϵy2=g(x,y1) . (Просто чтобы уточнить, у меня нет анализа, чтобы подтвердить это, но цифры просто выпали из какой-то численной оценки, которую я выполнил.)(y2y)ϵ×(ln(y))=(y1y)×(ln(y))

Решите для линейных членов в , и вы получите y = y 2 + ln ( y ) × y 1yy=y2+ln(y)×y11+ln(y)ln(y1)ln(y)

y[n+1]=g(x,y[n])+ln(y[n])×y[n]1+ln(y[n])=eln(x)y[n]+ln(y[n])×y[n]1+ln(y[n])

y=1+ln(x)

(Кто-то может показать, что это в некотором роде эквивалентно Ньютон-Рафсону, но я думаю, что это за пределами моих возможностей.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.