首页 > 解决方案 > Maxima:如何区分矩阵的行和行向量?

问题描述

我想构建一个可以将向量(即 1xm 或 nx1 矩阵)或矩阵的列/行作为输入的函数;然而,我想出了一些看起来有点奇怪的东西:即使 maxima 将向量作为具有 1 行或 col 的矩阵处理,它对引用它们的元素有不同的要求。

例如:

aMatrix:matrix([1,2,3],[4,5,6]);
matrixVec: aMatrix[1];
aVec:matrix([1,2,3]);

现在,即使matrixVecandaVec是 a) 从matrix函数获得的,并且具有相同的维度(由length()and确定length(transpose()),引用它们的元素需要完全不同的符号: matrixVec[1,1];返回错误;而aVec[1,1];返回 1,正如预期的那样。

我想我明白为什么会这样;但是,因为这两个对象都truematrixp(并且具有相同的尺寸)返回,所以我不知道如何在我的代码中区分它们,以便我可以定义正确的处理方式。

我可以使用什么样的 if 语句来区分这两者,以便我可以value = x[i]为矩阵和value = x[1,i]行向量定义?

标签: functionmatrixvectormaximawxmaxima

解决方案


在处理其他事情时偶然发现了一个解决方案:事实证明,Maxima 将矩阵的行或列视为列表,尽管它不将行或列向量视为列表,即给定

aMatrix : matrix([1,2,3],[4,5,6]);
matrixVec : aMatrix[1];
aVec : matrix([1,2,3]);

listp(matrixVec)返回“真”,而listp(aVec)返回“假”。

ielistp()可用于将 1xm 或 nx1 矩阵与矩阵的行或列区分开来。


推荐阅读