●矩阵的加减乘(数乘)转置运算
从线性代数中我们已知,两个矩阵可以进行加减乘运算,但矩阵之间没有除法运算。(下面以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();
}
文章来源:https://www.toymoban.com/news/detail-509129.html
综合上面的讲解及其程序代码,我们可以将加、减、乘、数乘、转置这几种基本运算的方法充分结合,运用线性代数中矩阵运算的基本公式,在程序中从而实现多个矩阵复合运算的复杂算法。文章来源地址https://www.toymoban.com/news/detail-509129.html
到了这里,关于【基础算法】矩阵的几种基本运算 & C++实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!