寻找对数函数奇点的算法

计算科学 优化
2021-12-13 16:45:15

我有一个数值问题,我需要在其中找到值λ矩阵的行列式Aλ为零。(解决方案λ将给出运算符的特征值...)

为此,我了解到最好寻找函数的奇点λlog(|det(Aλ)|). 这种函数的绘图示例[0,10]如下图所示:

在此处输入图像描述

我有两个问题:

1)如果它在某个区间内是唯一的,那么什么算法最适合找到这样的奇点[a,b]?

2)我应该如何解决在区间中找到所有奇点的问题[a,b]?

[我不确定如何为这个问题选择正确的标签,所以请随意添加正确的标签。]


也许 1) 的答案可能是黄金比例搜索:http ://en.wikipedia.org/wiki/Golden_section_search ,对于区间中有一个最小值的情况。

不过,我不知道如何将其推广到需要选择多个间隔的情况。

2个回答

这是一个非常糟糕的寻找特征值的算法,至少如果你只是在寻找线性算子或矩阵的特征值。有很多更好的算法可以做你想做的事情。

虽然特征值的数学定义确实是是奇异的,即,但这并不是在实际应用中找到特征值的实际定义。AλdetAλ=0

这是我所做的:想法是在某个区间[a,b]

  • 选择离散化步骤和相应的区间离散化,然后计算该离散化上的函数值。必须进行这种离散化,以便在计算时间和我想要的精度之间达到合理的平衡。每个函数计算都会计算矩阵的行列式,该矩阵是通过在距离矩阵的条目上评估贝塞尔函数而获得的。100×100

  • 在计算值中找到峰值

  • 围绕每个峰值进行黄金搜索,以找到接近峰值的精确

(该方法的灵感来自 Alves 和 Antunes 的工作:http: //msvlab.hre.ntou.edu.tw/cite/CMC-Alves-2005.pdf

当所有特征值都很简单时,这是非常准确的(级的错误)并且相当快(对于这个精度)。当特征值是两倍时,事情会变得有点混乱,如果它们几乎是两倍,情况会更糟。如果特征值是双倍的,那么查看的内核可以得到 \lambda 的多重106Aλλ

如果特征值几乎是两倍,则的内核看不到特征值,所以我设法解决这个问题的唯一方法是选择一个区间并进行更小的离散化,其中几乎双倍的特征值将是可见的。Aλλ±ε(λδ,λ+δ)


不幸的是,在我的工作(优化特征值)中,特征值几乎总是倾向于在最优时加倍。

如果您对我如何改进所提出的算法有任何建议,我们非常欢迎。