2011-12-17 4 views
7

Esempi tratti saggio di funzione:collegamento Smooth tra le parti a tratti

f[x_]:=Piecewise[{{x^2, 0<x<1-epsilon},{x,1<x<2-epsilon},{2,x>2}}] 

C'è un modo per collegare queste parti dell'intervallo epsilon, quindi ottengo una funzione regolare?

MODIFICA:
Per semplice, non intendo che debba essere derivabile nel punto di connessione, solo che in qualche lavoro numerico sembra una connessione "naturale".

EDIT2:
Due cerchi neri rappresentano i punti in cui si trova il problema. Mi piacerebbe che assomigliasse a una funzione derivabile (anche se non ha bisogno di essere in senso rigoroso dal punto di vista matematico, ma non voglio questi due picchi). Il cerchio rosso rappresenta la parte in cui sembra buona.
picture
Quello che potevo fare è farlo montando non linearmente [x-epsilon, x + epsilon], ma speravo che ci fosse un modo più semplice con la funzione a tratti.

risposta

5

Inizialmente, data una funzione, dovremmo definirla precisamente nell'intero intervallo {x,0,2}, ad es. i suoi valori sugli intervalli 1-epsilon <= x < 1 e 2 - epsilon <= x < 2. enter image description here

Il modo più semplice è quello di definire f1[x] lineare a tratti sulle gamme entrambi, tuttavia la funzione risultante non sarebbe differenziabile sui punti di incollaggio, e ciò comporterebbe picchi.

Per evitare tale situazione dovremmo scegliere (in questo caso) almeno polinomi di terzo ordine là:

P[x_] := a x^3 + b x^2 + c x + d 

e incollare insieme con f[x] assumendo "condizioni di incollaggio" (parità di funzioni a punti dati come bene come dei loro primi derivati) cioè. risolvere equazioni risultanti:

W[x_, eps_]:= P[x]//. [email protected][{#^2 == P[#], 
            1 == P[1], 
            2# == 3a#^2 +2b# +c, 
            1 == 3a +2b +c}, {a, b, c, d}]&@(1-eps) 

Z[x_, eps_]:= P[x]//. [email protected][{# == P[#], 
            2 == P[2], 
            1 == 3a#^2 +2b# +c, 
            0 == 12a +4b +c}, {a, b, c, d}]&@(2-eps) 

per visualizzare le resuls possiamo prendere advantege di Manipulate:

f1[x_, eps_]:= Piecewise[{{x^2, 0 < x < 1 -eps}, {W[x, eps], 1 -eps <= x < 1}, 
          { x , 1 <= x < 2 -eps}, {Z[x, eps], 2 -eps <= x < 2}, 
                { 2 ,   x >=2}}]; 
Manipulate[ Plot[f1[x, eps], {x, 0, 2.3}, 
       PlotRange -> {0, 2.3}, ImageSize->{650,650}] 
                 //Quiet, {eps, 0, 1}] 

seconda epsilon > 0 otteniamo funzioni differenziabili f1, mentre per epsilon = 0f1 non è derivabile in due punti.

Plot[f1[x, eps]/. eps -> .4, {x, 0, 2.3}, PlotRange -> {0, 2.3}, 
          ImageSize -> {500, 500}, PlotStyle -> {Blue, Thick}] 

enter image description here

Se volessimo f1 ad essere una funzione liscia (infinitamente differenziabile) dovremmo giocare definire f1 nella gamma [1 - epsilon <= x < 1) con una funzione trascendente, qualcosa come ad esempio Exp[1/(x-1)] ecc

+0

@Sjoerd C. de Vries entrambi sono buone risposte, ti darei entrambi la bandiera risolta, sfortunatamente il +1 dovrà fare. Artes Docendo Penso che Manipulate sia una buona idea. – enedene

+0

@Verbeia No, non l'ho fatto. Non sono sicuro di come dare un supporto, è sufficiente seguire l'argomento? – enedene

0

io non sono sicuro di aver capito la tua domanda, ma da quello che ho capito qui è un'idea

ClearAll[f] 
e = 0.1 
f[x_] := Piecewise[{{x^2, 0 < x < 1 - e}, {whatEver, 
    1 - e <= x <= 1 + e}, {x, 1 + e < x < 2}, {2, x > 2}}, error] 

f[1] la dà qualunque cosa.

+0

Ho cercato di spiegare meglio in modifica. – enedene

4

È possibile modificare gradualmente tra le funzioni che definiscono il punto iniziale e finale dell'intervallo.Sotto Faccio questo spostando il peso nella somma ponderata di queste funzioni a seconda della posizione nell'intervallo:

ClearAll[f] 
epsilon = 0.1; 
f[x_] := 
Piecewise[ 
    { 
    {x^2, 0 < x < 1 - epsilon}, 
    {Rescale[x, {1 - epsilon, 1}, {1, 0}] x^2 + Rescale[x, {1 - epsilon, 1}, {0, 1}] x, 
     1 - epsilon <= x <= 1}, 
    {x, 1 < x < 2 - epsilon}, 
    {Rescale[x, {2 - epsilon, 2}, {1, 0}] x + Rescale[x, {2 - epsilon, 2}, {0, 1}] 2, 
     2 - epsilon <= x <= 2}, 
    {2, x > 2} 
    } 
    ] 

Plot[f[x], {x, 0, 2.5}] 

enter image description here