C++ : 矩阵初等行变换,化成最简矩阵
化成最简矩阵分成如下步骤
从矩阵的第 i=0 行开始化简
1.寻找最长元素行:从第i行开始,寻找第一个开头行元素非0的行,利用行交换把该行换到矩阵的第i行。
2.对第i行进行化简:对第i行的所有元素同除该行的首个非0元素。
3.矩阵行化简: 从矩阵的第 j=0 行开始。与第i行首个非0元素同列的元素,即为行化简的倍数,每行减去该 倍数*第i行的值就得到了一次行化简的结果 ,回第1步,i++。
/*** 矩阵行变换成最简矩阵* @tparam ElemType* @return*/
template<typename ElemType>
SmartDongLib::Matrix<ElemType> SmartDongLib::Matrix<ElemType>::simplyTransform() {Matrix<ElemType> ret(*this);//表示将要化1的矩阵行for (int transferRow = 0; transferRow < theRows_; ++transferRow) {//按列循环每行找首个非0元素,从transferRow行开始寻找最长元素行int firstNotNullCol = 0;for (; firstNotNullCol < ret.theCols_; ++firstNotNullCol) {int row = transferRow;bool isfind= false;for (; row < ret.theRows_; ++row) {ElemType firstelem=ret(row, firstNotNullCol);if (!close(firstelem, (ElemType)0 )) {isfind = true;break;}}if (isfind){//如果找到最长元素行,则和transferRow行进行行交换ret.rowSwap(transferRow,row);break;}}if (firstNotNullCol >= ret.theCols_){//零矩阵或者后继行都是0return ret;}//当前行首元素化1Real factor = ret(transferRow,firstNotNullCol);for (int col = firstNotNullCol; col < ret.theCols_; ++col) {ret(transferRow,col) = ret(transferRow,col) / factor;}//同列元素行化0for (int i = 0 ; i < ret.theRows_; ++i) {if ( i ==transferRow )continue;Real factor2 = ret(i,firstNotNullCol);for (int j = firstNotNullCol; j < ret.theCols_; ++j) {ret(i,j) = ret(i,j) - ret(transferRow,j) * factor2;}}}return ret;
}
注:此代码对括号作了运算符重载,仅提供编程思路。如有代码优化的建议可以评论。
C++ : 矩阵初等行变换,化成最简矩阵相关推荐
- 数学/线性代数 {矩阵初等变换,[阶梯形/最简形]矩阵,初等矩阵}
数学/线性代数 {矩阵初等变换,[阶梯形/最简形]矩阵,初等矩阵}; @LOC_COUNTER: 3; 矩阵的初等变换 定义 矩阵的初等变换 和行列式的变换 是完全一样的; . LINK: (http ...
- matlab最简矩阵,Matlab将一般矩阵变换为行最简矩阵
%function a=SimpleMatrix(x) %对矩阵实行初等行变换,,化为行最简形矩阵,其特点是:非零行的第一个非零元为1,且这些非零元所在的列的其他元素都为0 x=[2 -1 -1 1 ...
- 矩阵初等行变换的技巧
一般,使用初等行变换来判定一个矩阵是否可逆,和求某矩阵的逆矩阵. 二阶矩阵使用伴随矩阵法比较方便,高阶矩阵使用初等行变换. 一般来说,将一个矩阵化为标准阵遵循下面方法: 先用第一行消掉下面所有行的第一 ...
- 行阶梯型矩阵,行最简形矩阵,标准形矩阵
行阶梯形矩阵: 行最简形矩阵: 标准形矩阵:
- matlab将矩阵化为行最简形
化行最简形 本代码为个人原创 用基础函数写了一个matlab脚本将矩阵变成行最简式. 本代码未参考matlab自带的rref函数,完全手写 大致思路:把矩阵含有0的行放在最下面,然后下面的行减去上面的 ...
- matlab 矩阵命令,matlab中的矩阵的基本运算命令
matlab中的矩阵的基本运算命令 (2013-07-19 08:45:49) 1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数 diag 格式 X = d ...
- 【矩阵分析】线性空间、λ矩阵、内积空间、Hermite矩阵、矩阵分解、矩阵范数、矩阵函数
单纯矩阵:A可对角化⇔①A可对角化:⇔②n个线性无关的特征向量: ⇔③每个特征值的几何重复度等于代数重复度:⇔④特征值λi对应的pi = n - rank(λiE - A). 等价矩阵:A(λ)等价于 ...
- 二阶矩阵转置怎么求_矩阵求导术(下)
本文承接上篇 https://zhuanlan.zhihu.com/p/24709748,来讲矩阵对矩阵的求导术.使用小写字母x表示标量,粗体小写字母 表示列向量,大写字母X表示矩阵.矩阵对矩阵的求导 ...
- 矩阵迹的性质_矩阵(含逆)的迹、行列式关于矩阵自身的导数计算与Maple验证...
常见神经网络在计算相邻层权重关系式时,矩阵对矩阵求导所涉及的维度拼接操作对理论萌新往往不太友好:对于数据型为矩阵的最小二乘问题,尽管迹对矩阵求导操作十分实用但很多人仍习惯于逐项计算偏导.本文避开&qu ...
最新文章
- 记《浪潮之巅》-第一版-12.短暂的春秋--与机会失之交臂的公司之一太阳公司(sun microsystems)...
- 用PhpStorm IDE创建GG App Engine PHP应用教程
- R语言连接MySQL报错:could not run statement: The used command is not allowed with this MySQL version
- AngularJS 、Backbone.js 和 Ember.js 的比较
- mysql主从配置 ssl_Mysql主从基本配置及基于ssl的配置详解
- 从各大跨平台技术说开去,我们真的需要虚拟 DOM 吗?
- python 底层原理_Python 探针实现原理
- 前端学习(3241):react生命周期forceUpdate
- 计算机有新的更新,现在是2018年,我的电脑最近总是弹出说有重要更新,提示自2017年5月9日后,microsoft - Microsoft Community...
- 容器编排技术 -- Kubernetes kubectl set 命令详解
- 设计模式(14)-Flyweight Pattern
- java输入输出流_金九银十准备季:Java异常+Java IO与NIO面试题(含答案)
- Mongodb Geo2d索引原理
- 指纹匹配算法matlab,指纹识别算法matlab程序
- mysql当前时间的本月_mysql 获得当前月1号的日期 和 0点日期方法
- 好用的web报表设计器(报表工具)
- xss.haozi.me解题记录
- 不再盯着男性发烧友,小米手机要去“撩妹”?
- git常用命令和基本操作
- 将Windows XP 中文版变为英文版