Bonjour à toutes et à tous.
Après plusieurs recherches infructueuses sur developpez.com et sur internet en général, je viens vers vous car je n'arrive à trouver de solution acceptable à mon problème. Je précise également que je ne dispose pas de la Symbolic Math tool box .
J'ai 4 fonctions placée dans des fichiers -m-. 3 de ces fonction me renvoient un vecteur ligne et la 4ème une simple fonction. Par exemple :
C1(x) = [sin(1*x) sin(2*x) ...]
D11(x) = [...]
D12(x) = [...]
Q(x) = 1
J'aimerai calculer le terme suivant :
intégrale entre x1 et x2 de
[C1(x)';D11(x)';D12(x)']*Q(x)*[C1(x),D11(x),D12(x)]
Pour ce faire j'ai crée une fonction Gamma(x) telle que
Gamma(x) = [C1(x)';D11(x)';D12(x)']*Q(x)*[C1(x),D11(x),D12(x)]
Ensuite je crée une matrice de même taille que Gamma (la matrice Y) et calcul alors chaque intégral d'un terme de Gamma par la méthode trapz.
Le problème de cette solution et que je n'en ai encore jamais vu la fin : temps de calcul excessivement long (largement plus de 20 minutes)
Auriez-vous des idées pour avoir un temps de calcul acceptable ? Voilà le code ci dessous :
Je précide que dans ce cas taille = 22 et param.L = 60
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 taille = 2*param.nbMODE+2*param.nbPZT; Y = zeros(taille); temp = zeros(1,size(0:0.01:param.L)); for i = 1:taille for j = 1:taille k=1; for x = 0:0.01:param.L G = Gamma(x,param); temp(k) = G(i,j); k = k+1; end X = 0:0.01:param.L; Y(i,j) = trapz(X,temp); end end
Merci par avance pour votre aide, et bonne continuation à tous !
Partager