Bonjour,

j'ai 40800 équations linéaires de type sparse ayant la forme suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
F(1)=2*x(1)+x(2)-10;
   F(2)=x(9)+3*x(10)-7;......
   F(40800)=x(40200)-x(1)+....-10;

Mon problème consiste à générer des matrices Aeq et beq à partir de ces équations (Aeq.x=beq) et de les enregistrer dans deux fichiers texte .txt (un fichier pour Aeq et un autre pour beq) afin de les appeler après dans le solveur ga() (algorithme génétique) pour résoudre un problème d'optimisation. Pour cela, j'ai écris le petit code matlab ci-dessous permettant d'évaluer ces équations au niveau de la matrice speye(N);

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
N=40200; % le nombre des variables constituant mon problème
   E=speye(N,N+1);
   columns=cell(1,N);
   beq=-evaluate_equations(E(:,N+1));
   for i=1:N
     columns{i}=evaluate_equations(E(:,i))+ beq;
   end
   Aeq=cell2mat(columns);
   full(Aeq),
   full(beq),
%% Exportation de Aeq vers un fichier .txt
[fichier, chemin] = uiputfile('Aeq.txt','Sauvegarder sous :'); 
if fichier == 0 
    disp('Aucun fichier n''a été désigné !') 
else 
  dlmwrite(fullfile(chemin,fichier),Aeq,'delimiter',' ','precision','%d','newline','pc'); 
end
 
 %% Exportation de beq vers un fichier .txt
  [fichier, chemin] = uiputfile('beq.txt','Sauvegarder sous :'); 
if fichier == 0 
    disp('Aucun fichier n''a été désigné !') 
else 
  dlmwrite(fullfile(chemin,fichier),beq,'delimiter',' ','precision','%d','newline','pc'); 
end
function F=evaluate_equations(x)
   F(1)=2*x(1)+x(2)-10;
   F(2)=x(9)+3*x(10)-7;......
   F(40800)=x(40200)-x(1)+....-10;
   F=F(:); %column vector
Ce code marche nickel quand j'ai peu d'équations. Mais malheureusement Matlab devient très long et coince avec un nombre très grand d'équations (40800 équations). Pourtant j'utilise 8 processeurs afin d'accélérer le calcul. Y'a t-il quelqu'un qui a une idée pour résoudre ce problème? Merci d'avance.