您的位置:

左乘矩阵:行变换还是列变换?

一、左乘矩阵是行变换还是列变换例题

#include 
#include 
   
using namespace Eigen;
using namespace std;
int main()
{
  Matrix3f A;
  A << 1,2,3,4,5,6,7,8,9;
  Matrix3f B;
  B << 3,2,1,6,5,4,9,8,7;
  cout << "Matrix A:" << endl << A << endl;
  cout << "Matrix B:" << endl << B << endl;
  Matrix3f C = A*B;
  cout << "Matrix C = A*B:" << endl << C << endl;
  return 0;
}

   
  

如上所示,我们定义了两个3x3的矩阵A和B,并让A左乘B,得到了新的矩阵C。通过运行上面的代码,我们可以得到矩阵C的值为:

Matrix C = A*B:
  42  36  30
  96  81  66
 150 126 102

上面的结果表明,左乘矩阵是执行列变换还是行变换呢?我们可以通过观察矩阵B的每一列可以看出:B的第1列(3,6,9)分别乘上A的每一行(1,2,3),并相加得到了C的第1列(42,96,150)。因此,可以得出左乘矩阵是执行列变换。

二、矩阵左乘是行变换还是列变换

从定义上来说,矩阵左乘是指将一个矩阵乘以另一个矩阵,并将结果存储在新矩阵中。在矩阵左乘过程中,我们将乘数放在被乘数的左边。矩阵左乘是执行列变换还是行变换呢?

我们可以通过第一节提到的矩阵乘法例题来进一步探究这个问题。假设我们有一个3x3的矩阵A和一个3x2的矩阵B:

Matrix3f A;
A << 1,2,3,4,5,6,7,8,9;
MatrixXf B(3,2);
B << 1,2,3,4,5,6;

我们可以将B的每一列(1,3,5)分别乘以A的每一行(1,2,3),并相加生成C的第1列(22,49,76);B的第2列(2,4,6)同理可以乘以A的每一行(1,2,3)。因此,我们可以得出矩阵左乘是执行列变换。

三、矩阵行变换是左乘还是右乘

在高斯消元方法中,我们通常使用矩阵行变换来求解线性方程组。矩阵行变换是通过将系数矩阵与一个初等矩阵相乘来实现的。那么这个初等矩阵是左乘还是右乘系数矩阵呢?

根据定义,矩阵行变换是指对矩阵进行一系列的加减乘除操作,来改变矩阵的形式。由于我们是将系数矩阵和一个初等矩阵相乘,因此左乘初等矩阵可以实现矩阵行变换。

下面是一个简单的例子,我们使用高斯消元求解线性方程组:

Matrix3f A;
Vector3f b;
A << 1,2,3,  4,5,6,  7,8,10;
b << 3,6,9;
cout << "解方程 Ax=b, A=\n" << A << endl << "b=\n" << b << endl;
Vector3f x = A.fullPivLu().solve(b);
cout << "解得 x=\n" << x << endl;

在highgui消元求解线性方程组的过程中,我们使用fullPivLu函数将系数矩阵A变为上三角矩阵,并将右侧向量b也进行同样的变换。这个变换是通过左乘一个初等矩阵实现的,而初等矩阵的左乘可以实现矩阵行变换。

四、左乘可逆矩阵是行变换还是列变换

我们说一个矩阵可逆是指其行列式不为0。考虑一个可逆矩阵A,若左乘一个可逆矩阵B得到了新的矩阵C,那么左乘矩阵B是执行行变换还是列变换呢?

根据矩阵乘法的分配律,我们可以将左乘的可逆矩阵B分拆成一系列的初等矩阵相乘的形式:

B = E1*E2*...*En

其中,E1...En都是可逆的初等矩阵。因为可逆矩阵的逆矩阵也是可逆矩阵,并且左乘可逆矩阵时可逆矩阵可以分解成一系列的初等矩阵相乘的形式,所以左乘可逆矩阵是既可以执行行变换又可以执行列变换。

五、矩阵列变换和行变换是一样的吗

在高斯消元中,我们实现矩阵行变换来求解线性方程组。有些同学可能会和我一样想:“如果行变换可以实现,那么列变换可以吗?”

事实上,通过左乘一个矩阵,我们既可以执行行变换,也可以执行列变换。如果我们左乘一个矩阵,那么相当于对这个矩阵的每一行进行操作。

六、矩阵的变换和行列式变换的区别

矩阵变换和行列式变换在涉及到矩阵乘法时,本质上是不同的。行列式变换可以通过交换行或列、乘以一个非零标量以及加上另一行的k倍来改变矩阵的行列式。而矩阵变换是通过左乘一个矩阵来改变矩阵的形式和性质。

七、为什么行变换是左乘

在高斯消元中,我们想要将系数矩阵A化为上三角矩阵,然后通过回带求解线性方程组。为此,我们需要对A应用一系列的矩阵行变换。那么为什么我们要左乘矩阵来实现行变换呢?

其实这个问题的答案很简单。左乘矩阵实现行变换是因为:我们通常假设列向量为变量,而在求解线性方程组时,我们希望行变换不会改变变量顺序。如果我们使用右乘矩阵来实现行变换,那么矩阵是作用在列上的,可能会导致变量的顺序发生变化。

八、左乘初等矩阵行变换

在高斯消元中,我们使用初等矩阵来实现行变换。初等矩阵有三种类型:交换行、某行乘以非零标量、某行加上另一行的k倍。在具体实现上,我们可以通过左乘一个初等矩阵实现这些变换:

Matrix3f A;
A << 1,2,3,  4,5,6,  7,8,10;
Matrix3f E1 = Matrix3f::Identity();
E1.row(1) << 0,1,0;
Matrix3f A1 = E1*A;

如上所示,我们定义了一个3x3的矩阵A,并使用单位矩阵创建了一个交换第2和第3行的初等矩阵E1。通过将E1左乘到A上,我们可以得到经过行变换后的矩阵A1。同理,我们可以通过定义另外两个初等矩阵来实现非零标量乘和行加。

九、初等矩阵在左边是列变换吗

初等矩阵有三种类型:交换行、某行乘以非零标量、某行加上另一行的k倍。根据定义,我们都是左乘一个初等矩阵。事实上,左乘初等矩阵不仅可以实现行变换,还可以实现列变换。如下所示:

Matrix3f A;
A << 1,2,3,  4,5,6,  7,8,10;
Matrix3f E2 = Matrix3f::Identity();
E2.col(1) << 0,1,0;
Matrix3f A2 = A*E2;

如上所示,我们定义了一个3x3的矩阵A,并使用单位矩阵创建了一个交换第2和第3列的初等矩阵E2。通过将A右乘到E2上,我们可以得到经过列变换后的矩阵A2。

十、矩阵行变换和列变换能一起用吗

根据定义,左乘矩阵可以执行列变换,左乘初等矩阵可以执行行变换。那么左乘一个矩阵可以同时执行行变换和列变换吗?答案是肯定的,我们只需要通过一个复合矩阵即可实现行变换和列变换。

假设我们有一个3x3的矩阵A,现在我们想要执行以下操作:

  • 将第1行乘以2
  • 将第2列交换为第3列

显然,我们需要左乘一个初等矩阵E1来实现第一个操作,左乘一个初等矩阵E2来实现第二个操作。我们可以通过构造复合矩阵B来实现上述操作:

Matrix3f A;
A << 1,2,3,  4,5,6,  7,8,10;
Matrix3f E1 = Matrix3f::Identity();
E1.row(0) << 2,0,0;
Matrix3f E2 = Matrix3f::Identity();
E2.col(1).swap(E2.col(2));
Matrix3f B = E2*E1;
Matrix3f A3 = A*B;

在上面的例子中,我们首先构造