In the course of coding I came across the following curious example:
classdef lu_apply properties f; end methods function obj=lu_apply(A) [L,U]=lu(A); obj.f=@(X) U\(L\X); end end end
The following test run is confusing me:
>> A=rand(100); x=rand(100,1); foo=lu_apply(A);>> whos Name Size Bytes Class Attributes A 100x100 80000 double foo 1x1 136 lu_apply x 100x1 800 double >> norm(foo.f(x)-A\x)ans = 0
What's bothering me is that it would seem as though the L and U have to be stored somewhere, but it's not at all clear to me where that is. The only other possibility would be to compute the L and U at each call, but the LU routine is only called when the class is constructed. My questions are… where are the L and U located, if anywhere? And if they are somewhere, when is the memory freed? Also, is there anyway to remedy this, should I ever want to free the memory manually (first thing that comes to mind is to declare L and U to be global)?
Best Answer