อัลกอริทึม Remez


14

อัลกอริทึม Remez เป็นกิจวัตรซ้ำที่รู้จักกันดีเพื่อประมาณฟังก์ชั่นโดยพหุนามในบรรทัดฐาน minimax แต่อย่างที่ Nick Trefethen [1] พูดถึง:

ส่วนใหญ่ของ [การใช้งาน] ย้อนกลับไปหลายปีและในความเป็นจริงส่วนใหญ่ของพวกเขาไม่ได้แก้ปัญหาการประมาณทั่วไปที่ดีที่สุดตามที่ได้กล่าวไว้ข้างต้น แต่ตัวแปรที่เกี่ยวข้องกับตัวแปรแยกหรือการกรองดิจิทัล เราสามารถค้นหาโปรแกรมคอมพิวเตอร์อื่น ๆ ได้ไม่กี่โปรแกรม แต่โดยรวมแล้วดูเหมือนว่าไม่มีโปรแกรมที่ใช้กันอย่างแพร่หลายในปัจจุบันสำหรับการคำนวณที่ดีที่สุด

เราสามารถคำนวณวิธีการแก้ปัญหาแบบ minimax ได้เช่นกันโดยใช้การเพิ่มประสิทธิภาพกำลังสองน้อยที่สุดหรือการเพิ่มประสิทธิภาพนูนเช่นการใช้ Matlab และกล่องเครื่องมือ CVX ฟรีที่ใช้กับฟังก์ชัน Runge ใน [-1, 1]:

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ค่าเดียวกันกับที่คำนวณด้วยอัลกอริทึม Remez ในchebfunกล่องเครื่องมือMatlab

มีข้อได้เปรียบอะไรบ้างในการใช้อัลกอริธึม Remez ที่ซับซ้อนกว่านี้หากคุณสามารถคำนวณโซลูชัน minimax ได้เร็วขึ้นและแม่นยำยิ่งขึ้นด้วยตัวแก้ไขการเพิ่มประสิทธิภาพ มีรายงาน / บทความใดบ้างที่เปรียบเทียบทั้งสองแนวทางนี้ในปัญหาที่ยากหรือการทดสอบกรณี?

-
[1] R. Pachon และ LN Trefethen BIT เชิงตัวเลขคณิตศาสตร์ (2008) ฉบับที่ 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 และ SVN Snapshot ล่าสุดของ Chebfun:

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

โปรดทราบว่า Chebfun ที่fใช้ในการวัดข้อผิดพลาดนั้นมีความถูกต้องถึง 15 หลัก ดังนั้น Remez ของ Chebfun ใช้เวลานานเป็นสองเท่า แต่ได้รับข้อผิดพลาดระดับโลกน้อยลง มันควรจะชี้ให้เห็นว่า CVX ใช้รหัสที่คอมไพล์เพื่อการปรับให้เหมาะสมส่วน Chebfun นั้นเป็น Matlab ดั้งเดิม 100% ข้อผิดพลาดอย่างน้อย0.00654เป็นข้อผิดพลาดขั้นต่ำ 'ในตาราง' 0.00659นอกตารางที่ข้อผิดพลาดจะขึ้นอยู่กับ เพิ่มขนาดกริดให้เป็นขนาดที่m = 1001ฉันจะได้รับ

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)

นั่นคือการเพิ่มประสิทธิภาพโดยสิ้นเชิงตอนนี้ช้ากว่าสิบครั้งและยังแย่กว่าตัวเลขหลักที่หก

บรรทัดล่างคือ Remez จะให้ผลลัพธ์ที่ดีที่สุดแก่คุณ ในขณะที่อะนาล็อกไม่ต่อเนื่องอาจเร็วบนกริดขนาดเล็ก แต่จะไม่ให้ผลลัพธ์ที่ถูกต้อง


และเอ็นทรีเฟ็นก็เครียดเหมือนกันและยกตัวอย่างที่คล้ายกันในบทความที่ฉันอ้างถึง คำถามไม่ได้เกี่ยวกับการประมาณที่ดีที่สุด แต่: อะไรคือข้อดีของอัลกอริธึม 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.