Bonjour,

je suis en train de réaliser un algorithme contraint par le temps (10s).
J'ai tout d'abord fait une version octave, qui run excessivement vite : voici la fonction
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
 
function [ff, b] = solveW(k, X, Y)
  onesVector(1:size(k,1)) = 1;
  C = 10^(-3);
  matrix = [
    k'*k+C*eye(size(k,1)) k'*onesVector';
    onesVector*k length(onesVector)
  ];
 
  v=[
    k'*Y';
    sum(Y)
  ];
  a = matrix\v;
  ff = a(1:length(X(1,:)));
  b = a(length(X(1,:))+1);
end
k est une matrice de taille 500x500 (symétrique def positive)
x et y des vecteurs 500.
les deux particularités sont la creation de la matrice matrix, ainsi que l'inversion.
runner cette fonction prend a peu pres 0.4s.

lorsque j'enquille beaucoup beaucoup plus simple avec ublas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
  ublas::compressed_matrix<ScalarType> matrix(M+1, M+1);
  ublas::vector<ScalarType> ones(M,1);
  ublas::vector<ScalarType> lastCol(M);
  ublas::vector<ScalarType> B(M+1);
  ublas::vector<ScalarType> solved(M+1);
est quasi instantané (10^-5 s)
mais un simple produit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
  ublas::compressed_matrix<ScalarType> ktk = prod(k,k);
prend 8s...

ya til quelquechose que je fais mal?