【问题标题】:Plot first element of vector in A^x * v in Matlab (matrix powers)在 Matlab 中绘制 A^x * v 中向量的第一个元素(矩阵幂)
【发布时间】:2013-02-25 03:00:04
【问题描述】:

我要绘制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 的绘图示例。

提前感谢您的帮助!

【问题讨论】:

  • A的尺寸是多少?
  • A 发生变化,但具体情况是 10 x 10。
  • 您需要在 x 上执行 for 循环,而不是尝试一次执行所有指数。我不知道如何对该操作进行矢量化。
  • A不是方阵时,A^n没有定义。这就是错误出现的原因。
  • @Parag,A是正方形,问题是x不是标量。

标签: matlab matrix plot adjacency-matrix


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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 ) ); 
    

    【讨论】:

      【解决方案3】:

      @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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        相关资源
        最近更新 更多