get_new_points.m

来自「利用电磁场的源激发方法来计算光子晶体波导例如光子晶体光纤」· M 代码 · 共 33 行

M
33
字号
function [vNew_beta, status] = get_new_points(vBeta_full, vErr_full, sm, tol, chunk)

xx = vBeta_full(1:end-1) + diff(vBeta_full)/2;        
yy_lin = interp1(vBeta_full, 1./vErr_full, xx, 'linear');
yy_sp = interp1(vBeta_full, 1./vErr_full, xx, 'spline');
norm_diff = abs(yy_lin-yy_sp)/rms(interp1(vBeta_full, 1./vErr_full, linspace(min(xx), max(xx), 100), 'spline'));
if max(norm_diff) < 10^(-sm)
    [dummy, mj] = local_maxima(1./vErr_full);
    bExit = 1;
    vNew_beta = [];
    if isempty(mj)
        return
    end
    for ind = 1:length(mj)
        dist1 = vBeta_full(mj(ind)) - vBeta_full(mj(ind)-1);
        dist2 = vBeta_full(mj(ind)+1) - vBeta_full(mj(ind));
        bDone = (dist1 < tol) & (dist2 < tol);
        if ~bDone
            vNew_beta = [vNew_beta vBeta_full(mj(ind))-dist1/2 vBeta_full(mj(ind))+dist2/2];
        end
        %figure(1)
        bExit = bExit & bDone;
    end
    if bExit == 1
        status = 2; %done
    else
        status = 1; %in minimum phase
    end
    return
end
[dummy, s_ind] = sort(norm_diff);
vNew_beta = xx(s_ind);
status = 0; %normal

⌨️ 快捷键说明

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