扫除算法(sweep)求逆矩阵

高斯约旦消去法是求矩阵逆的一种常用算法,但使用计算机来求解时,需要开辟另一个内存存放变化时的右矩阵A-1

而扫除变化时对高斯约旦消去法的一种改进,它可以节省存储空间,不需要开辟内存单独存放右矩阵。下面使用三阶例子来说明:


使用高斯约旦消去法,当左边的矩阵变为单位矩阵时,右边就得到原来左边矩阵的逆矩阵。如果第1步变第1列为基向量,得


当然,第1步不一定要变第1列为基向量,如果变第2列为基向量得


可以看到,不论变哪列都有如下结论:

1.当左矩阵中的某些列未变成基向量时,右矩阵相应列的基向量形式不变。即左右两矩阵中基向量的总数恒为m,并构成一个单位矩阵。

2.左矩阵的第k列变成基向量后,右矩阵第k列才变成非基向量形式,并且该列除第k个元素为1/a(kk)外,其他元素与左矩阵的第k行相差一个符号。

由消去过程得知,当左矩阵的某些列一旦被变成基向量后,就不再起实际作用。为节省计算机的存储单元,左边单位矩阵的基向量不再存储,而把消去过程中右边刚要出现的非基向量放到做左矩阵刚变成基向量的那列位置上,并且这列元素与左矩阵的其他元素一样参加其后不运算。

其后各步消去也做类似处理,扫除变换公式:(设a(kk)不为零)




程序代码:

Matrix<Type> sweep(Matrix<Type> &A)
{
	Type d;
	int n = A.rows();

	for (int k = 1; k <= n; ++k)
	{
		d = 1.0/A(k, k);
		A(k, k) = d;
		for (int i = 1; i <= n; ++i)
		{
			if ( i != k )
				A(k, i) *= (Type) -d; 
		}
		for (int i = 1; i <= n; ++i)
		{
			if ( i != k)
				A(i, k) *= (Type) d;
		}
		for (int i = 1; i <= n; ++i)
		{
			if ( i != k )
			{
				for (int j = 1; j <= n; ++j)
				{
					if ( j != k )
						A(i, j) += A(i, k)*A(k, j)/d; 
				}
			}
		}
	}
	return A;
}

相关阅读:

利用LU分解求逆矩阵:《 LU分解法求解线性方程组》

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCASCADE是一种开源的几何建模库,可以用于创建和编辑三维几何模型。在OpenCASCADE中,Sweep算法用于生成具有不等高和不同宽度的几何形状,这个过程是通过通过向平面上放置一个曲线并使其沿着第二条曲线移动来完成的。 Sweep功能在OpenCASCADE中具有很多优点: 首先,Sweep功能可以用于创建复杂和高级的几何形状。这种技术可以通过将单个曲线或平面扫描并在其轨迹上延伸来生成定制模型。可以在控制几何形状的情况下使用此技术,例如通过变形和旋转来创建不同的形状。 其次,Sweep功能可以有效的加快模型设计的速度和效率。与传统的三维建模技术相比,Sweep可以更快速的生成复杂的几何形状。此外,Sweep还允许用户通过一系列参数调整来控制生成的结果,从而在设计过程中提供更多的灵活性。 最后,Sweep功能可以有效的降低模型设计的时间和成本。与其他建模技术相比,Sweep可以更准确地创建复杂的形状,从而可以大大降低需要进行后期修整和修改的次数。这将节省时间和成本,并在项目交付时间上提供更大的保证。 总之,OpenCASCADE中的Sweep算法是一种非常重要和有用的功能,可以有效地生成复杂的几何形状。有了Sweep,用户可以更快,更容易的创建高质量的三维模型,并在模型设计和制造过程中提供更多的灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值