●矩阵的加减乘(数乘)转置运算
从线性代数中我们已知,两个矩阵可以进行加减乘运算,但矩阵之间没有除法运算。(下面以3×3矩阵为例):
矩阵的数乘运算类属与两矩阵相乘的一种特殊形式(数乘矩阵的这个数,我们可以将其化为对角线为该数,其余位置都为0的矩阵,再用该对角矩阵乘我们要乘的这个矩阵)直接用数乘以矩阵中的每一个数即可。转置矩阵为将矩阵的行列互换得到的新矩阵称为转置矩阵,转置矩阵的行列式不变。下面我们展示数乘和转置两个算法的关键代码片段:
{ double juzhen[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; double n;cin >> n; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) juzhen[i][j] = n * juzhen[i][j]; } { double juzhen[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) jizhen[j][i] = juzhen[i][j]; }
在下面代码中我们输入了两个矩阵让其进行运算(只进行加减乘)
#include<iostream> #define i 3 //定义矩阵的行数 #define j 3 //定义矩阵的列数 using namespace std; class juzhen { public: void clear() //将矩阵清空 { this->c[i][j] = { 0 }; } void add(); //相加算法 void sub(); //相减算法 void mul(); //相乘算法 void showresult(); double a[i][j]; double b[i][j]; double c[i][j]; }; void juzhen::add() { for (int m = 0; m < i; m++) { for (int n = 0; n < j; n++) { c[m][n] = a[m][n] + b[m][n]; } } } void juzhen::sub() { for (int m = 0; m < i; m++) { for (int n = 0; n < j; n++) { c[m][n] = a[m][n] - b[m][n]; } } } void juzhen::mul() { for (int m = 0; m < i; m++) { int p = 0; for (int n = 0; n < j; n++) { int q = 0; c[m][n] = a[m][p] * b[q][n] + a[m][p + 1] * b[q + 1][n] + a[m][p + 2] * b[q + 2][n]; //c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0] //c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1] //c[0][2]=a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2] //... } } } void juzhen::showresult() { for (int m = 0; m < i; m++) { for (int n = 0; n < j; n++) { cout << c[m][n] << " "; } cout << endl; } } juzhen jz; void text() //写入矩阵 { cout << "请输入这两个" << i << "×" << j << "矩阵:" << endl; cout << "①" << endl; for (int m = 0; m < i; m++) for (int n = 0; n < j; n++) cin >> jz.a[m][n]; cout << "②" << endl; for (int m = 0; m < i; m++) for (int n = 0; n < j; n++) cin >> jz.b[m][n]; } void text1() //加法运算 { jz.clear(); jz.add(); cout << "两矩阵相加为:" << endl; jz.showresult(); } void text2() //减法运算 { jz.clear(); jz.sub(); cout << "两矩阵相减为:" << endl; jz.showresult(); } void text3() //乘法运算 { jz.clear(); jz.mul(); cout << "两矩阵相乘为:" << endl; jz.showresult(); } int main() { text(); text1(); text2(); text3(); }
综合上面的讲解及其程序代码,我们可以将加、减、乘、数乘、转置这几种基本运算的方法充分结合,运用线性代数中矩阵运算的基本公式,在程序中从而实现多个矩阵复合运算的复杂算法。