Как «вставлять» кусочно в NDSolve в Mathematica - PullRequest
1 голос
/ 21 сентября 2011
  1. Я использую NDSolve для решения нелинейного уравнения в частных производных.
  2. Я бы хотел, чтобы одна из переменных (Kvar) была функцией временного шага, который в настоящее время решается, и, следовательно, использует Piecewise.
  3. Mathematica генерирует сообщение об ошибке, в котором говорится:

SetDelayed :: write: Tag Real in 0.05 [t_] защищен.>> NDSolve :: deqn: Ожидается уравнение или список уравнений вместо $ Failed в первом аргументе ....

ReplaceAll :: reps: ....

Iдля удобства чтения не включены все сообщения об ошибках.

Мой код выглядит следующим образом:

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 Ответ

3 голосов
/ 21 сентября 2011

Определите функцию 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] перед чем-либо еще во второй ячейке.

...