2

我想绘制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 的情节示例。

在此先感谢您的帮助!

4

3 回答 3

4

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

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

您尝试的错误来自A^xx不能是向量,它必须是标量,因为A是方阵。有关更多信息,请参阅帮助。mpower

于 2013-02-25T03:55:24.960 回答
2

节省一些计算怎么样?
要获得第一个元素,您不需要计算整个 product 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 ) ); 
于 2013-02-25T07:48:38.830 回答
1

使用而不是匿名函数对@Simon 的答案进行了修改。subsref

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

另请参阅有关subsref.

于 2013-02-25T08:06:14.143 回答