Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

i'm trying to plot a graph of a convolution and a discrete convolution, using Mathematica 8

x[t_] := exp[-2*t]*(HeavisideTheta[t + 2] - HeavisideTheta[t]) +  
  (1 - t/2)*(HeavisideTheta[t] - HeavisideTheta[t - 2])
y[t_] := -2*DiracDelta[t + 2] +  2*(HeavisideTheta[t] - HeavisideTheta[t - 2])
c[t_] := Convolve[x[d], y[d], d, t]
Plot[c[t], {t, -4, 4}, PlotRange -> {-4, 4}, PlotStyle -> {Thickness[0.006]}]

This results in an empty graph. Can Mathematica 8 plot convolutions? Same thing happens with discrete convolution.

Any help is appreciated, thanks in advance.

share|improve this question

closed as too localized by m_goldberg, Sjoerd C. de Vries, Jens, Yves Klett, Oleksandr R. Apr 23 '13 at 10:23

This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

    
You probably want to write Exp instead of exp –  Jacob Akkerboom Apr 22 '13 at 22:13
    
You could have noticed that exp was undefined by seeing that it is blue. If you notice something like that you can just type it into the search bar of the documentation center. –  Jacob Akkerboom Apr 22 '13 at 22:37
add comment

1 Answer 1

I'd suggest doing something like this

Clear[x, y, c, d, exp]
x[t_] := Exp[-2*t]*(HeavisideTheta[t + 2] - HeavisideTheta[t]) + (1 - 
     t/2)*(HeavisideTheta[t] - HeavisideTheta[t - 2])
y[t_] := -2*DiracDelta[t + 2] + 
  2*(HeavisideTheta[t] - HeavisideTheta[t - 2])
c[t_] := (c[t] = Convolve[x[d], y[d], d, t]);

kkkk = 4;
arr = Array[c, kkkk*8 + 1, {-4, 4}];
dom = Array[# &, kkkk*8 + 1, {-4, 4}];

ListPlot[Transpose[{dom, arr}], Joined -> True]

But note that HeavySideTheta[0] is not defined.

Remark about the definition of c

It takes a little while to calculate c. Therefore I used the idiom c[t_]:=c[t]=expr which stores values you have already calculated. Not really necessary as I also store your values in an array, but oh well.

Better alternative

You can use the algebraic capabilities to simplify the definition of c first. Then it will no longer take long to calculate values of c. Set

Clear[x, y, c, d, c2]
x[t_] := Exp[-2*t]*(HeavisideTheta[t + 2] - HeavisideTheta[t]) + (1 - 
     t/2)*(HeavisideTheta[t] - HeavisideTheta[t - 2])
y[t_] := -2*DiracDelta[t + 2] + 
  2*(HeavisideTheta[t] - HeavisideTheta[t - 2])

(*takes a while*)
c2[t_] := Evaluate[FullSimplify[Convolve[x[d], y[d], d, t]]]

Then you can simply do

Plot[c2[t], {t, -4, 4}, PlotRange -> {{-4, 4}, Automatic}, 
 PlotStyle -> {Thickness[0.006]}]

to get your plot.

share|improve this answer
    
Thanks for your time, i really appreciate it. How long does it take to calculate c? 1,2,15 minutes? I'm curious about the average time... –  Nicholas Apr 22 '13 at 22:46
    
@Nicholas You're welcome. It depends on the argument of c how long it takes. To calculate 9 values of c in the range {-4,4} took about 30 seconds I guess. You can use Clear[c];AbsoluteTiming[Array[c, kkkk*8 + 1, {-4, 4}]][[1]] if you want to see how long it took. It also takes less than a minute to complete the (definition using) FullSimplify. –  Jacob Akkerboom Apr 22 '13 at 22:51
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.