类 ConjugateGradient
java.lang.Object
org.hipparchus.linear.IterativeLinearSolver
org.hipparchus.linear.PreconditionedIterativeLinearSolver
org.hipparchus.linear.ConjugateGradient
这是对RealLinearOperator
的共轭梯度法的实现。它紧密遵循Barrett等人(1994年)(图2.5)的模板。手头上的线性系统是A · x = b,残差是r = b - A · x。
默认停止准则
实现了默认的停止准则。当 || r || ≤ δ || b || 时,迭代停止,其中b是右侧向量,r是当前残差的估计,δ是用户指定的容差。值得注意的是r是所谓的更新残差,由于舍入误差可能与真实残差不同(参见例如Strakos和Tichy,2002年)。
迭代次数
在当前上下文中,一个迭代应理解为对矩阵-向量乘积A · x的一次评估。因此,初始化阶段计为一次迭代。
除了标准的MathIllegalArgumentException
外,如果线性算子或预处理程序不是正定的,此类可能会抛出MathIllegalArgumentException
。
- 键
"operator"
指向有问题的线性算子,比如L, - 键
"vector"
指向有问题的向量,比如x,使得xT · L · x < 0。
参考文献
- Barrett等人(1994年)
- R. Barrett, M. Berry, T. F. Chan, J. Demmel, J. M. Donato, J. Dongarra, V. Eijkhout, R. Pozo, C. Romine和H. Van der Vorst,线性系统解的模板:迭代方法的构建块,SIAM
- Strakos和Tichy(2002年)
- Z. Strakos和P. Tichy, 共轭梯度法中的误差估计及其在有限精度计算中的有效性,数字分析电子交易13:56-80,2002年
-
字段概要
字段 -
构造器概要
构造器构造器说明ConjugateGradient
(int maxIterations, double delta, boolean check) 创建此类的新实例,使用默认停止准则。ConjugateGradient
(IterationManager manager, double delta, boolean check) 创建此类的新实例,使用默认停止准则和自定义迭代管理器。 -
方法概要
修饰符和类型方法说明final boolean
返回true
,如果应检查矩阵和预处理程序的正定性。solveInPlace
(RealLinearOperator a, RealLinearOperator m, RealVector b, RealVector x0) 返回线性系统A · x = b的解的估计。从类继承的方法 org.hipparchus.linear.PreconditionedIterativeLinearSolver
checkParameters, solve, solve, solve, solve, solveInPlace
从类继承的方法 org.hipparchus.linear.IterativeLinearSolver
checkParameters, getIterationManager
-
字段详细资料
-
构造器详细资料
-
ConjugateGradient
public ConjugateGradient(int maxIterations, double delta, boolean check) 创建此类的新实例,使用默认停止准则。- 参数:
-
maxIterations
- 最大迭代次数 -
delta
- 默认停止准则的δ参数 -
check
- 如果应检查矩阵和预处理程序的正定性,则为true
-
ConjugateGradient
public ConjugateGradient(IterationManager manager, double delta, boolean check) throws NullArgumentException 创建此类的新实例,使用默认停止准则和自定义迭代管理器。- 参数:
-
manager
- 自定义迭代管理器 -
delta
- 默认停止准则的δ参数 -
check
- 如果应检查矩阵和预处理程序的正定性,则为true
- 抛出:
-
NullArgumentException
- 如果manager
为null
-
-
方法详细资料
-
shouldCheck
public final boolean shouldCheck()返回true
,如果应检查矩阵和预处理程序的正定性。- 返回:
-
如果要执行测试,则为
true
- 从以下版本开始:
- 1.4
-
solveInPlace
public RealVector solveInPlace(RealLinearOperator a, RealLinearOperator m, RealVector b, RealVector x0) throws MathIllegalArgumentException, NullArgumentException, MathIllegalStateException 返回线性系统A · x = b的解的估计。解是原地计算的(初始猜测被修改)。- 指定者:
-
solveInPlace
在类中PreconditionedIterativeLinearSolver
- 参数:
-
a
- 系统的线性算子A -
m
- 预处理程序M(可以为null
) -
b
- 右侧向量 -
x0
- 解的初始猜测 - 返回:
-
引用到
x0
(浅复制),更新为解 - 抛出:
-
MathIllegalArgumentException
- 如果a
或m
不是正定的 -
NullArgumentException
- 如果参数之一为null
-
MathIllegalStateException
- 在迭代次数耗尽时,除非在IterationManager
的构造中设置了自定义callback
-