矩阵的n次幂

矩阵的n次幂问题:给定任一矩阵,求其n次幂,复杂度小于O(n)提示:矩阵相乘,用左边的行乘以右边的列再分析这个问题前,先思考如何对矩阵进行乘操作,为了使问题更具普遍性,我们来分析行列式相乘的问题用(x1,y1)的行列式乘以(x2,y2)的行列式行列式相乘两个行列式能够相乘axb必须满足:a的行等于b的列,最后得到的结果形式和a一模一样(行列和a相等)用三个for循环 voidret(co…

问题:
给定任一矩阵,求其n次幂,复杂度小于O(n)
提示:矩阵相乘,用左边的行乘以右边的列

再分析这个问题前,先思考如何对矩阵进行乘操作,为了使问题更具普遍性,我们来分析行列式相乘的问题
用(x1,y1)的行列式乘以(x2,y2)的行列式

行列式相乘

两个行列式能够相乘 axb 必须满足:a的行等于b的列,最后得到的结果形式和a一模一样(行列和a相等)
用三个for循环

	void ret(const deter&obj){ 
   
		deter temp(*this);
		for (int i = 0; i < this->m_row; i++){ 
   
			for (int j = 0; j < obj.m_col; j++){ 
   
				for (int k = 0; k < this->m_row;k++){ 
   
					temp._elem[i][j] += (this->_elem[i][k]*
					obj._elem[k][j]);
				}
			}
		}
		temp.show();
	}

矩阵相乘

	deter nth_power(int n){ 
   
		deter temp(*this);
		deter ret(*this);
		ret.unit();
		while (n)
		{ 
   
			n & 1 ? ret = ret.ret(temp):1;
			temp = temp.ret(temp);
			n >>= 1;
		}
		ret.show();
		return ret;
	}
	deter nth_power2(int n){ 
   
		deter temp(*this);
		while (n>1)
		{ 
   
			temp = temp.ret(*this);
			--n;
		}
		temp.show();
		return temp;
	}

今天的文章矩阵的n次幂分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/11440.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注