You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双网格法与误差估计问题:参数λ收敛率未达预期求助

带积分边界条件的一阶非线性奇异摄动参数化问题:参数λ收敛率不符合预期的排查

我正在编写Matlab代码求解带积分边界条件的一阶非线性奇异摄动参数化问题,已实现解u(x)的预期二次收敛阶,但参数λ未达到预期收敛效果。由于问题无精确解,采用双网格原理进行误差估计:

  • 先在N=32时求解得到{u(x),λ},构造双网格求解得到{U,Λ},存储对应误差;
  • 固定N=64重复上述步骤。

结果显示u的收敛率为二次,但λ的收敛率不符合预期,求排查操作错误。

附Matlab代码:

for r=1:1
    epsln=2^(-2*r);
    for n=1:1
        N=32*2^(n);
        %% Shishkin Mesh
        alph=2;%min. value of g_u
        sigm=min(0.5,2*(epsln/alph)*log(N));%Transition Point
        t=unique([linspace(0,sigm,N/2+1),linspace(sigm,1,N/2+1)]);
        h=diff(t);%step-size
        % Initial Solution
        u=1-t.^2;
        l=-0.4;
        %% Iterated Solution
        errU=1;
        errL=1;
        iter=1;
        while (errU > Tol || errL>Tol)
            [U,l_new]=Solution_Fun_ex1_Kudu(N,t,u,h,l,epsln);
            errU=max(abs(u-U));
            errL=abs(l-l_new);
            u=U;
            l=l_new;
            iter=iter+1;
        end
        iter;
        %Final Solution is stored in [u,l]
        %%Doublemesh Function
        z=Doublemesh_Fun_kudu(t,N);
        hh=diff(z);
        %Initial Solution
        y=1-z.^2;
        ll=-0.4;
        %%Iterated Solution
        errY=1;
        errLd=1;
        iterr=1;
        while (errY>Tol || errLd>Tol)
            [Y,ll_new]=Solution_Fun_ex1_Kudu(2*N,z,y,hh,ll,epsln);
            errY=max(abs(y-Y));
            errLd=abs(ll-ll_new);
            y=Y;
            ll=ll_new;
            iterr=iterr+1;
        end
        %Final Double mesh Solution is stored in [y,ll]
        
        %%Calculating Errors
        Err=zeros(1,N+1);
        for i=1:N+1
            Err(i)=abs(u(i)-y(2*i-1));
        end
        E(r,n)=max(Err);
        E_l(r,n)=abs(l-ll);
        %%Calculating Rate of Convergence
        if n>1
            R(r,n-1)=log(E(r,n-1)/E(r,n))/log(2);
            R_l(r,n-1)=log(E_l(r,n-1)/E_l(r,n))/log(2);
        end
        Meshpoints(n)=N;
    end
    Val_epsln(r)=epsln;
end

可能的错误排查点

  • 收敛率计算样本缺失:代码中n的循环仅执行1次(n=1),if n>1分支从未触发,无法计算相邻网格的收敛率。需要至少运行N=32、64、128三组数据,才能得到有效的λ收敛率。
  • 细网格λ初始值未利用粗网格结果:求解细网格时,λ的初始值固定为ll=-0.4,而非粗网格得到的l。这会导致迭代收敛效率低,甚至可能收敛到精度不足的解,影响误差估计。
  • 双网格构造方式不合理:当前通过Doublemesh_Fun_kudu直接加密粗网格,但Shishkin网格的过渡点sigm是依赖网格规模N的。细网格应重新基于2N计算过渡点生成,而非直接加密粗网格,否则边界层附近的网格精度不匹配,会影响λ的计算(λ对边界层区域的解敏感)。
  • λ的误差估计逻辑可能有误:λ通常由积分边界条件定义,其误差不仅取决于粗/细网格解的差,还需要考虑积分在不同网格上的精度差异。直接取abs(l-ll)可能无法准确反映λ的真实误差,需结合积分项的误差分析。
  • 迭代终止条件的一致性:需确认粗、细网格的迭代终止阈值Tol是否一致,且是否足够小。若Tol过大,会导致λ的迭代解精度不足,无法支撑收敛率计算。

内容的提问来源于stack exchange,提问作者Shashikant Maurya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:43:24