我有一个表达式,例如s = aU + bV,其中a
和b
是标量,U
和V
3分量向量。输出s
显然是一个三分量向量。假设我想绘制s
的第一部分,以了解当我更改a
和b
时它如何变化。
为了进行绘图,我必须使用surf,它对变量a
b
采用矩阵。因此,我尝试使用meshgrid
创建矩阵:
A=0:10;
B=1:10;
[a,b]=meshgrid(A,B);
U=[1,1,0];
V=[1,0,1];
s = a*U + b*V;
这显然是行不通的,因为在这种情况下,矩阵乘积和元素乘积均未得到很好的定义。我实际上如何使表示网格a
b
的矩阵逐个元素地将向量U
和V
相乘?
答案 0 :(得分:3)
您要使用逐元素乘法(.*
),因为您仍希望将a
和b
视为标量(即,单独使用每个元素)。
您可以进行3D输出,其中每个2D切片对应于您的meshgrid
输出,U
和V
的每个分量一个切片。因此,在此示例中,获得了10*11*3
矩阵。
要做到这一点,只需将reshape
,U
和V
个向量的大小设为1*1*3
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]
然后按元素进行乘法
s = a.*U + b.*V;
注意:在MATLAB R2016b之前(引入隐式扩展时),您必须使用bsxfun
来获得等效项:
s = bsxfun( @times, a, U ) + bsxfun( @times, b, V );
然后您可以通过绘制i
来绘制S
的{{1}}的第A
个随B
和s(:,:,i)
而变化的元素。
答案 1 :(得分:1)
您可以使用3D矩阵进行操作:
[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)
% 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