【问题标题】:matlab - error with cross productmatlab - 交叉产品错误
【发布时间】:2012-07-04 03:03:17
【问题描述】:

我遇到了叉积函数的问题。我需要对每个像素取两个向量的叉积,然后对所有像素的结果求和。

 i=1;     
 [h,w,d] = size(current_vec);
 for pxRow = 1:h % fixed pixel row
 for pxCol = 1:w % fixed pixel column
 for pxsize = 1:d 

 for r = 1:h % row of distant pixel
 for c = 1:w % column of distant pixel
 for dpth = 1:d

 bfield(c,r,dpth) = cross(current_vec(c,r,dpth),dist_vec(c,r,dpth));                               % pythagoras theorem to get distance to each pixel                                                                     % unit vector from x to s                     

 end
 end
 end
 Bfield(i) = {bfield}; % filling a cell array with results. read below
 i = i+1;
 end
 end
 end


??? Error using ==> cross at 37
A and B must have at least one dimension of length 3.

??? Error using ==> cross at 37
A and B must have at least one dimension of length 3.

Error in ==> MAC2 at 71
bfield(c,r,dpth) = cross(current_vec(c,r,dpth),dist_vec(c,r,dpth));                               

然而,有问题的向量 current_vec 和 dist_vec 如下:

>> size(current_vec)

ans =

    35    35     3

>> size(dist_vec)

ans =

    35    35     3

就我而言,它们满足了在交叉产品中使用的标准。为什么不是这样?

【问题讨论】:

  • 在对cross 的调用中,您使用current_vec(c,r,dpth)dist_vec(c,r,dpth),它们只是标量,而不是向量。

标签: matlab cross-product


【解决方案1】:

你需要使用cross的向量化形式:

bfield = cross(current_vec,dist_vec);

cross 将在长度为 3 的第一个维度上工作。您使用嵌套循环的方式是通过索引访问单个元素(标量)。标量不能与标量交叉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 2013-01-22
    • 2013-04-19
    • 1970-01-01
    • 2022-01-20
    • 2016-06-15
    • 1970-01-01
    相关资源
    最近更新 更多