在Matlab中绘制A ^ x * v中向量的第一个元素(矩阵幂)

时间:2013-02-25 03:00:04

标签: matlab matrix plot adjacency-matrix

我想绘制A^x * v,其中A是方形矩阵表示图表中的邻接矩阵,x是步数,v是初始向量。

我的目标是绘制每个结果向量的第一个元素;也就是说,我想要A*v[1], A^2*v[1], A^2*v[1]

我试过

x = 1:1:50 
y = A^x*v
plot(y(1),x)

但得到了

Error using  ^ 
Inputs must be a scalar and a square matrix.
To compute elementwise POWER, use POWER (.^) instead.

我理解错误,但不明白如何解决这个问题,只是关闭Matlab的情节示例。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

如果你想要几乎一个班轮:

x = 1:1:50;
f = @(z) z(1);
plot(x, arrayfun(@(n) f(A^n*v), x))

您尝试过的错误来自A^xx不能是矢量,它必须是标量,因为A是一个方阵。有关详细信息,请参阅help of mpower

答案 1 :(得分:2)

保存一些计算怎么样?
要获取第一个元素,您无需计算整个产品A*v

x = 1:1:50;
f = (n) A(1,:) * ( A^(n-1) ) * v; % returns a scalar - no redundant computation
plot( x, arrayfun( f, x ) ); 

答案 2 :(得分:1)

@Simon's答案的修改,使用subsref而不是匿名函数。

x = 1:1:50;
s.type = '()';
s.subs = {1};
plot( x, arrayfun( @(n) subsref( (A^n)*v, s ), x ) );

另请参阅this answer关于subsref