四维向量叉乘matlab,请教:四维或者更高维向量的叉乘定义

本文讨论四维向量叉乘的概念和在MATLAB中的实现,提出一种三维扩展的定义,并分享了一个可能的MATLAB代码实现。然而,在测试过程中遇到了计算结果不满足预期的情况,即所得到的向量并不总是与原始三个向量垂直。作者举例说明了这个问题,并寻求解决方案。

叉乘的集合意义是已知道N维空间中的N-1个基向,可以求出与这N-1个基向量正交的另一个基向量吧.

有的书上说叉乘只在3维上有定义,就是vec1和vec2相乘得:

(vec1.y   *   vec2.z   -   vec1.z   *   vec2.y,

vec1.z   *   vec2.x   -   vec1.x   *   vec2.z,

vec1.x   *   vec2.y   -   vec1.y   *   vec2.x   )

其实(我觉得)如果是2维的话那就是一个向量,求它的垂直向量就是叉乘了.

4维向量的叉乘应该是3个向量相乘.按照某些网上的说法来说是这样定义的:

V1   x   V2   x   V3   =

¦i.   j.   k.   l. ¦

¦x1   y1   z1   w1 ¦

¦x2   y2   z2   w2 ¦

¦x3   y3   z3   w3 ¦

其中i,j,k,l是4维空间中的4个基向量.

但我通过程序代码实现后发现测试不对.叉乘我是这么写的:

inline   Vector4   Vector_Util::cross_product(const   Vector4&   vec1,   const   Vector4&   vec2,   const   Vector4&   vec3)

{

/*

V1   x   V2   x   V3   =

¦i.   j.   k.   l. ¦

¦x1   y1   z1   w1 ¦

¦x2   y2   z2   w2 ¦

¦x3   y3   z3   w3 ¦

*/

Real   a   =   vec1.x*vec2.y   -   vec1.y*vec2.x;

Real   b   =   vec1.x*vec2.z   -   vec1.z*vec2.x;

Real   c   =   vec1.x*vec2.w   -   vec1.w*vec2.x;

Real   d   =   vec1.y*vec2.z   -   vec1.z*vec2.y;

Real   e   =   vec1.y*vec2.w   -   vec1.w*vec2.y;

Real   f   =   vec1.z*vec2.w   -   vec1.w*vec2.z;

return   Vector4(   f*vec3.y   -   e*vec3.z   +   d*vec3.w,

f*vec3.x   +   c*vec3.z   -   b*vec3.w,

e*vec3.x   -   c*vec3.y   +   a*vec3.w,

d*vec3.x   +   b*vec3.y   -   a*vec3.z);

}

测试是随便找了3个不共面的向量比如:

(1,2,3,4)(-4,-2,3,1)(10,-8,6,5)

应该叉乘得到的向量始终是和这3个向量垂直的,也就是说和它们分别做点乘应该都是得到0.但为什么算出来老是不对么?

(1,2,3,4)(-4,-2,3,1)(10,-8,6,5)这3个做叉集算出来是

72,-63,266,-36

这个,着实不知道怎么回事了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值