2

似乎出于某种原因,Excel 程序员选择省略任何向量叉积功能。

此外,在网上看,对它的需求并不多。虽然excel是做线性代数的强大工具。

我需要一个 VBA 脚本来做向量交叉产品。我唯一能找到的是从这里:

编辑:

  1. 要添加 VBA 脚本,请按 Alt + F11
  2. 在 Project 下,右键单击 VBAProject 和 Insert->Module
  3. 保存,单击否以另存为启用宏的工作簿
  4. 另存为 .xlsm 文件

https://www.excelbanter.com/excel-worksheet-functions/209233-how-do-you-use-visual-basic-find-cross-product-two-vectors.html

--------------------
Function vCP(v1 As Variant, v2 As Variant) As Variant
vCP = Array(v1(2) * v2(3) - v1(3) * v2(2), _
v1(3) * v2(1) - v1(1) * v2(3), _
v1(1) * v2(2) - v1(2) * v2(1))
End Function
--------------------

使用起来很简单,

  1. 选择3个水平相邻的单元格,输入公式
  2. =vCP(
  3. 选择位于 3 个连续水平或垂直单元格中的向量 A(在 A x B 中)
  4. 类型,
  5. 选择向量 B,它是 3 个连续水平的垂直单元格
  6. 类型)
  7. 按 Ctrl+Shift+Enter

我对其进行了几次测试,它可以工作,但它输出的是水平向量,而不是垂直向量,这是线性代数首选的方式。

有谁知道如何更改此脚本,以便可以垂直输出 3D 矢量?

有没有更好的方法在 Excel 中获得叉积?

感谢:D

4

2 回答 2

1

使用 Application.Transpose:

Function vCP(v1 As Variant, v2 As Variant) As Variant

vCP = Application.Transpose(Array(v1(2) * v2(3) - v1(3) * v2(2), _
v1(3) * v2(1) - v1(1) * v2(3), _
v1(1) * v2(2) - v1(2) * v2(1)))
End Function
于 2017-10-03T18:34:27.823 回答
0

我尝试使用上面的代码生成转置,函数名称为 vCP2,但生成了一个 REF#!错误。

经过多次尝试,我意识到原来的 Function vCP(保留在模块中)和转置版本 vCP2 之间存在名称冲突。我终于通过重新命名转置版本CPv解决了这个问题。我不明白名称冲突是如何产生的。

于 2020-04-17T23:09:43.007 回答