⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaulttol.m

📁 curves ti si s a nice code.
💻 M
字号:
function tol = defaultTol(E, b)%%     tol = defaultTol(E, b)%% This function uses the GCV function to choose a default truncation% tolerance for constructing a psfPrec.  In addition, a plots of the% Picard condition and L-Curve are displayed, to help decide if the% the proper tolerance has been chosen.%%  J. Nagy & K. Lee 4/17/02%e = reshape(E', prod(size(E)), 1);e=E(:);[e, idx] = sort(abs(e));e = flipud(e);%beta = reshape(fftn(b)', prod(size(b)), 1);beta=fftn(b);beta=beta(:);beta = abs( flipud( beta(idx) ) ) / sqrt(prod(size(b)));n = length(e);%%  Here we use the GCV function to pick a tolerance.%rho2 = zeros(n-1,1);rho2(n-1) = beta(n)^2;for k=n-2:-1:1  rho2(k) = rho2(k+1) + beta(k+1)^2;endG = zeros(n-1,1);for k=1:n-1  G(k) = rho2(k)/(n - k)^2;end[minG,reg_min] = min(G);tol = e(reg_min);%%  Now we make some plots to analyze the choice of%  the tolerance.%%% First, plot the GCV function, with the tolerance.%figure, h = gcf;subplot(2,2,1)  %semilogy(1:n-1, G)  loglog(1:n-1,G)  hold on  semilogy(reg_min, minG, 'o')  plot([reg_min,reg_min], [minG, G(1)], 'k--')  text(reg_min, G(1),' ----- tol')  xlabel('k'), ylabel('GCV(k)'), title('GCV function')%%  Now plot the L-Curve, with the GCV tolerance.%eta = beta .* beta;x = eta ./ (e.^2);rho = zeros(size(x));sigma = rho;rho(1) = sum(eta(2:end));sigma(1) = x(1);for k = 2:length(x)-1  rho(k) = rho(k-1) - eta(k);  sigma(k) = sigma(k-1) + x(k);endsubplot(2,2,2)  loglog(rho, sigma)  hold on  plot(rho(reg_min), sigma(reg_min), 'o')  text(rho(reg_min), sigma(reg_min), ' ----- tol')  xlabel('norm of residual'), ylabel('norm of solution'), title('L-Curve')  %%  Now plot the Picard condition, with the GCV tolerance.%subplot(2,2,3)  %semilogy(e)  loglog(e)  hold on  beta2 = beta / max(abs(beta)) * min(e);  %semilogy(beta2, 'r')  loglog(beta2,'r')%  legend('Eigenvalues', 'Fourier coefficients')  plot(reg_min, tol, 'o')  plot([reg_min, reg_min], [min(beta2), tol], 'k--')  text(reg_min, tol, ' ----- tol')  xlabel('k'), title('Picard Condition')subplot(2,2,4)  plot(0,11,'o')  text(-1,18,'Default preconditioner tol. has been chosen')  text(-1,16,'by finding the min of the GCV function:')  text(0,14,sprintf('         tol = %f', tol))  text(0,11,'   shows where this default tolerance lies on')  text(0, 9,'   each plot.  It should be:')  text(0, 7,'     * on, or near, the corner of the L-curve')  text(0, 5,'     * at a point where Fourier coeff. start')  text(0, 3,'       to level of on Picard condition plot')  text(0, 0,'   If either is not the case, you may want to')  text(0,-2,'   choose a different tolerance')  axis([0,20,0,20])  axis off

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -