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
k est une matrice de taille 500x500 (symétrique def positive)
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
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 :
est quasi instantané (10^-5 s)
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);
mais un simple produit
prend 8s...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ublas::compressed_matrix<ScalarType> ktk = prod(k,k);
ya til quelquechose que je fais mal?
Partager