bonjour!
j'effectue mon PFE dans une entreprise et je reprend le code déjà écrite par un autre étudiant.le code est écrit en matlab et on utilise comsol pour générer les matrice.
mais j'utilise octave pour compiler car y a un soucis entre matlab/comsol.
le problème est que le code ne donne pas les bonnes valeurs et des erreurs d'ordre 1%.
il me retourne ceci: "warning: axis: omitting nonpositive data in log plot"
je souhaite trouver un moyen de calculer les + petites et plus grandes valeurs propres généralisées sur des matrices creuses de grande taille (ce que fait eigs en théorie !).
un professeur m'a suggéré d'utiliser la librairie SLEPc . Comme c'est du C++ la solution la plus simple, si ça marche est d'utiliser un "binder" python appelé slepc4py.
j'ai déjà télécharger la librairie reste à tester et à écrire le code qui fait la glue entre notre code octave / comsol ... et slepc ....
mon problème est que je ne sais pas trop comment écrire le code.
voici le code que j'utilise et la fonction eigs ne marchera pas:
je pourrai vous envoyé le reste des codes.
je vous remercie
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
22
23
24
25
26
27
28
29
30
31 function [y, cte_c] = y_etoile(mu,A0,A) % Ks matrice de rigidité totale calcule en rassemblant la décomposition affine % ASCALH1, matrice produit scalaire global ASCALH1; global s; t5=clock; fprintf('y_etoile : Calcul v.p et vecteurs propres ....'); H1=full(ASCALH1); Nbr=size(A0,1); Q=size(A,2)/size(A,1) ; Ks=A0; for q=1:Q Ks = Ks + Theta_A(q,mu).*A(:,(q-1)*Nbr+1:q*Nbr); end; Kss=0.5.*(Ks+Ks'); %[vectp lambda]= eigs(Kss,ASCALH1,1,'sm',s); [w, lambda]= eig(full(Kss),H1); [cte_c, indice]= min(diag(lambda)) ; vectp=w(:,indice); % vecteur associée à la plus petite valeur propre calculé. y(1)= (vectp'*A0*vectp)./ (norme_H1(vectp))^2; for q=1:Q Aq=A(:,(q-1)*Nbr+1:q*Nbr); y(q+1)= (vectp'*Aq*vectp)./(norme_H1(vectp))^2; end; end
Partager