标量 - 矢量乘法与meshgrid(Matlab)


故人
2025-03-07 11:58:31 (1月前)
  1. 我有一个表达式,例如s = aU + bV,其中ab是标量和UV 3分量矢量。输出s显然是一个3分量矢量。让我们假设我想绘制s的第一个组成部分......

3 条回复
  1. 0# 没身份别烦我 | 2019-08-31 10-32



    你可以使用3D矩阵来做到这一点:




    1. [A,B] = meshgrid(0:10,1:10);
      U(1,1,:) = [1,1,0];
      V(1,1,:) = [1,0,1];
      s = A.U + B.V;
      % s is now a NxMx3 matrix, where N = length(A) and M = length(B)

    2. % We can plot how s varies with a and b as follows
      surf(A,B,s(:,:,1)); % first component
      surf(A,B,s(:,:,2)); % second component
      surf(A,B,s(:,:,3)); % third component

    3. </code>

  2. 1# 不易青年。 | 2019-08-31 10-32



    你想使用逐元素乘法(

    .

    )因为你还想要治疗

    a



    b

    作为标量(即单独使用每个元素)。



    您可以制作3D输出,其中每个2D切片对应于您的

    meshgrid

    输出,每个组件一个切片

    U



    V

    。因此在这个例子中得到一个

    10
    113

    矩阵。



    要做到这一点,只需

    reshape



    U



    V

    矢量

    1
    1*3

    在尺寸方面




    1. U = reshape( [1,1,0], 1, 1, [] ); % Or equivalently U(1,1,:) = [1,1,0]
      V = reshape( [1,0,1], 1, 1, [] ); % Or equivalently U(1,1,:) = [1,0,1]

    2. </code>


    然后做元素乘法




    1. s = a.U + b.V;

    2. </code>


    注意:在MATLAB R2016b之前(当引入隐式扩展时),您将不得不使用

    bsxfun

    获得等价物:




    1. s = bsxfun( @times, a, U ) + bsxfun( @times, b, V );

    2. </code>


    然后你可以绘制

    i

    的元素

    S

    改变

    A



    B

    通过绘图

    s(:,:,i)



登录 后才能参与评论