一个矩阵乘以一个向量有啥几何意义,麻烦说详细一点!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个矩阵乘以一个向量有啥几何意义,麻烦说详细一点!相关的知识,希望对你有一定的参考价值。

参考技术A 矩阵乘向量,就是把这个向量旋转,而且向量的大小也会改变,通常情况,没有人关注矩阵与一个向量的乘法,而是关注整个向量空间,乘了这个矩阵之后,会如何变化,这其实就是向量空间的线性变换,特点是保持加法,保持数乘.
所以几何意义就是线性变换
例如平面上你有个帆船,有个风速F,风吹船,船会有速度V,风变成2F,船变2V,你要描述风和船的速度关系.F=AV.
如果你建立了坐标系那么F是个向量,V是向量,A是矩阵.
如果你没有建立坐标系那么F是个向量,V是向量,A叫做线性变换.

在 C++ 中使用二维向量乘以矩阵

【中文标题】在 C++ 中使用二维向量乘以矩阵【英文标题】:Multiplying Matrices using 2d Vectors in C++ 【发布时间】:2014-11-04 04:16:02 【问题描述】:

我正在尝试设计一个程序,该程序使用整数向量的向量创建一个矩阵,然后将它与另一个矩阵相乘。我知道如何在纸上乘以矩阵,但是当我尝试在我的程序中实现它时,我并没有让它工作。我知道两个矩阵都正确输入并正确传递,因为我有这些函数的输出,以便我可以调试。当我尝试将它们相乘时,程序无法正常工作。答案和元素数量都不对。我知道我遗漏了一些东西,但不知道是什么。

Matrix Matrix::operator*(Matrix m)
    vector<int> mRow = m.getRow(0);
    vector<int> mCol = m.getCol(0);
    vector<int> newElem;
    int product = 0;

    //adds the contents of the 2nd matrix to the 2d vector
    vector< vector<int> > m2(mRow.size(), vector<int>(mCol.size()));        
    for (int i = 0; i < mRow.size(); i++)
        mRow.clear();
        mRow = m.getRow(i);
        for (int j = 0; j < mCol.size(); j++)
            m2[j][i] = mRow[j];
        

    

    //Multiplies the matrices using the 2d matrix**THIS IS WHERE IT GOES WRONG**
    for (int i = 0; i < row; i++)
        for (int j = 0; j < column; j++)
            product += matrix[i][j]*m2[j][i];
        
        newElem.insert(newElem.begin()+i,product);
        product = 0;
    

    //displays the products so that i can see if its working
    for (int i = 0; i < newElem.size(); i++)
        cout << "  "<<newElem[i]<<endl;
    

    //adds the new product vector to a new Matrix object and returns it
    Matrix newM(row, mCol.size());
    vector<int> temp;
    for (int i = 0; i < row; i++)
        for (int j = 0; j < mCol.size(); j++)
            temp.insert(temp.begin()+j, newElem[0]);
            newElem.erase(newElem.begin()); 
        
        newM.setRow(temp,i);
        temp.clear();
    
    return newM;

虽然我不知道这是否有帮助,但我使用 this 站点作为将 2 个矩阵相乘的参考。

【问题讨论】:

你不应该在乘法的外部for循环中重置product吗? 是的,我应该,这已被修复,但我仍然没有得到所需的全部结果。所以如果我有一个 3x3 * 3x3,我应该得到 9 个元素;我只得到 3 个。 【参考方案1】:

您的矩阵表示与您的错误无关。您需要有更多的嵌套迭代。考虑一个结果矩阵并遍历它以计算它的每个元素。在伪代码中:

for i in result column
 for j in result row
   res[i, j] = multiply(m1, m2, i, j)

其中 multiply 函数是嵌套循环,类似这样:

multiply(m1, m2, i, j)

  val = 0;
  for k in row
    val += m1[i, k] * m2[k, j]
 return val

这是外部循环的实现。请注意,代码中没有错误检查。

vector<vector<int> > ml;
vector<vector<int> > mr;
// fill in ml and mr
...

// result matrix
vector<vector<int> > res;

// allocate the result matrix
res.resize(ml.size());
for( it = res.begin(); it != res.end(); ++it)
  it->resize(ml[0].size());


// loop through the result matrix and fill it in
for( int i = 0; i < res.size(); ++i)
    for( int j = 0; j < res[0].size(); ++j)
       res[i][j] =  multiply(ml, mr, i, j);

将 multiply() 函数的正确实现留给您。

【讨论】:

这就是我遇到的问题,我什至无法用伪代码实现。就像我有作家阻止或什么的。我不得不在纸上画出来,但在实施时我仍然没有正确。

以上是关于一个矩阵乘以一个向量有啥几何意义,麻烦说详细一点!的主要内容,如果未能解决你的问题,请参考以下文章

如何理解矩阵相乘的几何意义或现实意义

特征值和特征向量的几何意义计算及其性质(一个变换(或者说矩阵)的特征向量就是这样一种向量,它经过这种特定的变换后保持方向不变,只是进行长度上的伸缩而已)

向量的几何意义是啥

什么是特征值和特征向量

线性代数A矩阵乘以A的转置的含义或者几何意义

矩阵乘法的几何意义