Bonjour,
J'ai un petit soucis en utilisant la fonction conv(,). Voici mon programme:
A chaque essai (et ce pour différentes fonctions, intervalle et pas) Matlab me donne bien une réponse dont la forme est correcte (semblable au produit de convolution calculé à la main) mais il n'a pas la bonne échelle selon l'axe Y. Par exemple plus dx est petit (0,1 par example) plus le produit de convolution aura un maximum élevé ce que je n'arrive pas à expliquer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 clc; close all; u=@(x)heaviside(x); v=@(x) exp(-2*x).*heaviside(x); dx=1; x=0:dx:120; u_x=u(x); v_x=v(x); w=conv(v_x,u_x); z=0:dx: (length(x)*2-2)*dx; figure hold on plot(x,v_x,'b-',x,u_x,'g-') plot(z,w,'r-') plot(x,1/2*(1-exp(-2*x)).*heaviside(x),'y-')
Si vous compilez vous aurez: en vert et bleu les fct de départ, en rouge le produit de convolution calculé par matlab et en jaune la réponse exacte.
Lorsque l'on regarde ce que matlab fait on trouve que pour w(3) il a fait w(3)=u(1)*v(3)+u(2)*v(2)+u(3)*v(3) ce qui explique que lorsque mon pas diminue je trouve max(w) de plus en plus grand mais ça ne correspond pas à la définition du produit de convolution selon l'intégrale telle que décrit ici: http://fr.wikipedia.org/wiki/Produit_de_convolution
Suis je entrain d'utiliser la mauvaise fonction? Ou le pas doit-il être fixé à une certaine valeur pour que cov(u,v) corresponde bien à l'intégrale?
Je me dis qu'il faut peut-être passer en fréquentiel par fourier puis produit scalaire puis transformée de fourier inverse pour revenir en temporel...
D'avance merci pour votre aide!
Partager