Plotting the movement of vector
7 次查看(过去 30 天)
显示 更早的评论
I have implemented a function where I take M matrix and apply it to a random 2d vector x. As for loop increments I would like to plot the movement of the vector x. So x, Mx, m^2x... as positions in 2d space. I have already written the function and would like suggestions/pointers to complete it.
function vector_pos(M)
for k = 1:10
v = randi(10, 2, 1); %generate random 2d vector%
x = v * M; %applies matrix M to 2D vector%
figure();
plotv(x,'o'); %suppose to plot the position of the vector%
pause;
end
end
Thank you.
2 个评论
James Tursa
2016-10-28
I don't understand why v starts as a 2x2 matrix. Why isn't it a 2x1 vector? Your code doesn't seem to match your description.
回答(1 个)
Walter Roberson
2016-10-29
function vector_pos(M)
assert( isequal(size(M), [2 2]);
v = randi(10, 2, 1); %generate random 2d vector%
x = ones(2, 1);
for k = 1:10
x = M * x; %applies matrix M to 2D vector%
figure();
plotv(x,'o'); %suppose to plot the position of the vector%
pause;
end
end
Notice that I switched to left multiplying from right multiplying.
With your input vector being 2 x 1, when you right multiply, in order to get out a 2 x 1 vector, M would have to be a scalar to satisfy the dimensions: (2 x 1) * (1 x N) -> 2 x N and since output must be 2 x 1, N = 1, so the M would have to be 1 x 1.
With left multiplying, then you get (N x 2) * (2 x 1) -> N x 1 and since that must be 2 x 1, that gives M as 2 x 2 .
If you want to right multiply then you need to switch your v and x to be 1 x 2 instead of 2 x 1. But note your own notation in the question, where you show m^2x. which is left multiplication not right multiplication.
2 个评论
Walter Roberson
2016-10-30
The code calls
plotv(x,'o'); %suppose to plot the position of the vector%
which does whatever it does. Are you using https://www.mathworks.com/help/nnet/ref/plotv.html ? That routine expects 2 by something, and 2 x 1 like you use is valid for it, but it would plot only one vector in such a case.
There would not seem to be a lot of benefit to having both figure() and pause() in your loop: the figure() would result in creating a new figure and if each output is in a new figure there is no need to pause between them. You should consider removing the figure() call and replacing pause with drawnow() . Or perhaps you should store all of the values and call plotv() only once at the end... it is not clear to us what your expected results are.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Graphics Performance 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!