求解线性系统的Kaczmarz算法的变体。
kaczmarz-algorithms的Python项目详细描述
Kaczmarz算法
在Python中求解线性系统的Kaczmarz算法的变体。在
安装
要安装Kaczmarz算法,请在终端中运行以下命令:
$ pip install -U kaczmarz-algorithms
这是安装Kaczmarz算法的首选方法,因为它总是安装最新的稳定版本。在
如果您没有安装pip,这些installation instructions可以作为指导 你完成了整个过程。在
使用
首先,导入kaczmarz
包。在
要使用带有循环选择规则的Kaczmarz算法求解方程组3 * x0 + x1 = 9
和{kaczmarz.Cyclic.solve()
函数。在
>>>A=[[3,1],...[1,2]]>>>b=[9,8]>>>x=kaczmarz.Cyclic.solve(A,b)>>>xarray([2.,3.])
检查Kaczmarz迭代
要使用循环选择规则访问Kaczmarz算法的迭代,请使用kaczmarz.Cyclic.iterates()
函数。在
>>>A=[[1,0,0],...[0,1,0],...[0,0,1]]>>>b=[1,1,1]>>>x0=[0,0,0]# Initial iterate>>>forxkinkaczmarz.Cyclic.iterates(A,b,x0):...xkarray([0.,0.,0.])array([1.,0.,0.])array([1.,1.,0.])array([1.,1.,1.])
检查所使用的行/方程式
要访问Kaczmarz算法每次迭代时使用的行索引,请使用iterates的ik
属性。例如
>>>iterates=kaczmarz.Cyclic.iterates(A,b,x0)>>>forxkiniterates:...print("Row used:",iterates.ik)Rowused:-1Rowused:0Rowused:1Rowused:2
iterates.ik
的初始值是-1
,因为在算法开始时还没有执行任何投影。在
可选参数
solve()
和iterates()
函数采用可选参数maxiter
和{
创建自己的选择策略
要实现自己的选择策略,请从kaczmarz.Base
继承并实现_select_row_index()
方法。
例如,要实施一种以逆循环顺序使用系统方程的策略:
>>>classReverseCyclic(kaczmarz.Base):...def__init__(self,A,*args,**kwargs):...super().__init__(A,*args,**kwargs)...self.n_rows=len(A)...self.row_index=None......def_select_row_index(self,xk):...ifself.row_indexisNone:...self.row_index=self.n_rows...self.row_index=(self.row_index-1)%self.n_rows...returnself.row_index
新类将继承solve()
和iterates()
类方法,它们的工作方式与上面描述的kaczmarz.Cyclic.solve()
和{
>>>iterates=ReverseCyclic.iterates(A,b,x0)>>>forxkiniterates:...print("Row used:",iterates.ik)...print("Iterate:",xk)Rowused:-1Iterate:[0.0.0.]Rowused:2Iterate:[0.0.1.]Rowused:1Iterate:[0.1.1.]Rowused:0Iterate:[1.1.1.]
有关solve()
和iterates()
的可选参数以及Cyclic
以外的其他选择策略的信息,请参见readthedocs.io。在
引用
如果您在学术场合使用我们的代码,请考虑引用我们的代码。 无论您在zenodo.org上使用哪个版本,都可以找到相应的DOI。在
发展
有关开发代码的信息,请参见CONTRIBUTING.md。在
- 项目
标签: