Wolfram mathematica 如何";嵌入;Mathematica中的分段求解 我用NDSolve来解一个非线性偏微分方程 方程式 我希望其中一个变量(Kvar)是一个函数 当前正在求解的时间步长的,因此使用 分段 Mathematica生成一条错误消息,说明:

Wolfram mathematica 如何";嵌入;Mathematica中的分段求解 我用NDSolve来解一个非线性偏微分方程 方程式 我希望其中一个变量(Kvar)是一个函数 当前正在求解的时间步长的,因此使用 分段 Mathematica生成一条错误消息,说明:,wolfram-mathematica,piecewise,Wolfram Mathematica,Piecewise,SetDelayed::write:0.05[t_2;]中的标记实值受保护。>> NDSolve::deqn:应为方程或方程列表,而不是 $在第一个参数中失败 ReplaceAll::reps: 为了便于阅读,我没有包括整个错误消息 我的代码如下: Needs["VectorAnalysis`"] Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"]; Clear[Eq4, EvapThickFilm, h, S, G, E1,

SetDelayed::write:0.05[t_2;]中的标记实值受保护。>> 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]];
第二个单元格,我试图在
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];
L=318;TMax=7.0;
关闭[NDSolve::mxst];
(*Ktemp=Array[0.001+0.001#^2&,13]*)
hSol=h/。NDSolve[{
(*S、G、E、K、D、VR、M*)
Kvar[t_]:=分段[{0.01,t4}}],
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.25cos[2\[Pi]x/L]-0.25sin[2\[Pi]x/L])Cos[
2\[Pi]y/L]
},
H
{x,0,L},
{y,0,L},
{t,0,TMax}
][[1]]
hGrid=插值函数网格[hSol];
对不起,第一个单元格块在这里显示得不太好。由于没有足够的“声誉”,我无法发布图片


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

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

Off[NDSolve::mxsst];
(*Ktemp=Array[0.001+0.001#^2&,13]*)
Kvar[t_] := Piecewise[{{0.01, t <= 4}, {0.05, t > 4}}];
hSol = ...
Off[NDSolve::mxst];
(*Ktemp=Array[0.001+0.001#^2&,13]*)
Kvar[t_]:=分段[{0.01,t4}}];
hSol=。。。
然后将其从
NDSolve
中的列表中删除,使其以
NDSolve[{(*S,G,E,K,D,VR,M*)EvapThickFilm[…
开头,它将起作用。它会发出警告,但这些警告与等式中可能的奇点有关


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

获取Kvar[t\u]的定义超出NDSolve参数列表。然后它将给出解决方案。可能需要调整NDSolve设置以获得更好的错误估计,并使其成功运行到TMax(似乎在2.36左右退出)。谢谢!这当然有帮助。正如您所建议的,接下来我将尝试使用NDSolve设置。有什么建议吗?最好不要使用以大写字母开头的变量名称,因为这可能会导致与内置名称(均以大写字母开头)冲突。行
传统格式[EvapThickFilm[S,G,E1,K1,D1,VR,M,R]];
没有意义。没有赋值,并且;抑制任何输出。因此没有净效果。我抑制“传统形式[…]”的唯一原因是因为输出太长,眼睛看不太容易。