Funkcja Smooth Boxcar (funkcja Rectangle Pulse)

Nov 04 2020

Istnieje kilka odpowiedzi, jak uzyskać gładką funkcję prostokątną. Ale chciałbym mieć gładką funkcję boxcar lub funkcję prostokąta z 2 różnymi szerokościami .: wupiwdown

Jednym z rozwiązań jest transformata Fouriera, ale wolę mieć przybliżenie ze współczynnikiem gładkości.

Dziękuję Ci bardzo.

Oto wersja niegładka. Chciałbym to wygładzić. Należy zauważyć, że: nie jest funkcją fali prostokątnej (gładkiej, wersja jest znane rozwiązanie , to jest wagonu funkcja 2 szerokościach się szerokość wynosi 2, i w dół o szerokości 3.

pulse[h_, wup_, wdown_, t_] := 
 With[{period = wup + wdown, duty = wup/(wup + wdown)}, 
  h*UnitBox[Mod[t/period, 1.]/(2. duty)]]
Plot[{pulse[1, 2, 3, t]}, {t, 0, 10}, Exclusions -> None]

Impuls prostokątny o jednakowej szerokości:

Mogę zrobić gładką wersję tylko dla funkcji prostokątnej o jednakowej szerokości, ale nie dla funkcji prostokąta.

smoothPulse[ePulse_, wup_, wdown_, smoothness_, t_] := 
 ePulse/2 + ePulse/\[Pi]*ArcTan[Sin[\[Pi] t/wup]*smoothness]


Prostokątny impuls o 2 różnych szerokościach:

Nie znam wersji gładkiej. Próbowałem zbudować płynną wersję UnitBox.

smoothunitbox[t_, sharpness_] := 
 Piecewise[{{Tanh[sharpness*(2 t + 1)] + 1, 
     t < 0}, {1 - Tanh[sharpness*(2 t - 1)], t >= 0}}]/2
smoothRectangle[h_, wup_, wdown_, smoothness_, t_] := 
 With[{period = wup + wdown, duty = wup/(wup + wdown)}, 
  h*smoothunitbox[Mod[t/period, 1.]/(2. duty), smoothness]]

Plot[smoothRectangle[1, 2, 4, 20, t], {t, 0, 10}, Exclusions -> None]

Ale gładkość nie jest dobra. Jak polepszyć?

Odpowiedzi

3 cvgmt Nov 04 2020 at 20:29

używać mollifierw matematyce. Działa również dla Piecewisefunkcji.

Odpowiedz na komentarz

a = 2;
b = 3;
S[x_ /; 0 <= x <= a] := 1;
S[x_ /; a <= x <= a + b] := 0;
S[x_ /; x >= a + b] := S[x - (a + b)];
S[x_ /; x <= a + b] := S[x + a + b];
ρ = 1/NIntegrate[Exp[-1/(1 - x^2)], {x, -1, 1}];
φ[x_, ϵ_] = (ρ/ϵ)*  Piecewise[{{Exp[-ϵ^2/(ϵ^2 - x^2)], -ϵ < x < ϵ}}];
Plot[S[x], {x, -2 (a + b), 2 (a + b)}]
Plot[NIntegrate[φ[t - x, .3]*S[x], {x, -2 (a + b), 
   2 (a + b)}], {t, -2 (a + b), 2 (a + b)}]

Zaktualizowano

f[x_] = Piecewise[{{1, 0 <= x <= 2}}];
s[x_] = f[Mod[x, 4, -2]];
ρ = 1/NIntegrate[Exp[-1/(1 - x^2)], {x, -1, 1}];
φ[x_, ϵ_] = (ρ/ϵ)*Piecewise[{{Exp[-ϵ^2/(ϵ^2 - x^2)], -ϵ < x < ϵ}}];
Plot[s[x], {x, -4, 4}]
Plot[NIntegrate[φ[t - x, .3]*s[x], {x, -4, 4}], {t, -4, 4}]

Oryginał

Ale nie wiem, jak wygładzić prostokąt, próbuję tylko wygładzić Absfunkcję.

g[x_] = Piecewise[{{x, 0 <= x <= 1}, {-x, -1 <= x <= 0}}];
h[x_] = g[Mod[x, 2, -1]];
Plot[h[x], {x, -4, 4}]
ρ = 1/NIntegrate[Exp[-1/(1 - x^2)], {x, -1, 1}];
φ[x_, ϵ_] = (ρ/ϵ)*Piecewise[{{Exp[-ϵ^2/(ϵ^2 - x^2)], -ϵ < x < ϵ}}];
Plot[NIntegrate[φ[t - x, 1/8]*h[x], {x, -4, 4}], {t, -4,4}]

3 TedErsek Jan 15 2021 at 06:44

Załóżmy, że chcesz, aby fala prostokątna była wysoka w 20% przypadków. Poniższe informacje są pomocne.

DutyCycle = 0.2; Plot[Piecewise[{{x/(2 DutyCycle), 
x < DutyCycle}, {(1 - 2 DutyCycle + x)/(2 - 2 DutyCycle), 
DutyCycle < 1}}], {x, 0, 1}]

Bazując na tym, możemy w ten sposób stworzyć jeden okres naszej gładkiej fali prostokątnej.

singlePeriod[t_, Smoothness_, DutyCycle_] := Piecewise[{
{ArcTan[Sin[2 \[Pi] t/(2 DutyCycle)]*Smoothness]/
  ArcTan[Smoothness], t < DutyCycle},
{ArcTan[Sin[\[Pi] (1 - 2 DutyCycle + t)/(1 - DutyCycle)]*Smoothness]/
  ArcTan[Smoothness], DutyCycle < 1}
}];  Plot[singlePeriod[t, 12, 0.2], {t, 0, 1}, PlotRange -> All,Exclusions -> None]

Wykonuj powyższe okresowe, używając tego:

smoothPulse[t_,Smoothness_,DutyCycle_]:=singlePeriod[Mod[t,1],Smoothness,DutyCycle]; Plot[smoothPulse[t,12,0.2],{t,0,4},PlotRange->All,Exclusions->None]

Przy odpowiednim użyciu funkcji smoothPulse powyżej, możemy zmienić wartość o wysokiej, niskiej wartości, okres i fazę smoothPulse. Oto przykład:

Plot[2.5+2.5*smoothPulse[12t+0.2,12,0.2],{t,0,0.33333},PlotRange->All,Exclusions->None]