如何在Mathematica中“嵌入”NDSolve中的分段

时间:2011-09-21 18:14:53

标签: wolfram-mathematica piecewise

  1. 我正在使用NDSolve来解决非线性偏微分 方程。
  2. 我希望其中一个变量(Kvar)是一个函数 当前正在解决并因此使用的时间步骤 Piecewise
  3. Mathematica会生成一条错误消息:
  4.   

    SetDelayed :: write:0.05 [t_]中的Tag Real受保护。 >>   NDSolve :: deqn:预期的方程或方程列表而不是   $第一个参数失败....

         

    ReplaceAll :: reps:....

    我没有包含整个错误消息以便于阅读。

    我的代码如下:

    Needs["VectorAnalysis`"]
    Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"];
    Clear[Eq4, EvapThickFilm, h, S, G, E1, K1, D1, VR, M, R]
    Eq4[h_, {S_, G_, E1_, K1_, D1_, VR_, M_, R_}] := \!\(
    \*SubscriptBox[\(\[PartialD]\), \(t\)]h\) + 
        Div[-h^3 G Grad[h] + 
          h^3 S Grad[Laplacian[h]] + (VR E1^2 h^3)/(D1 (h + K1)^3)
            Grad[h] + M (h/(1 + h))^2 Grad[h]] + E1/(
        h + K1) + (R/6) D[D[(h^2/(1 + h)), x] h^3, x] == 0;
    SetCoordinates[Cartesian[x, y, z]];
    EvapThickFilm[S_, G_, E1_, K1_, D1_, VR_, M_, R_] := 
      Eq4[h[x, y, t], {S, G, E1, K1, D1, VR, M, R}];
    TraditionalForm[EvapThickFilm[S, G, E1, K1, D1, VR, M, R]];
    

    我尝试在Piecewise中实施NDSolve的第二个单元格:

    L = 318; TMax = 7.0;
    Off[NDSolve::mxsst];
    (*Ktemp = Array[0.001+0.001#^2&,13]*)
    hSol = h /. NDSolve[{
         (*S,G,E,K,D,VR,M*)
    
     Kvar[t_] :=  Piecewise[{{0.01, t <= 4}, {0.05, t > 4}}],
     EvapThickFilm[1, 3, 0.1, Kvar[t], 0.01, 0.1, 0, 160],
     h[0, y, t] == h[L, y, t],
     h[x, 0, t] == h[x, L, t],
     (*h[x,y,0] == 1.1+Cos[x] Sin[2y] *)
    
     h[x, y, 0] == 
      1 + (-0.25 Cos[2 \[Pi] x/L] - 0.25 Sin[2 \[Pi] x/L]) Cos[
         2 \[Pi] y/L]
     },
    h,
    {x, 0, L},
    {y, 0, L},
    {t, 0, TMax}
    ][[1]]
    
    hGrid = InterpolatingFunctionGrid[hSol];
    
    PS:我很抱歉,但第一个单元格块在这里显示不太好。由于没有足够的“声誉”,我无法发布图片。

    使用NDSolve单元块时会出现错误消息。

1 个答案:

答案 0 :(得分:3)

Kvar中的一组方程式之外定义函数NDSolve,如

Off[NDSolve::mxsst];
(*Ktemp=Array[0.001+0.001#^2&,13]*)
Kvar[t_] := Piecewise[{{0.01, t <= 4}, {0.05, t > 4}}];
hSol = ...

并将其从NDSolve的列表中删除,以便它以NDSolve[{(*S,G,E,K,D,VR,M*)EvapThickFilm[...开头,然后就可以了。它会发出警告,但这些警告与你方程中可能存在的奇点有关。

此外,您的原始错误表示您的Kvar被分配了0.05的值。因此,在第二个单元格中的任何其他内容之前添加Clear[Kvar]