博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性代数-矩阵-【2】矩阵生成 C和C++实现
阅读量:4364 次
发布时间:2019-06-07

本文共 3275 字,大约阅读时间需要 10 分钟。

矩阵的知识点之多足以写成一本线性代数。

所以我们把矩阵的运算封装成矩阵类。以C++为主进行详解。

点击这里可以跳转至

【1】矩阵汇总:

【2】矩阵生成:现在的位置

【3】矩阵加减:

【4】矩阵点乘:

【5】矩阵化简:

......


 

C++语言:

作为矩阵的第一遍程序详解,讲述的如何生成矩阵,以下列矩阵为例子详解

 

分段详解:

基本成员:

矩阵类的成员变量有三个:

  1. 矩阵的行数 
  2. 矩阵的列数
  3. 用二维向量(数组)存放矩阵中的所有元素
int m_iRows;    int m_iColumns;    vector
> m_vecMatrix;

 

接下来,为了生成矩阵,这里提供两种生成矩阵的方法。

  • 生成一个空的矩阵,把数据一行一行或者一列一列地把数据加入矩阵中。
  • 生成一个n行m列,且元素全为0的矩阵。一个一个地改变矩阵内部的元素。

方法一

包括以下两个成员函数

  1. 加入一行
  2. 加入一列

(成员函数请展开)

bool addOneRowToBack(vector
&vec); //往最底插入一行bool addOneColumToBack(vector
&vec); //往最后插入一列

加入一行:

template 
bool Matrix
::addOneRowToBack(vector
&vec){ /*Matrix has had datas*/ if(m_iColumns !=0) { if(vec.size() != m_iColumns)//input data columns not equal matrix columns { cout<<"addOneRowToBack(): columns not equal"<
View Code

加入一列:

template 
bool Matrix
::addOneColumToBack(vector
&vec){ /*Matrix has had datas*/ if(m_iRows !=0) { if(vec.size() != m_iRows)//input data columns not equal matrix columns { cout<<"addOneColumsToBack(): rows not equal"<
tempVec; m_iRows = vec.size(); for(int i=0;i
View Code

 

我们可以通过调用添加行和添加列给矩阵增加行/列,下面我们通过addOneRowToBack()方法添加一行,得到一个1行3列,值为| 1 2 3 |的矩阵

vector
vector1; for(int i=1;i<=3;i++) { vector1.push_back(i); } Matrix
matrix; matrix.addOneRowToBack(vector1);

 同样,我们可以连续使用addOneRowToBack()函数来添加3行,让其成为一个3行3列的矩阵

vector
vector1; vector
vector2; vector
vector3; for(int i=1;i<=3;i++) { vector1.push_back(i); } for(int i=1;i<=3;i++) { vector2.push_back(2); } for(int i=4;i<=6;i++) { vector3.push_back(i); } Matrix
matrix; matrix.addOneRowToBack(vector1); matrix.addOneRowToBack(vector2); matrix.addOneRowToBack(vector3); matrix.printfAll();

可以得到如下结果:

 

 方法二

包含以下成员函数 

  1. 构造函数重载:构造一个n行m列的全0矩阵
  2. 改变第n行第m个元素的值
Matrix(int rows,int columns);bool setSpecifiedElem(int row,int column,T value);

构造函数重载:

template 
Matrix
::Matrix(int rows,int columns){ vector
tempVec; m_iRows = 0; m_iColumns =0; m_vecMatrix.clear(); //reduce a vector for adding for(int i=0;i
View Code

改变第n行第m个元素(从0开始):

template 
bool Matrix
::setSpecifiedElem(int row,int column,T value) //设置第row行第column个元素的值为value{ if(row > m_iRows-1 ||column > m_iColumns-1) { return false; } m_vecMatrix[row][column]=value; return true;}
View Code

调用方法:

Matrix
matrix(3,3); matrix.setSpecifiedElem(0,0,1); matrix.setSpecifiedElem(0,1,2); matrix.setSpecifiedElem(0,2,3); matrix.setSpecifiedElem(1,0,2); matrix.setSpecifiedElem(1,1,2); matrix.setSpecifiedElem(1,2,2); matrix.setSpecifiedElem(2,0,4); matrix.setSpecifiedElem(2,1,5); matrix.setSpecifiedElem(2,2,6); matrix.printfAll();

运行结果:

 

 


 

C语言

以后补充

转载于:https://www.cnblogs.com/HongYi-Liang/p/7275278.html

你可能感兴趣的文章
jq的链式调用.end();
查看>>
不要怂,就是GAN (生成式对抗网络) (五):无约束条件的 GAN 代码与网络的 Graph...
查看>>
单击浏览器右上角的X弹出提示窗口
查看>>
BZOJ1734: [Usaco2005 Feb]Aggressive cows 愤怒的牛
查看>>
开始python之旅
查看>>
Python进阶06 循环对象
查看>>
Python补充06 Python之道
查看>>
.net压缩文件夹
查看>>
MS SQL 分页存储过程
查看>>
2016年,我的和自己谈谈
查看>>
创建一个自己的GitHub,创建自己的开源项目
查看>>
Topcoder SRM 648 (div.2)
查看>>
Constructor总结
查看>>
HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)
查看>>
JAVA UDP网络编程学习笔记
查看>>
反素数 -- 数学
查看>>
CODEVS 1205 单词反转
查看>>
洛谷 P3367 【模板】并查集
查看>>
求质数算法的N种境界 (N > 10) zz
查看>>
XmlPullParserException
查看>>