矩阵
- 更新时间2025-08-27
- 阅读时长6分钟
对于矩阵运算(尤其是一些线性代数运算),矩阵数据可存储实数或复数标量数据的行或列,故在矩阵运算中应使用矩阵数据类型,而不是使用二维数组表示矩阵数据。执行矩阵运算的数学VI接收矩阵数据类型并返回矩阵结果,这样数据流后续的多态VI和函数就可执行特定的矩阵运算。如不执行矩阵运算的数学VI可支持矩阵数据类型,则该VI会自动将矩阵数据类型转换为二维数组。如将二维数组连接至默认为执行矩阵运算的VI,根据二维数组的数据类型,该VI会自动将二维数组转换为实数或复数矩阵。
大多数数值函数支持矩阵数据类型和矩阵运算。例如,“乘”函数可将一个矩阵与另一个矩阵或数字相乘。通过基本数值数据类型和复数线性代数函数,可创建执行精确矩阵运算的数值算法。
一个实数矩阵包含双精度元素,而一个复数矩阵包含由双精度数组成的的复数元素。矩阵只能是二维的。不能创建以矩阵为元素的数组。联合两个或两个以上的矩阵创建一个簇时应使用“捆绑”函数。对数组的限制也同样适用于矩阵。
矩阵函数可对矩阵中的元素、行和列进行操作。矩阵函数返回矩阵数据类型。例如,使用索引数组提取一行或一列矩阵,生成一行或一列矩阵,而不是标量值组成的数组。使用“创建矩阵”函数,组合该矩阵和其它数组,生成一个矩阵,而非标量组成的二维数组。
如VI减少了矩阵维数,则需要将数据转换为一维数组或一个双精度浮点数或复数。如使用一维数组或数字重新创建一个二维结构,LabVIEW将生成一个二维数组而非原来的那个矩阵。
下列程序框图使用For循环的自动索引,从矩阵中提取数据,并将矩阵重新构造为二维数组。
启用自动索引时,For循环将矩阵当作二维数组来处理。如在VI中,需使用矩阵数据类型作为输入,可使用矩阵至数组转换函数将二维数组转换为矩阵。如下列程序框图所示。
如需将数据保留为矩阵数据类型,则禁用自动索引,而使用移位寄存器。例如,下列程序框图使用移位寄存器保持矩阵的两个维度。移位寄存器可在循环间传递矩阵数据类型。
许多多态函数支持矩阵数据类型,并会返回矩阵数据类型,即使运算本身是基于数组的。如程序框图中的函数或子VI将矩阵数据类型转换成了二维数组,且数据流中的后续运算基于数组,则将矩阵转换为数组,并对数组数据进行运算,然后在需要时(如使用线性代数VI时)用“数组至矩阵转换”函数将数组转换为矩阵。
| 注:如程序框图中子VI接收矩阵数据类型但返回二维数组,则将数组连接到默认接收矩阵数据类型的多态VI或函数时,无需将得到的数组再转换回矩阵。如将数据存储为矩阵,则“数组至矩阵转换”函数将数据转换回矩阵。 |
创建矩阵输入控件、显示控件和常量
默认状态下,矩阵输入控件和显示控件显示一个以上元素,并且两个维度均显示滚动条。由于矩阵控件属于自定义类型,所以矩阵控件的快捷菜单不包括添加维度和删除维度选项但包括自定义类型的选项。如需在程序框图上创建矩阵常量,则在控件模板中选择矩阵控件置于程序框图上,或从矩阵接线端选择创建常量。矩阵常量可存储常量数据或同另一个矩阵进行比较。
在程序框图中,矩阵数据类型外观与实数二维数组或复数二维数组类似,但它们的连线样式不同。如为支持矩阵数据类型的VI或函数连接一个矩阵数据类型作为其输入,则该VI或函数将自动支持与矩阵相关的各种运算。
对于以下函数,与一个矩阵数据类型的输入连接时,它将被一个包含支持矩阵数据类型的子VI的VI所取代:
- 等于?
- 不等于?
- 绝对值
- 加
- 乘
- 平方根
- 减
- 指数
- 自然对数
- X的幂
- 实部虚部至复数转换
- 复数至实部虚部转换
- 极坐标至复数转换
- 复数至极坐标转换
VI图标没有区别,但其中包括与矩阵相关的算法。如在输入端断开与矩阵数据的连接,该节点仍然为一个VI。再连接其他数据类型至VI的输入端,即可恢复为原函数。如连接一个数据类型至函数导致基本的数学运算失败,函数将返回空矩阵或NaN。例如,将一个维数为2×3的矩阵连接到“加”函数的一个输入端,然后将另一个维数为3×2的矩阵连接到该函数另一个输入端,“加”函数将返回空矩阵。
比较矩阵
“等于?”和“不等于?”函数可比较矩阵。当其输入为矩阵时这些函数在比较集合模式下运行,其比较规则遵循比较数组的规则。
如一个接收多个输入的数值函数接收一个矩阵或二维数组作为其输入,则大多数情况下该函数将返回矩阵数据类型。如函数连线板的输出不是一个二维数组,则该函数将执行数组运算。例如,将一个实数矩阵和一个实数二维矩阵连接到“除”函数,默认情况下该函数将返回一个包含其结果的实数矩阵输出。如连接的是一个实数矩阵和一个复数二维矩阵,则由于输出要求的是复数元素,该函数将返回一个复数二维数组。另一种情况是在所连接的复数矩阵的输入处出现一个强制转换点,表明该函数已为这一运算将实数矩阵转换成一个复数二维数组。
矩阵的默认大小和值
矩阵的大小不可限制为固定个元素。但对于矩阵控件,则可设置其默认大小。
不要将默认大小设置得太大。如果将矩阵的默认大小过大,矩阵中每个元素的默认数据将与VI同时保存并增加VI占用的磁盘空间。
矩阵控件放置在前面板时,其初始状态下为空白矩阵。每个维度均为0,矩阵元素以灰色显示。前面板矩阵控件有两个默认值,即矩阵默认值(浮点或复数)和单元格的默认值。
矩阵默认值与其他前面板控件的默认值相似。该值是VI加载后矩阵的值。调用方VI未连接值时,子VI中的矩阵也使用该默认值。
标量默认值是矩阵扩展时填充矩阵的值。例如,将矩阵索引设置为超出已定义范围的某个值,并在已定义的最后一行后的某行元素中输入一个值,则先前的最后一行与后来输入值所在行之间的所有元素都被设为默认值。
对于矩阵函数,函数进行非法操作时,值将出现在原矩阵或二维数组之外。非法操作时,在范围之外LabVIEW返回或填充的值取决于原矩阵或二维数组的数据和元素类型。非法操作值与扩展矩阵时出现的默认值0有所不同。