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ď č. 1Stá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]
Umožňuje vykreslenie funkcie:
Plot[f[x], {x, -2, 2}, PlotStyle -> Thick, Exclusions -> None]
Potom píšeme funkciu, ktorá definuje konvoluciu f
so sebou:
g[t_] = Integrate[f[x]*f[t - x], {x, -Infinity, Infinity}]
a pozemok:
Plot[g[t], {t, -2, 2}, PlotStyle -> Thick]
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])
plot(f, x = -2..2)
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)
príbeh (tiež trvalo príliš dlho)
plot(g, t = -2..2)
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ť.