Lösung der Wiederholungsbeziehung mit stückweise definiertem Mathematica

  • Ich habe eine Wiederholungsbeziehung, die wie folgt definiert ist:

     RSolve[
     {
      p[0] == p0,
      p[1] == λ p[0]/μ,
      p[i + 1] == λ p[i]/(2 μ)
      },
     p[i], i
    ]
     

    Hinweis dass die Relation für i=1 anders ist als für i >= 1. Daraus ergibt sich folgender Fehler:

    DSolve :: bvnul: Bei einigen Zweigen der allgemeinen Lösung führen die angegebenen Randbedingungen zu einer leeren Lösung. & gt; & gt;

    Wenn ich Piecewise verwende, gibt Mathematica nur die Eingabe zurück:

     RSolve[
     {
      p[i + 1] == 
       Piecewise[{
         {p0, i == -1},
         {λ p[i]/μ, i == 0}, 
         {λ p[i]/(2 μ), i >= 1}}]
      },
     p[i], i
    ]
     

    Auch die Verwendung von If oder Condition funktioniert nicht.

    Schätzen Sie Ihre Hilfe!

    (Übrigens, dieses einfache Beispiel kann leicht von Hand gelöst werden, aber ich würde gerne kompliziertere Rekursionen mit stückweisen Definitionen lösen.)

    04 May 2012
    Jon Galloway
1 answer
  • Das funktioniert:

     RSolve[{
      p[1] == l p0/m,
      p[n + 1] == l /(2 m) p[n]},
      p[n], n]
     (*
      -> {{p[n] -> 2^(1 - n) (l/m)^n p0}}
     *)
     

    (Die Überspezifikation von p[0] und p[1] ist nicht nach dem Geschmack von RSolve)

    Ein anderer Weg:

     k[0] = k0;
    k[1] = l k[0]/m;
    k[i_] := l k[i - 1]/(2 m) /; i > 1;
    FindSequenceFunction[Table[k[i], {i, 1, 10}], n]
    (*
    -> 2^(1 - n) k0 (l/m)^n
    *)
     

    Bearbeiten

    Reader, Achtung! Seit Version 8.0 sind RSolve und FindSequenceFunction beide unreife Implementierungen (denke ich), und es gibt viele Fälle, in denen die Ausgabe nur die Eingabe ist.

    04 May 2012
    Jon Galloway