Remez Algoritması


14

Remez algoritması, minimaks normunda bir polinom tarafından bir işleve yaklaşık olarak yaklaşmak için iyi bilinen bir yinelemeli rutindir. Ancak, Nick Trefethen'in [1] söylediği gibi:

Bu uygulamaların çoğu uzun yıllar öncesine dayanmaktadır ve aslında, çoğu yukarıda belirtildiği gibi en iyi genel yaklaşım problemini değil, farklı değişkenler veya dijital filtreleme içeren varyantları çözmektedir. Dolaşımda birkaç bilgisayar programı daha bulunabilir, ancak genel olarak, en iyi yaklaşımları hesaplamak için şu anda yaygın olarak kullanılan bir program olmadığı görülmektedir.

Minimax çözümünü, örneğin Matlab ve [-1, 1] 'deki Runge işlevine uygulanan ücretsiz CVX araç kutusunu kullanarak en küçük kareler veya dışbükey optimizasyon uygulayarak da hesaplayabilirsiniz:

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 polinomları ile 0.1090yaklaşımın bir minimum normu vardır, buradaki bu yaklaşım 0.0654, Matlab chebfunaraç kutusundaki Remez algoritması ile hesaplanan minimum değere ulaşır .

Minimax çözümünü bir optimizasyon çözücü ile daha hızlı ve daha doğru hesaplayabiliyorsanız, daha karmaşık Remez algoritmasını uygulamanın herhangi bir avantajı var mı? Bazı zor problemler veya test vakaları hakkında bu iki yaklaşımı karşılaştıran raporlar / makaleler var mı?

-
[1] R. Pachon ve LN Trefethen. BIT Sayısal Matematik (2008) Vol. 46.

Yanıtlar:


4

"Doğru" cevap, yaklaşık olarak neye ihtiyacınız olduğuna bağlıdır. Bazı hatalar için en iyi yaklaşıma gerçekten ihtiyacınız var mı? Yoksa sadece iyi bir yaklaşım mı? Ya da sadece minmax anlamında iyi bir yaklaşım?

Nick Trefethen geçtiğimiz günlerde Remez yaklaşımının kötü bir fikir olduğu güzel bir örnek verdi , çünkü tüm aralıktaki ortalama hatadan bağımsız olarak maksimum hatayı en aza indirir, bu da istediğiniz şey olmayabilir. Tabii ki, maksimum hata büyük olabilir, ancak bu pürüzsüz işlevler için sınırlıdır.

Güncelleme

Aşağıdaki yorumlardaki tartışmanın ardından, CVX Toolbox'ı indirdim ve Chebfun Remez algoritması ile doğrudan bir karşılaştırma yaptım (feragatname: Chebfun geliştirme ekibinin bir parçasıyım):

% 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' );

Çok fazla çıktıdan sonra, Matlab 2012a, CVX sürüm 1.22 ve Chebfun'un en yeni SVN Anlık Görüntüsü ile dizüstü bilgisayarımda:

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

Hatayı fölçmek için kullanılan Chebfun'un 15 haneli olduğunu unutmayın. Bu yüzden Chebfun'dan Remez iki kat daha uzun sürüyor, ancak daha küçük bir küresel hata alıyor. CVX'in optimizasyon için derlenmiş kod kullandığı, Chebfun ise% 100 yerli Matlab olduğu belirtilmelidir. Minimum hatası, 0.00654'ızgaradaki' minimum hatadır, o ızgara dışında, hata olabilir 0.00659. Izgara boyutunu m = 1001arttırıyorum

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

yani neredeyse aynı hızda, ancak ayrık optimizasyon dördüncü ondalık basamağa göre hala daha kötü. Son olarak, daha da ızgara boyutunu koymalarına m = 10001I get

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

yani ayrık optimizasyon şimdi on kattan daha yavaştır ve altıncı basamaktan itibaren hala daha kötüdür.

Sonuç olarak, Remez size küresel olarak en iyi sonucu verecektir. Ayrık analog küçük ızgaralarda hızlı olsa da, doğru sonuç vermeyecektir.


Ve N. Trefethen de aynı şeyi vurguluyordu ve alıntıladığım makalede de benzer bir örnek verdi. Soru en iyi yaklaşımla ilgili değildi , ama: Aynı sonucu makul bir dışbükey çözücü ile alabiliyorsanız Remez algoritmasının (günümüzde) avantajı nedir ?
Hans W.Mar

1
@HansWerner, özür dilerim, sorunuzu yanlış okudum. Dışbükey çözücünüz aynı sonucu vermiyor, en azından tüm rakamlara değil. Dışbükey kodunuzu doğru bir şekilde anlarsam, ayrı bir nokta kümesi üzerindeki maksimum hatayı en aza indirirsiniz. Bu, küresel maksimum hatayı minimize etmek için iyi bir yaklaşımdır - ama aynı değildir -.
Pedro

Bu durumda dışbükey çözücü daha iyi bir sonuç verdi . Bir düşünün, Remez algoritması bir optimizasyon rutinine oldukça benzeyen yinelemeli bir prosedürdür ve kesin bir sonuç da döndürmez. Yukarıdaki somut durumda, optimizasyonun çözümü, bildiğim en iyi Remez uygulamasının sonucundan daha iyi, yani genel olarak daha küçük bir maksimum norma sahipti. Soru hala açık .
Hans

@HansWerner, dışbükey çözücü ile elde edilen çözümün maksimum hatasını nasıl ölçtünüz? Remez algoritması, chebfunmakine hassasiyetine (bir anlamda) minimum ulaşılana kadar tekrarlanmalıdır.
Pedro

Şart değil; 'tol' (göreceli tolerans) veya 'maxiter' chebfun/remezgibi seçenekler vardır, ancak her türlü optimizasyon çözücüsü için benzer seçenekler vardır. Bir şekilde söylenebilir ki, Remez belirli bir görev için uzmanlaşmış bir optimizasyon rutini. Ve soru şu: Genel amaçlı çözücüler yakalandı mı ve böyle uzman bir çözücüye artık gerek yok mu? Tabii ki yanlış olabilirim.
Hans W.Mar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.