Convolution in 1d

I need to compute a convolution in 1d \\int\_{0}^{t}g(t-s)u(s) ds for simplicity I take g=u=\\exp(-s), the exact convolution is t \\exp(-t). I tried to adapt the freedom code Convolution-Sample.edp to the 1D case, but the error approximation is large, as shown in the attached figure.

Attached here are

conv1d-v1.edp (529 Bytes)

Convolution-Sample.edp (1.5 KB)

the two codes and the figure.

Note that when the function g has a small compact support,

see the attached figure the result is the same that I obtained using chebfun/Matlab

the matlab result

Hello,
You need to take care of the domain of integration. Here is a correction

load "msh3"
load "Element_P3"
// Compute the convolution: (g*u)(t)= \int_{0}{t}g(t-s)u(s) ds
 
meshL Th=segment(200,[10*x]);
fespace Vh(Th,P3);

func g = (x>0)? exp(-x) : 0.;
func u = (x>0)? exp(-x) : 0.;
func v = x*exp(-x);   // the exact convolution for u = g = exp(-s)
Vh vh=v;
Vh uh=u;
Vh gh=g;

func real  conv1d(real a) {  return int1d(Th)(gh(a-x)*uh); }
Vh convu = conv1d(x);
Vh xTh = x;

plot([xTh[],vh[]],[xTh[],convu[]], wait=true,cmm=" exact and approx u*g");
real err=sqrt(int1d(Th)((vh-convu)^2));
cout << " the L2 error is " << err << endl;

I sincerely thank you, Prof. Bouchut, for your valuable help in identifying the error in my code. Your guidance was very helpful*.*

Best regards.