使用索引生成对称正定矩阵

计算科学 线性代数
2021-12-22 07:12:26

我试图为 CG 运行测试用例,我需要生成:

  • 对称正定矩阵
  • 大小 > 10,000
  • 全密
  • 仅使用矩阵索引,必要时使用 1 个向量(如A(i,j)=x(i)x(j)(i+j))

  • 条件数小于 1000。

我努力了:

  1. A=rand(N,N)使用然后生成随机矩阵A'A使其对称。PD。[这增加了条件数]

  2. 使用如图所示的矢量方法,但我似乎无法获得(x,i,j)可以确保 Sym 和 PD 的功能。

经过大量的实验,我想出了:

a(it,jt) = (vec(it)+vec(jt))/((it-1)^2+(jt-1)^2);如果itjt

a(it,it) = x(it)如果it=jt

但这是 PD 直到大约 500x500。

  1. XLATM[所有的分级和缩放,太难理解了。特别是因为我无法理解底层的线性代数]

有人可以给我一个满足上述要求的 x(向量)和 i,j(索引)函数吗?

4个回答

得到一个带有条件数的稠密正定矩阵c便宜地,选择一个对角矩阵D其对角线由来自的数字组成[1,c](这将是特征值),与1c至少选择一次,以及一个向量u. 然后通过 Householder 变换应用相似变换来形成矩阵A:=(ItuuT)D(ItuuT), 在哪里t=2/uTu.

形成这个矩阵O(n2)操作,计算v:=Du,s:=t2uTv/2,w:=tvsuO(n)操作,然后A作为A=DuwTwuT. (如果你选择u作为全一向量,所需的乘法次数仅为O(n).)

请注意,CG 的行为很大程度上取决于特征值分布,您可以通过改变D.

(添加α到任意对称矩阵A需要α大于最大特征值。这很难计算;所以必须选择α=A, 但是条件数通常会很小,不是 CG 的实际测试用例。)

尝试在矩阵的对角条目上添加一个大数(按矩阵范数的顺序)。这相当于将添加到您的每个特征值,并且应该通过减少最大和最小特征值之间的差距来改善条件数。 αα

我不确定你会如何只用一个向量来做,但是用两个随机向量大小产生一个半正定矩阵 其中是轴平面内的旋转。xθN

U=iRi(θi)A=Udiag(abs(x))U
Ri()ii+1 mod N

添加一个固定的正值,并在需要时重新调整。x

一种完全不同的方法是这样的:考虑一个随机向量,然后是一个秩一矩阵,其中特征值等于 0,一个严格的正特征值等于与特征向量它也是对称的。xA=xxTN1x2x

要构造一个密集的 SPD 矩阵,请将许多这样的 rank-1 矩阵相加。换句话说,如果你有个向量(例如随机向量),那么 是 SPD,如果并且向量是线性独立的(如果它们不是线性独立的,则是半正定的)。您可以使用 Gram-Schmidt 连续正交化验证您的个向量(或您从随机过程中绘制的第一个个向量)是否是线性独立的,但如果您简单地选择向量。Mxi

A=i=1MxixiT
MNxiAMMNMN