Wolfram mathematica 1) 一个解决方案;“最大化”;“错误”;函数无界。”;但是不要';我不知道为什么2)更重要的是,如何加速这个3d区域绘图(参见更新2)

Wolfram mathematica 1) 一个解决方案;“最大化”;“错误”;函数无界。”;但是不要';我不知道为什么2)更重要的是,如何加速这个3d区域绘图(参见更新2),wolfram-mathematica,mathematical-optimization,Wolfram Mathematica,Mathematical Optimization,当我试图使用NMaximize查找f的最大值时,mathematica给了我一个错误提示 NMaximize::cvdiv:未能收敛到解决方案。该函数可能是无限的。 但是,如果我用一个大数字来缩放f,比如说,10^5,10^10,甚至10^100,NMaximize效果很好 在下面的两幅图像中,蓝色的是f,红色的是f/10^10 我的问题来了: 缩放是否是一种通用的优化技巧 任何其他稳健、通用的解决方案用于以下优化 针状函数 因为缩放几乎没有改变针的形状 f,如两幅图所示,缩放在这里如何工作?

当我试图使用
NMaximize
查找
f
的最大值时,mathematica给了我一个错误提示

NMaximize::cvdiv:未能收敛到解决方案。该函数可能是无限的。

但是,如果我用一个大数字来缩放
f
,比如说,10^5,10^10,甚至10^100
NMaximize
效果很好

在下面的两幅图像中,蓝色的是
f
,红色的是
f/10^10

我的问题来了:

  • 缩放是否是一种通用的优化技巧

  • 任何其他稳健、通用的解决方案用于以下优化 针状函数

  • 因为缩放几乎没有改变针的形状
    f
    ,如两幅图所示,缩放在这里如何工作?

  • 谢谢:)

    更新1:包括
    f

    Clear["Global`*"]
    
    d = 1/100;
    mu0 = 4 Pi 10^-7;
    kN = 97/100;
    r = 0.0005;
    Rr = 0.02;
    eta = 1.3;
    
    e = 3*10^8;
    
    s0 = 3/100;
    
    smax = 1/100; ks = smax/s0;
    fre = 1; tend = 1; T = 1;
    s = s0*ks*Sin[2*Pi*fre*t];
    u = D[s, t];
    umax = N@First[Maximize[u, t]];
    
    (*i=1;xh=0.1;xRp=4.5`;xLc=8.071428571428573`;
    i=1;xh=0.1;xRp=4.5;xLc=8.714285714285715;*)
    i = 1; xh = 0.1; xRp = 5.5; xLc = 3.571428571428571`;
    (*i=1;xh=0.1`;xRp=5.`;xLc=6.785714285714287`;*)
    
    h = xh/100; Rp = xRp/100; Lc = xLc/100;
    Afai = Pi ((Rp + h + d)^2 - (Rp + h)^2);
    (*Pi (Rp-Hc)^2== Afai*)
    Hc = Rp - Sqrt[Afai/Pi];
    (*2Pi(Rp+h/2) L/2==Afai*)
    L = (2 Afai)/(\[Pi] (h + 2 Rp));
    B = (n mu0 i)/(2 h);
    
    (*tx = -3632B+2065934/10 B^2-1784442/10 B^3+50233/10 B^4+230234/10 \
    B^5;*)
    tx = 54830.3266978739 (1 - E^(-3.14250266080741 B^2.03187556833859));
    
    n = Floor[(kN Lc Hc)/(Pi r^2)] ;
    
    A = Pi*(Rp^2 - Rr^2);
    b = 2*Pi*(Rp + h/2);
    
    (* -------------------------------------------------------- *)
    
    Dp0 = 2*tx/h*L; 
    
    
    Q0 = 0;
    
    Q1 = ((1 - 3 (L tx)/(Dp h) + 4 (L^3 tx^3)/(Dp^3 h^3)) Dp h^3)/(
       12 eta L) b;
    Q = Piecewise[{{Q1, Dp > Dp0}, {Q0, True}}];
    
    
    Dp = Abs[dp[t]];
    
    
    ode = u A - A/e ((s0^2 - s^2)/(2 s0 )) dp'[t] == Q*Sign[dp[t]];
    
    sol = First[
       NDSolve[{ode, dp[0] == 0}, dp, {t, 0, tend} , 
        MaxSteps -> 10^4(*Infinity*), MaxStepFraction -> 1/30]];
    
    Plot[dp''[t] A /. sol, {t, T/4, 3 T/4}, AspectRatio -> 1, 
     PlotRange -> All]
    Plot[dp''[t] A /10^10 /. sol, {t, T/4, 3 T/4}, AspectRatio -> 1, 
     PlotRange -> All, PlotStyle -> Red]
    
    f = dp''[t] A /. sol;
    NMaximize[{f, T/4 <= t <= 3 T/4}, t]
    NMaximize[{f/10^5, T/4 <= t <= 3 T/4}, t]
    NMaximize[{f/10^5, T/4 <= t <= 3 T/4}, t]
    NMaximize[{f/10^10, T/4 <= t <= 3 T/4}, t]
    
    清除[“全局”*]
    d=1/100;
    mu0=4pi10^-7;
    kN=97/100;
    r=0.0005;
    Rr=0.02;
    eta=1.3;
    e=3*10^8;
    s0=3/100;
    smax=1/100;ks=smax/s0;
    fre=1;倾向=1;T=1;
    s=s0*ks*Sin[2*Pi*fre*t];
    u=D[s,t];
    umax=N@First[最大化[u,t]];
    (*i=1;xh=0.1;xRp=4.5`;xLc=8.071428571428573`);
    i=1;xh=0.1;xRp=4.5;xLc=8.714285714285715;*)
    i=1;xh=0.1;xRp=5.5;xLc=3.571428571428571`;
    (*i=1;xh=0.1`;xRp=5.`;xLc=6.785714285714287`;*)
    h=xh/100;Rp=xRp/100;Lc=xLc/100;
    Afai=Pi((Rp+h+d)^2-(Rp+h)^2);
    (*Pi(Rp-Hc)^2==Afai*)
    Hc=Rp-Sqrt[Afai/Pi];
    (*2Pi(Rp+h/2)L/2==Afai*)
    L=(2 Afai)/(\[Pi](h+2 Rp));
    B=(n mu0 i)/(2 h);
    (*tx=-3632B+2065934/10B^2-1784442/10B^3+50233/10B^4+230234/10\
    B^5;*)
    tx=54830.3266978739(1-E^(-3.14250266080741B^2.03187556833859));
    n=地板[(kN Lc Hc)/(Pi r^2)];
    A=Pi*(Rp^2-Rr^2);
    b=2*Pi*(Rp+h/2);
    (* -------------------------------------------------------- *)
    Dp0=2*tx/h*L;
    Q0=0;
    Q1=((1-3(L tx)/(Dp h)+4(L^3 tx^3)/(Dp^3 h^3))Dp h^3)/(
    12(L)b;
    Q=分段[{Q1,Dp>Dp0},{Q0,True}}];
    Dp=Abs[Dp[t]];
    ode=ua-A/e((s0^2-s^2)/(2s0))dp'[t]==Q*符号[dp[t]];
    索尔=第一[
    NDSolve[{ode,dp[0]==0},dp,{t,0,tend},
    最大步长->10^4(*无穷大*),最大步长分数->1/30];
    绘图[dp'[t]A/.sol,{t,t/4,3t/4},AspectRatio->1,
    绘图范围->全部]
    绘图[dp'[t]A/10^10/.sol,{t,t/4,3t/4},AspectRatio->1,
    打印范围->全部,打印样式->红色]
    f=dp''[t]A/。溶胶;
    
    如果在优化过程中最优值提高了几个数量级,并且最终结果在绝对意义上是“大的”,则会发出NMaximize[{f,T/4
    NMaximize::cvdiv
    。(例如,在我们从10^-6变为1的情况下防止消息)

    因此,是的,目标函数的缩放会对这一点产生影响


    严格地说,此消息是一个警告,而不是一个错误。我的经验是,如果您看到它,您的问题很有可能出于某种原因是无限的。在任何情况下,此警告都是一个提示,提示您可能希望仔细检查您的系统,看看是否存在这种情况。

    如果选择imum在优化过程中提高了几个数量级,最终结果在绝对意义上是“大的”(例如,在从10^-6到1的情况下防止消息)

    因此,是的,目标函数的缩放会对这一点产生影响


    严格地说,此消息是一个警告,而不是一个错误。我的经验是,如果您看到它,您的问题很有可能出于某种原因是无限的。在任何情况下,此警告都是一个提示,提示您可能需要重新检查您的系统,以确定是否存在这种情况。

    是否定义函数,
    f
    ?是的,pl易用性包括
    f
    !@David和Mr Wizard,感谢您的关心。我认为在这里显示
    f
    会有点不好。好的,我现在做了两次更新。缩放或规范化是优化中的一项标准技术。@Platomanic,非常感谢您。您能在我的文章中就这个问题给我一些建议吗上面的更新2?:)你能定义函数吗,
    f
    ?是的,请包括
    f
    !@David和Mr Wizard,谢谢你的关心。我认为在这里显示
    f
    会有点不舒服。好的,我现在做了两次更新。缩放或规范化是优化中的一项标准技术。@platonariac,谢谢你非常感谢。你能就我上面更新的问题给我一些建议吗?:)
    Clear["Global`*"]
    
    d = 1/100;
    mu0 = 4 Pi 10^-7;
    kN = 97/100;
    r = 0.0005;
    Rr = 0.02;
    eta = 1.3;
    
    e = 3*10^8;
    
    s0 = 3/100;
    
    smax = 1/100; ks = smax/s0;
    f = 1; tend = 1/f; T = 1/f;
    s = s0*ks*Sin[2*Pi*f*t];
    u = D[s, t];
    umax = N@First[Maximize[u, t]];
    
    
    du[i_?NumericQ, xh_?NumericQ, xRp_?NumericQ, xLc_?NumericQ] := 
     Module[{Afai, Hc, L, B, tx, n, A, b, Dp0, Q0, Q1, Q, Dp, ode, sol, 
       sF, uF, width, h, Rp, Lc},
      h = xh/100; Rp = xRp/100; Lc = xLc/100;
      Afai = Pi ((Rp + h + d)^2 - (Rp + h)^2);
    
      Hc = Rp - Sqrt[Afai/Pi];
    
      L = (2 Afai)/(\[Pi] (h + 2 Rp));
      B = (n mu0 i)/(2 h);
    
    
      tx = 54830.3266978739 (1 - E^(-3.14250266080741 B^2.03187556833859));
    
      n = Floor[(kN Lc Hc)/(Pi r^2)] ;
    
      A = Pi*(Rp^2 - Rr^2);
      b = 2*Pi*(Rp + h/2);
    
      Dp0 = 2*tx/h*L;  
    
    
      Q0 = 0;
    
      Q1 = ((1 - 3 (L tx)/(Dp h) + 4 (L^3 tx^3)/(Dp^3 h^3)) Dp h^3)/(
        12 eta L) b;
      Q = Piecewise[{{Q1, Dp > Dp0}, {Q0, True}}];
    
      Dp = Abs[dp[t]];
    
    
      ode = u A - A/e ((s0^2 - s^2)/(2 s0 )) dp'[t] == Q*Sign[dp[t]];
    
      sol = First[
        NDSolve[{ode, dp[0] == 0}, dp, {t, 0, tend} , MaxSteps -> 10^4, 
         MaxStepFraction -> 1/30]];
    
    
      sF = ParametricPlot[{s, dp[t] A /. sol}, {t, 0, tend}, 
        AspectRatio -> 1];
    
    
      uF = ParametricPlot[{u, dp[t] A /. sol}, {t, 0, tend}, 
        AspectRatio -> 1];
    
    
      tdu = NMaximize[{dp''[t] A /10^8 /. sol, T/4 <= t <= 3 T/4}, {t, 
         T/4, 3 T/4}, AccuracyGoal -> 6, PrecisionGoal -> 6];
    
      width = Abs[u /. tdu[[2]]];
    
      {uF, width, B}]
    
    RegionPlot3D[
     du[1, h, Rp, Lc][[2]] <= umax/6, {h, 0.1, 0.2}, {Rp, 3, 10}, {Lc, 1, 
      10}, LabelStyle -> Directive[18]]