2011-12-17 23 views
7

Przykład odcinkowo mądry funkcyjnych:Płynne połączenie pomiędzy częściami odcinkowo

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

Czy istnieje sposób, aby połączyć te elementy w przedziale epsilon, więc mam gładką funkcję?

EDYCJA:
Przez gładki, nie mam na myśli, że musi być możliwe wyprowadzenie w punkcie połączenia, tylko że w niektórych pracach numerycznych wygląda to jak "naturalne" połączenie.
EDIT2:
Dwa czarne kółka przedstawiają punkty, w których leży problem. Chciałbym, żeby wyglądał jak funkcja pochodna (chociaż nie musi być w sensie matematycznym, ale nie chcę tych dwóch impulsów). Czerwone koło reprezentuje część, w której wygląda dobrze.
picture Mogłem zrobić to poprzez nieliniowe dopasowywanie [x-epsilon, x + epsilon], ale miałem nadzieję, że był prostszy sposób z funkcją kawałkową.

Odpowiedz

5

Na początku, biorąc pod uwagę funkcję, powinniśmy ją precyzyjnie zdefiniować w całym zakresie {x,0,2}, tj. jego wartości w zakresach 1-epsilon <= x < 1 i 2 - epsilon <= x < 2. enter image description here

Najprostszym sposobem jest określenie f1[x] odcinkowo liniowy w obu zakresach, jednak otrzymany funkcja będzie różniczkowalną w punktach klejenia i wymagałoby to kolce.

Aby zapobiec takiej sytuacji powinniśmy wybrać (w tym przypadku) przynajmniej wielomianów trzeciego rzędu tam:

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

i skleić je razem z f[x] zakładając „warunki klejenia” (równość funkcji w określonych punktach jak oraz ich pierwszych pochodnych), tj. rozwiązywać równania wynikające:

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) 

Do wizualizacji resuls możemy podjąć advantege z 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}] 

zależności epsilon > 0 otrzymujemy różniczko- f1, natomiast dla epsilon = 0f1 nie jest różniczkowalna w dwóch punktach.

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

enter image description here

Gdybyśmy chcieli f1 być sprawne funkcję (nieskończenie) różniczkowalnych powinniśmy bawić określającą f1 w zakresie [1 - epsilon <= x < 1) z transcendentalnej funkcji, coś jak na przykład Exp[1/(x-1)] itp

+0

@Sjoerd C. de Vries oba są dobrymi odpowiedziami, dałbym ci obie rozwiązane flagi, niestety +1 będzie musiał zrobić. Artes Docendo Myślę, że Manipulate to dobry pomysł. – enedene

+0

@Verbeia Nie, nie mam. Nie wiem, jak udzielić wsparcia, czy wystarczy śledzić temat? – enedene

0

Nie jestem pewien, czy rozumiem pytanie, ale z tego co zbierać tutaj jest pomysł

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] the daje cokolwiek.

+0

Próbowałem wyjaśnić to lepiej w edycji. – enedene

4

Można wykonać stopniową zmianę między funkcjami, które definiują początek i koniec interwału.Poniżej to zrobić poprzez przeniesienie ciężaru na sumę ważoną tych funkcji, w zależności od pozycji w przedziale:

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

Powiązane problemy