DMUG-Archiv 2010

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Punkte aus Interpolating Function entfernen

Hallo Frank, Oliver und Robert,

Ich werde dann mit den erhaltenen Coordinates per Interpolation[] meine
neue InterpolatingFunction schaffen (falls es nicht noch einfacher geht?).

In der Hilfe ref/FunctionInterpolation steht geschrieben:

You can use FunctionInterpolation to generate a single InterpolatingFunction object from an expression containing several such objects.

Dann machen wir doch das

In[140]:= Clear[breitlingWegbedungen]
breitlingWegbedungen[f_InterpolatingFunction, l_List] :=
 Block[{x, x1, x2, x3, x4},
   {x1, x2, x3, x4} = l;
   Check[f[x1], Return[$Failed]];
   Check[f[x2], Return[$Failed]];
   Check[f[x3], Return[$Failed]];
   Check[f[x4], Return[$Failed]];
   FunctionInterpolation[
    Piecewise[{{f[x], x1 <= x < x2},
      {(f[x2] (x3 - x) + f[x3] (x - x2))/(x3 - x2), x2 <= x < x3},
      {f[x], x3 <= x < x4}}, 0], {x, x1, x4},
    InterpolationPoints -> Floor[x4 - x1]^2, MaxRecursion -> 12
    ]
   ] /; VectorQ[l, NumericQ] && Less @@ l

wobei man den mittleren linearen Teil im Rahmen etwa der Stetigkeit oder gar der Differenzierbarkeit beliebig umgestalten mag, und frisieren damit die Lösung einer nichtlinearen Differentialgleichung

In[4]:= Clear[s]
s = NDSolve[{y'[x] == y[x] Cos[x + y[x]], y[0] == 1}, y, {x, 0, 30}]
Out[5]= {{y -> InterpolatingFunction[{{0, 30}}], <>]}}

mittels

In[142]:= t = breitlingWegbedungen[s[[1, 1, 2]], {0, 10, 15, 30}]
Out[142]= InterpolatingFunction[{{0, 30}}], <>]

und betrachten schliesslich das Ergebnis:

In[143]:= Plot[{t[x], t'[x]}, {x, 0, 30}, PlotRange -> All]

ich habe eine Interpolating Function,
die in einem kleinen Intervall vieleungenaue Werte enthält. Daher würde ich gerne alle Werte in diesem
Intervall entfernen.

Wie von Oliver bemerkt wäre es besser, diese ungenauen Werte in der Modellierung unschädlich zu machen, statt sie wegzufrisieren. Aber letzteres geht, ganz einfach.

Gruss
Udo.

mit dem Package

Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"];

aus tutorial/NDSolvePackages

kannst Du Teile aus der interpolating function raus holen. Es waere aber
wohl besser, wenn man untersuchen wuerde warum NDSolve dort solche Werte
liefert.

Gruss,
Oliver

Attachment: wegbedungen.jpeg
Description: JPEG image

Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html