/ / Ako vypočítať konvolúciu funkcie so sebou v MATLAB a WolframAlpha? - matlab, wolfram-mathematica, wolframalpha

Ako vypočítať konvolúciu funkcie sami v MATLAB a WolframAlpha? - matlab, wolfram-mathematica, wolframalpha

Snažím sa vypočítať konvolúciu

x(t) = 1, -1<=t<=1
x(t) = 0, outside

sami pomocou definície.

http://en.wikipedia.org/wiki/Convolution

Viem, ako to urobiť pomocou Matlab funkcie conv, ale chcem použiť integrálnu definíciu. Moja znalosť Matlabu a Wolfram Alpha je veľmi obmedzená.

odpovede:

8 pre odpoveď č. 1

Stále sa učím Mathematica, ale tu je to, čo som prišiel ..

Najprv definujeme funkciu po častiach (používam príklad zo stránky Wikipedia)

f[x_] := Piecewise[{{1, -0.5 <= x <= 0.5}}, 0]

piecewise_function

Umožňuje vykreslenie funkcie:

Plot[f[x], {x, -2, 2}, PlotStyle -> Thick, Exclusions -> None]

function_plot

Potom píšeme funkciu, ktorá definuje konvoluciu f so sebou:

g[t_] = Integrate[f[x]*f[t - x], {x, -Infinity, Infinity}]

convolution_integral

a pozemok:

Plot[g[t], {t, -2, 2}, PlotStyle -> Thick]

convolution_plot


UPRAVIŤ

Snažil som sa urobiť to isté v MATLAB / MuPad, nebol som úspešný:

f := x -> piecewise([x < -0.5 or x > 0.5, 0], [x >= -0.5 and x <= 0.5, 1])

func_def

plot(f, x = -2..2)

func_plot

Keď sa však pokúsim vypočítať celistvosť, trvalo to takmer minútu, aby som to vrátil:

g := t -> int(f(x)*f(t-x), x = -infinity..infinity)

konvolúcie

príbeh (tiež trvalo príliš dlho)

plot(g, t = -2..2)

convolution_plot

Všimnite si, že to isté bolo možné urobiť z vnútra MATLAB so syntaxou:

evalin(symengine,"<MUPAD EXPRESSIONS HERE>")

1 pre odpoveď č. 2

Mathematica má vlastne konvolvovú funkciu. Dokumentácia obsahuje niekoľko rôznych príkladov:

http://reference.wolfram.com/mathematica/ref/Convolve.html?q=Convolve&lang=en


0 pre odpoveď č. 3

Neviem veľa o Mathemacii, takže vám môžem pomôcť (čiastočne) o časti Matlabu.

Ak chcete urobiť konvoluciu s konverziou Matlabuznamená, že to robíte číselne. Čo tým myslíte s integrálnou definíciou, je to, že to chcete robiť symbolicky. Na to potrebujete Matlab Symbolic Toolbox. Toto je v podstate plugin Maple pre Matlab. Takže, čo chcete vedieť, je to, ako to funguje v Maple.

Tento odkaz môže byť užitočný (Wikibooks) pre úvod do aplikácie MuPad v systéme Matlab.

Snažil som sa implementovať svoju funkciu boxu ako funkciu v Matlab as

t = sym("t")
f =  (t > -1) + (t < 1) - 1

Toto však nefunguje, ak je symbol ob symbolický Function "gt" is not implemented for MuPAD symbolic objects.

Mohli by ste vyhlásiť f ako to vidí po častiach (Matlab online pomoc), to však nefungovalo v mojom Matlab. Príklady sú všetky syntaxy Maple, takže by hneď v Maple fungovali.

Aby som to obišiel, použil som

t = sym("t")
s = sym("s")
f = @(t) heaviside(t + 1) - heaviside(t - 1)

Bohužiaľ to nie je úspešné

I = int(f(s)*f(t-s),s, 0, t)

poskytuje

Warning: Explicit integral could not be found.

a neposkytuje explicitný výsledok. Tento výraz môžete stále vyhodnotiť, napr.

>> subs(I, t, 1.5)

ans =
1/2

Ale Matlab / MuPad vám nedokázal poskytnúť explicitný výraz v zmysle t. Toto nie je naozaj neočakávané ako funkcia f je nespojitá. To nie je také jednoduché pre symbolické výpočty.

Teraz by som ísť a pomôcť počítaču, našťastie pre príklad, že ste požiadali o odpoveď je veľmi jednoduché. Konvolucia vo vašom príklade je jednoducho int_0^t BoxFunction(s) * BoxFunction(t - s) ds, Integrant BoxFunction(s) * BoxFunction(t - s) je znova funkcia boxu, jednoducho nie jedna, ktorá prechádza z [-1,1], ale na menší interval (ktorý závisí na t). Potom potrebujete iba integrovať funkciu f(x)=1 počas tohto menšieho intervalu.

Niektoré z týchto krokov by ste museli najprv ručne, potom sa môžete pokúsiť znova zadať do Matlabu. Nemusíte dokonca potrebovať program počítačovej algebry, aby ste sa dostali k odpovedi.

Možno Mathematica alebo Maple môžu skutočne vyriešiťtento problém, pamätajte, že MuPad dodávaný s Matlabom je len zbavená verzia Maple. Možno vám to pomôže ešte vyššie, malo by vám dať predstavu, ako spoločne pracujú veci. Pokúste sa dať fiktívnejšiu funkciu pre f, napr. polynom a mali by ste ho pracovať.