欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > c/c >内容正文

c/c

c : 矩阵初等行变换,化成最简矩阵 -凯发k8官方网

发布时间:2024/10/14 c/c 24 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 c : 矩阵初等行变换,化成最简矩阵 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

化成最简矩阵分成如下步骤

从矩阵的第 i=0 行开始化简

1.寻找最长元素行:从第i行开始,寻找第一个开头行元素非0的行,利用行交换把该行换到矩阵的第i行。

2.对第i行进行化简:对第i行的所有元素同除该行的首个非0元素。

3.矩阵行化简: 从矩阵的第 j=0 行开始。与第i行首个非0元素同列的元素,即为行化简的倍数,每行减去该 倍数*第i行的值就得到了一次行化简的结果 ,回第1步,i 。

 

/*** 矩阵行变换成最简矩阵* @tparam elemtype* @return*/ template smartdonglib::matrix smartdonglib::matrix::simplytransform() {matrix 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; }

注:此代码对括号作了运算符重载,仅提供编程思路。如有代码优化的建议可以评论。

总结

以上是凯发k8官方网为你收集整理的c : 矩阵初等行变换,化成最简矩阵的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图