Guest User

Untitled

a guest
Mar 14th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 2.02 KB | None | 0 0
  1. a = sqrt(2);
  2. G = [
  3. 1 0 0 1 0 0 1 0 0;
  4. 0 1 0 0 1 0 0 1 0;
  5. 0 0 1 0 0 1 0 0 1;
  6. 1 1 1 0 0 0 0 0 0;
  7. 0 0 0 1 1 1 0 0 0;
  8. 0 0 0 0 0 0 1 1 1;
  9. a 0 0 0 a 0 0 0 a;
  10. 0 0 0 0 0 0 0 0 a;]
  11.  
  12. // (3)
  13. [U, S, V] = svd(G);
  14.  
  15. // (4)
  16. r=rank(G); // rang = 7
  17.  
  18. // (5)
  19. // Les deux dernieres colonnes de V sont les deux vecteurs
  20. // du null space
  21.  
  22. Up = U(:,1:r);
  23. Sp = S(1:r, 1:r);
  24. Vp = V(:,1:r);
  25. V0 = V(:,r+1:r+2);
  26. Ginvg = Vp * inv(Sp) * Up'
  27.  
  28. // (6)
  29. M1 = V(:, r+1); M2 = V(:, r+2);
  30. M1 = matrix(M1, 3, 3); M2 = matrix(M2, 3, 3);
  31.  
  32.  
  33. // On voit que la somme des éléments sur les colonnes, diagonales et lignes
  34. // vaut 0 : cela s'explique par le fait que Dpred = GMp + GM0
  35. // On voit bien qu'ici M0 vaut 0, et donc ne contribue en rien dans le modèle.
  36.  
  37. // (7)
  38. Rm = Vp*Vp';
  39. sumcolsRm = sum(Rm, 'c'); // =1
  40. sumrowsRm = sum(Rm, 'r'); // =1
  41. // D_true = GM_true
  42. // M_est = inv(G_t G) G_t D_obs
  43. // Quand on suppose que D_obs = D_true on a donc
  44. // M_est = inv(G_t G) G_t G M_true
  45. // M_est = Rm M_true
  46. // Si M_est = M_true, alors la matrice Rm est diagonale.
  47. // Dans notre exemple, ce n'est pas le cas et on a une dispersion.
  48. // Mais la somme des colonnes est égale à 1, c'est logique.
  49.  
  50. Rmdiag = matrix(diag(Rm), 3, 3);
  51. // On voit que, pour cette matrice, seule le modèle m33 est parfaitement défini
  52. // cela s'explique par le fait que le dernier rayon passe UNIQUEMENT à travers
  53. // M33, ce qui permet de le définir de manière parfaite.
  54.  
  55. // (8)
  56. Rd = Up*Up';
  57. sumcolsRd = sum(Rd, 'c'); // = 1
  58. sumrowsRd = sum(Rd, 'r'); // = 1
  59. // La somme des colonnes et des lignes vaut 1 :
  60. // Dans le genre : La dispersion sur les données, au même titre que Rm
  61. // fait qu'on a pas une diagonale parfaite :
  62. // d_obs != d_true et on a donc une dispersion autour de la diagonale
  63.  
  64. //calcul de l'inverse généralisé
  65. Ginvg = Vp*inv(Sp)*Up';
  66.  
  67. //test d'un modèle ( 0 0 0 0 1 0 0 0 0 )
  68. M = [0 0 0 0 1 0 0 0 0];
  69. D = G*M';
  70. Mapprox = Ginvg * D ;
  71.  
  72. // (10) ajout de bruit gaussien
  73. Dnoisy = D+ rand(8, 1, 'uniform')*0.1;
  74.  
  75. Mapprox2 = Ginvg*Dnoisy ;
Add Comment
Please, Sign In to add comment