有什么方法/任何python函数可以直接计算多项式根的条件数?

计算科学 线性代数 Python 多项式 条件数
2021-12-24 11:38:02

我知道 NumPy 必须linalg.cond(A)找到矩阵 A 的条件数。但是,如果我想找到一个大多项式的根相对于一个小扰动(类似于威尔金森多项式)的条件数,是否有一个函数可以可以直接给我根的条件数吗?

我也在考虑以对角矩阵本身的形式表达上面的多项式,因此对角线条目无论如何都是特征值,并且当采用行列式时它们形成这个多项式,但是 1. 我不确定如果这是正确的,以及 2. 我仍然不知道如何从中获得每个根的条件数,因为计算的条件数cond(A)是专门针对矩阵的?

我还在 Google 和 StackOverflow/math.SE 上进行了广泛搜索,但我似乎找不到任何不完全数学的相关内容。任何人都可以帮忙吗?

1个回答

根的条件数r多项式的p

κ:=p|rp(r)|

范数的选择存在一定的随意性,影响了条件数的定义。表明取多项式的最大系数。

Corless在浮点运算的舍入模型下考虑多项式系数的扰动。这导致条件编号

κ=1|rp(r)|i|ciri|

这些都可以直接用 Python 或任何语言计算。

注意:计算根后,我更喜欢使用残差而不是条件数来评估求解的质量。也就是说,我知道在最好的情况下,我有,所以我泰勒展开得到. 如果,然后我就知道出了点问题。r~|p(r~)|r~=r(1+ϵ)|p(r~)|ϵ|rp(r)||p(r~)|ϵ|r~p(r~)|

更新:自发布此消息以来,我在Higham给出的无穷范数中找到了寻根条件数的另一个定义。给定和一个简单的根,条件数是p(z)=i=0ncizir

κ(p,r):=ci=0n|r|i|rp(r)|

这可以通过一个简单的不等式生成,并且严格大于 Corless 定义的条件数。