Advertisement
Guest User

Untitled

a guest
Sep 1st, 2015
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. function [x, mul_dx_dA, mul_dx_db] = solve_rect(A, b)
  2. % solve_rect returns x that minimises |A x - b|^2
  3. % x = (A' A)^-1 A' b
  4. % and operators that compute derivatives with respect to A and b.
  5. % It uses a QR decomposition of A.
  6. %
  7. % Parameters:
  8. % A has size [m, n] with m >= n and rank(A) = n.
  9. % b has size [m, 1].
  10. %
  11. % Returns:
  12. % x has size [n, 1].
  13. % v = mul_dx_dA(U)
  14. % u has size [m, n].
  15. % v has size [n, 1].
  16. % v = mul_dx_db(u)
  17. % u has size [m, 1].
  18. % v has size [n, 1].
  19.  
  20. % Old method using explicit inverse.
  21. % G = A' * A;
  22. % C = inv(G);
  23. % x = C * (A' * b);
  24. % mul_dx_db = @(v) C * (A' * v);
  25. % mul_dx_dA = @(V) C * (V'*(b-A*x) - A'*(V*x));
  26.  
  27. [Q, R] = qr(A, 0);
  28. % A = Q R, Q' Q = I (but not Q Q' = I)
  29. % A' A x = A' b
  30. % R' R x = R' Q' b
  31. % R x = Q' b
  32. x = R \ (Q' * b);
  33. mul_dx_dA = @(V) R \ (R'\(V'*(b-A*x)) - Q'*V*x);
  34. mul_dx_db = @(v) R \ (Q' * v);
  35.  
  36. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement