레 메즈 알고리즘


14

Remez 알고리즘은 미니 맥스 표준에서 다항식으로 함수를 근사화하는 잘 알려진 반복 루틴입니다. 그러나 Nick Trefethen [1]은 다음과 같이 말합니다.

이러한 [구현]의 대부분은 수년 전으로 거슬러 올라갑니다. 사실, 대부분은 위에서 언급 한 일반적인 최상의 근사 문제를 해결하지 못하지만 이산 변수 또는 디지털 필터링과 관련된 변형을 해결합니다. 순환 할 수있는 다른 컴퓨터 프로그램이 몇 개 있지만 전체적으로 현재 근사값을 계산하는 데 널리 사용되는 프로그램이없는 것 같습니다.

예를 들어 Matlab과 [-1, 1]의 Runge 기능에 적용된 무료 CVX 도구 상자를 사용하여 최소 제곱 또는 볼록 최적화를 적용하여 minimax 솔루션을 계산할 수도 있습니다.

m = 101; n = 11;            % 101 points, polynomial of degree 10
xi = linspace(-1, 1, m);    % equidistant points in [-1, 1]
ri = 1 ./ (1+(5*xi).^2);    % Runge function

tic                         % p is the polynomial of degree (n-1)
cvx_begin                   % minimize the distance in all points
    variable p(n);
    minimize( max(abs(polyval(p, xi) - ri)) );
cvx_end
toc                         % 0.17 sec for Matlab, CVX and SeDuMi

Chebyshev 다항식을 사용한 근사값 0.1090은 최소값이지만,이 방법 0.0654은 Matlab chebfun도구 상자 의 Remez 알고리즘으로 계산되는 값과 같은 최소값에 도달합니다 .

최적화 솔버로 minimax 솔루션을 더 빠르고 정확하게 계산할 수 있다면 더 복잡한 Remez 알고리즘을 적용 할 때 어떤 이점이 있습니까? 어려운 문제 나 테스트 사례에 대해이 두 가지 접근 방식을 비교 한 보고서 / 문서가 있습니까?

-
[1] R. Pachon과 LN Trefethen. BIT Numerical Mathematics (2008) Vol. 46.

답변:


4

"올바른"답변은 근사치에 따라 달라집니다. 일부 오차 한계에 대해 최상의 근사값이 정말로 필요합니까? 아니면 그냥 근사치? 아니면 minmax 의미에서 좋은 근사치입니까?

Nick Trefethen은 최근 전체 간격에 대한 평균 오차에 관계없이 최대 오차를 최소화하므로 Remez 근사법이 좋지 않은 좋은 예를 제시했습니다. 원하는 것이 아닐 수도 있습니다. 물론 최대 오차는 클 수 있지만 원활한 기능을 위해 제한됩니다.

최신 정보

아래 의견에 대한 논의에 이어 CVX Toolbox를 다운로드하고 Chebfun Remez 알고리즘 (면책 조항 : Chebfun 개발 팀의 일원)과 직접 비교했습니다.

% Do the convex optimization bit.
m = 101; n = 11;            % 101 points, polynomial of degree 10
xi = linspace(-1, 1, m);    % equidistant points in [-1, 1]
ri = 1 ./ (1+(5*xi).^2);    % Runge function

tic                         % p is the polynomial of degree (n-1)
cvx_begin                   % minimize the distance in all points
    variable p(n);
    minimize( max(abs(polyval(p, xi) - ri)) );
cvx_end
toc_or = toc                % 0.17 sec for Matlab, CVX and SeDuMi

% Extract a Chebfun from the result
x = chebfun( [-1,1] );
A = [ chebfun(1) , x ];
for k=3:n, A(:,k) = A(:,k-1).*x; end
or = A * flipud(p)

% Make a chebfun of Runge's function
f = chebfun( @(x) 1 ./ ( 1 + 25*x.^2 ) )

% Get the best approximation using Remez
tic, cr = remez( f , 10 ); toc_cr = toc

% Get the maximum error in each case
fprintf( 'maximum error of convex optimization: %e (%f s)\n' , norm( f - or , inf ) , toc_or );
fprintf( 'maximum error of chebfun remez: %e (%f s)\n' , norm( f - cr , inf ) , toc_cr );

% Plot the two error curves
plot( [ f - cr , f - or ] );
legend( 'chebfun remez' , 'convex optimization' );

많은 출력을 한 후 Matlab 2012a, CVX 버전 1.22 및 Chebfun의 최신 SVN Snapshot을 사용하는 랩톱에서 얻을 수 있습니다.

maximum error of convex optimization: 6.665479e-02 (0.138933 s)
maximum error of chebfun remez: 6.592293e-02 (0.309443 s)

f오류를 측정하는 데 사용 된 Chebfun 은 15 자리까지 정확합니다. 따라서 Chebfun의 Remez는 두 배의 시간이 걸리지 만 더 작은 전역 오류가 발생합니다. CVX는 최적화를 위해 컴파일 된 코드를 사용하는 반면, Chebfun은 100 % 네이티브 Matlab입니다. 의 최소 ​​오차는 0.00654'그리드상의'최소 오차이며, 해당 그리드의 최대 오차는 최대 0.00659입니다. 에 격자 크기를 늘리면 m = 1001I get 및

maximum error of convex optimization: 6.594361e-02 (0.272887 s)
maximum error of chebfun remez: 6.592293e-02 (0.319717 s)

즉, 거의 같은 속도이지만 이산 최적화는 여전히 소수점 이하 네 번째 자리에서 나빠집니다. 마지막에 더 격자 크기를 ncreasing m = 10001나는 것은 얻을

maximum error of convex optimization: 6.592300e-02 (5.177657 s)
maximum error of chebfun remez: 6.592293e-02 (0.312316 s)

즉, 이산 최적화는 이제 10 배 이상 느리고 6 번째 자리에서 여전히 더 나쁩니다.

결론은 Remez가 전 세계적으로 최적의 결과를 얻을 수 있다는 것입니다. 이산 아날로그는 작은 그리드에서 빠를 수 있지만 올바른 결과를 제공하지는 않습니다.


그리고 N. Trefethen도 같은 것을 강조하고 제가 인용 한 기사에서 비슷한 예를 들었습니다. 질문이었다 되지 최고의 근사치에 대해,하지만 : Remez 알고리즘의 장점은 무엇입니까 (요즘) 는 합리적인 볼록 솔버와 같은 결과를 얻을 수 있다면 ?
Hans W.

1
@ HansWerner, 죄송합니다, 귀하의 질문을 잘못 읽었습니다. 볼록 솔버는 적어도 모든 숫자에 대해 동일한 결과를 제공하지는 않습니다. 볼록 코드를 올바르게 이해하면 개별 포인트 세트에 대한 최대 오류를 최소화하는 것입니다. 이는 전역 최대 오류를 최소화하는 것과 비슷하지만 동일하지는 않습니다.
Pedro

이 경우 볼록 솔버가 더 나은 결과를 냈습니다. Remez 알고리즘은 반복 절차이며 최적화 루틴과 매우 유사하며 정확한 결과도 반환하지 않습니다. 위의 구체적인 경우, 최적화의 솔루션이 내가 아는 최고의 Remez 구현 결과보다 더 좋았습니다. 질문은 여전히 ​​열려 있습니다.
Hans W.

@ HansWerner, 볼록 솔버로 얻은 솔루션의 최대 오차를 어떻게 측정 했습니까? Remez 알고리즘은 chebfun기계 정밀도 (어떤 의미에서)에 도달 할 때까지 반복되어야합니다.
Pedro

반드시 그런 것은 아닙니다. 에 대한 'tol'(상대 공차) 또는 'maxiter' chebfun/remez와 같은 옵션이 있지만 모든 종류의 최적화 솔버에 대해 유사한 옵션이 있습니다. Remez는 특정 작업에 특화된 최적화 루틴입니다. 그리고 문제는 : 범용 솔버가 붙잡히고 더 이상 그러한 전문 솔버가 필요하지 않습니까? 물론 틀릴 ​​수도 있습니다.
Hans W.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.