Hallo Simon,
Remove[inverseLaplaceVougioukas];
inverseLaplaceVougioukas[tende_Integer, prec_Integer] :=
Module[{},
kprfrc = Rationalize[68.9416, 0];
kprtrc = Rationalize[9.38075, 0];
tnfrc = Rationalize[1.7975, 0];
tntrc = Rationalize[30.2605, 0];
tvtrc = Rationalize[24.4523, 0];
t1trc = 1;
grfrc[s_] = kprfrc*(1+1/(s*tnfrc));
grtrc[s_] = (kprtrc*(1+1/(s*tntrc)+s*tvtrc)/(1+t1trc*s));
gstrc[s_] = ((1/2)/(1+10*s)/(1+15*s)/(1+20*s)/(1+25*s));
gsfrc[s_] = (1/((1+3*s)*(1+5*s)));
nenner[s_] = (1+gsfrc[s]*grfrc[s]+gsfrc[s]*grfrc[s]*gstrc[s]*grtrc[s]);
ztrc[s_] = -20/s;
yrfrc[s_] = FullSimplify[(-grfrc[s]*grtrc[s]*gstrc[s]/nenner[s])*ztrc[s]];
yrfrct[t_] :=
ComplexExpand[Rationalize[InverseLaplaceTransform[yrfrc[s], s, t,
Assumptions -> {t \{Element] Reals, s \[Element] Reals}] /. Re_[x] ->
Identity[x], 0]] /. I -> 0;
Print["InvLaplaceT: ", yrfrct[y]];
Plot[SetPrecision[yrfrct[Rationalize[x, 0]], prec], {x, 0, tende},
PlotRange \[Rule] {{0, tende}, {0,35}},
GridLines \[Rule] {{},{20}},
AxesLabel \[Rule] {"t/s","yrfrc(t)/(m3/h)"}
]
] /; prec > $MachinePrecision
erzeugt die Lösung yrfrct[] in rationalen Zahlen, E, Sin und Cos. Soweit
ist dann keine Näherung involviert.
Trotzdem ist das nicht ohne Oszillationen zu zeichnen, weil Terme wie
E[-y] E[y]^(22653/14825314) auftreten, und das in verschiedenen
Summanden, die weiter zusammengefasst und sortiert werden müssen. Ein
Factor o.ä. schlägt fehl, es kommt die Meldung
PolynomialGCD::lrgexp: Exponent is out of bounds for function PolynomialGCD.
Normalerweise nimmt man ja auch einen Grenzwert. Mit anderen Worten, Sie
erhalten eine Lösung, können sie aber vorderhand bei grossen Argumenten
nicht wunschgemäss zeichnen und müssten daher das Einschwingen auf 20
mit anderen als graphischen Mitteln beweisen.
Gruss
Udo.
Simon Vougioukas wrote:
Hallo,
ich beschäftige mich zur Zeit mit Regelkreisen und will bei einer
Berechnung die inverse Laplaceform bestimmen. Eigentlich habe ich eine
stabile Lösung erwartet, jedoch ist dies, wie man im Plot sehen kann,
nicht der Fall. Meine erste Vermutung lag darin, dass die Genauigkeit
der einzelnen Variablen zu gering ist. Jedoch verändert eine höere
Genauigkeit das Ergebnis leider kein Stück.
Ich tippe nun, dass der Fehler durch das Erzeugen der Inversen
entsteht. Hat jemand eine Idee wie ich das überprüfen kann, bzw. wie
ich meine Funktion doch noch stabil bekomme?
Vielen Dank an alle!
Gruss
- Simon