Reducing memory storage through matrix computation
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I need to compute a matrix and the following code does exactly what I want. However, the operator creates O(n^2) storage but I want it to store the matrix linearly i.e., create O(n) storage (less storage space). I think this could be done using permutations but how could you modify the code in those terms:
ele=100;
x=(0:ele)'/2;
nlength= length(x);
p=ones(nlength,1);
for i=1:nlength-1
p=horzcat(p,x.^i);
end
g=p*x;
2 Kommentare
Antworten (1)
Matt J
am 2 Mär. 2014
Bearbeitet: Matt J
am 2 Mär. 2014
If you only intend to operate on vectors, by matrix-vector multiplication, you could use MatrixObj as below (or just use POLYVAL directly),
p=MatrixObj;
p.Ops.mtimes=@(~,y) polyval(flipud(y), x);
p.Ops.size=[nlength,nlength];
However, I don't see when it would ever be practical to use such a matrix for very large n. Expressions like x.^n are very numerically sensitive when n is large.
2 Kommentare
Matt J
am 2 Mär. 2014
Bearbeitet: Matt J
am 2 Mär. 2014
I didn't understand your comment. The code you've posted is equivalent to the single line,
g=polyval(flipud(x),x);
So, if you want to use built-in functions only, this would be the way.
The advantage of MatrixObj is that it allows you to do the same thing with the same matrix multiplication syntax as in your original code,
p=MatrixObj;
p.Ops.mtimes=@(~,y) polyval(flipud(y), x);
p.Ops.size=[nlength,nlength];
g=p*x;
which sounded like what you were looking for.
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!