我想绘制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的情节示例。
提前感谢您的帮助!
答案 0 :(得分:4)
如果你想要几乎一个班轮:
x = 1:1:50;
f = @(z) z(1);
plot(x, arrayfun(@(n) f(A^n*v), x))
您尝试过的错误来自A^x
:x
不能是矢量,它必须是标量,因为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
。