“正确”的答案很大程度上取决于您需要近似值的目的。您真的需要某个误差范围的最佳近似值吗?还是只是一个很好的近似值?或者只是最小最大意义上的一个很好的近似值?
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 快照:
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 = 1001
我得到
maximum error of convex optimization: 6.594361e-02 (0.272887 s)
maximum error of chebfun remez: 6.592293e-02 (0.319717 s)
即几乎相同的速度,但离散优化在小数点后四位仍然更差。最后,将网格大小进一步增加到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 将为您提供全局最优结果。虽然离散模拟在小电网上可能很快,但它不会给出正确的结果。