PDE-Randbedingungen

  • Ich löse eine PDE mit Mathematica und würde gerne wissen, wie die Bedingung implementiert wird, dass die Funktion mit zwei Variablen y[t,s] bei t=s Null ist. Ich habe das Offensichtliche ausprobiert:

     u[t,t]==0
     

    oder

     u[s,s]==0
     

    aber Mathematica gibt folgende Ausgabe aus:

     The arguments should be ordered consistently
     

    Um genauer zu sein, löse ich die folgende PDE:

     NDSolve[{p3D[t, s]*D[y[t, s], t, t] - v3D[t, s]*(q^2)*y[t, s] - 
    r3D[t, s]*D[y[t, s], t] == 0, y[t, 0] == ysol[t], y[1, 1] == 0, 
    y[0, s] == 0}, y, {t, 0, 1.}, {s, 0, 1}]
     

    wobei p3D, v3D, r3D und ysol [t] sind bekannte Funktionen. Ich muss die von mir erwähnte Bedingung in den NDSolve aufnehmen.

    Kann ich das tun?

    31 October 2012
    helloandreDrahcir
2 answers
  • Möglicherweise können Sie dies mit einem "EventLocator" tun. Schauen Sie sich die Dokumentation an: tutorial / NDSolveEventLocator . Leider geben Sie nicht alle Informationen in Ihrem Beitrag an, d. H. Alle Funktionen. Diese wären jedoch erforderlich, um eine eindeutige Antwort zu geben.

    12 March 2012
    rcollyer
  • Es ist nicht wirklich eine PDE. Sie haben keine Ableitungen in s.

    Hier können Sie versuchen, die Hälfte zu sagen, in der t & lt; = s ist. Ich werde mir einige Funktionen ausdenken, damit sie ein bisschen wie die ursprüngliche Frage aussieht.

     r3D[t_?NumberQ, s_?NumberQ] := Cos[t^2 + s]
    ysol[t_?NumberQ] := Sin[t]
     

    Wir werden es tun $ s $ zu einem Indexparameter machen. Für eine bestimmte Menge von Werten lösen wir eine ODE in $ t $.

     eqns[s_?NumberQ] := {D[
         y[s][t], {t, 2}] == (y[s][t] - r3D[t, s]*D[y[s][t], t]), 
       y[s][0] == ysol[s], y[s][s] == 0};
     

    Jetzt machen wir einen Lösungsliste.

     soln = Flatten[
       Table[NDSolve[eqns[s], y[s][t], {t, 0, s}], {s, .05, 1., .05}]];
     

    Erstellen Sie eine rechteckige Liste von Werten. Auf 0 außerhalb des Bereichs unserer Lösungen gesetzt. Man kann überprüfen, ob die Randbedingungen bis zu einem kleinen Faktor von $ MachineEpsilon eingehalten wurden.

     vals = Table[
       If[t >= s, 0, y[s][t] /. soln], {s, .05, 1., .05}, {t, 0, 1, .05}];
    
    InterpolatingFunction::dmval: Input value {0.1} lies outside the range of data in the interpolating function. Extrapolation will be used. >>
    
    InterpolatingFunction::dmval: Input value {0.1} lies outside the range of data in the interpolating function. Extrapolation will be used. >>
    
    InterpolatingFunction::dmval: Input value {0.15} lies outside the range of data in the interpolating function. Extrapolation will be used. >>
    
    General::stop: Further output of InterpolatingFunction::dmval will be suppressed during this calculation. >>
     

    I ' Ich bin zu müde, um zu verstehen, wo ich mich außerhalb der Interpolationsgrenzen befinde. Entschuldigung. Auf jeden Fall erhalten wir einen vielleicht plausiblen Satz von Werten.

     ListPlot3D[vals]
     

    PDE-Randbedingungen

    14 March 2012
    Yaakov Ellis