インデックスを使用した対称正定行列の生成


8

CGのテストケースを実行しようとしていましたが、以下を生成する必要があります。

  • 対称正定行列
  • サイズ> 10,000
  • フルデンス
  • 行列インデックスのみを使用し、必要に応じて1つのベクトル(A(i,j)=x(i)x(j)(i+j)

  • 条件番号が1000未満。

私が試してみました:

  1. を使用A=rand(N,N)してランダム行列を生成し、それA'AをSymにします。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

しかし、これは約500x500までのPDです。

  1. XLATMR。[すべてのグレーディングとスケーリングでは、理解するのが難しすぎます。特に、基礎となる線形代数が理解できないため]

誰かが上記の要件を満たすx(ベクトル)とi、j(指数)の関数をくれますか?


1
αα

@AronAhmadia、素晴らしい作品!ありがとう!ただし、いくつ追加すればよいですか。私はN自体を試しましたが、5000x5000(シミュレーションが終了したところ)まで機能a+N*eye(N,N)しましたが、5000を超えるすべての値で機能することを確認して使用しますか?コメントを回答に変換できますか?
質問:

回答:


10

cD[1,c]1cuA:=(ItuuT)D(ItuuT)t=2/uTu

O(n2)v:=Dus:=t2uTv/2w:=tvsuO(n)AA=DuwTwuTuO(n)

D

αAαα=A


これは完璧です!
インクエスト2012年

固有値を指定するときに、アルゴリズムを変更して行列を提供するにはどうすればよいですか?たとえば、固有値を持つ非対称行列が必要です1,-1,2,-2...50,-50
質問:

1
D=Diag(50:50)上記のレシピのは、これらの固有値を提供しますが、この選択では、マトリックスは不定対称であり、CGはそのような問題を解決しません。そして、あなたのコメントでは非対称行列を要求することさえあります、CGも適用されないので。たぶん、あなたが正確に何を望んでいるかについて、新しい質問を投げかけるのが最善でしょう。
Arnold Neumaier 2012年


2

1つのベクトルだけでそれを行う方法はわかりませんが、サイズ 2つのランダムベクトルとを使用すると、介して正の半定行列を生成できます ここで、は軸との平面内の回転です。xθN

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

条件数を改善したい場合は、固定の正の値を追加し、必要に応じて再スケーリングできます。x


申し訳ありませんが、私の数学はまだそれほど素晴らしいものではありません。DOES示す転置?平面の回転とはどういう意味ですか?また、2つのベクトルを保存することは少し高価になりますが、それでも、この外観は非常に興味深い方法のようです。U
質問:

Ri(θi)=(100cosθisinθisinθicosθi1)は回転行列です。は複素共役転置行列を示します(すべてが実数であると仮定すると、それは転置にすぎません)。U
Deathbreath

2

それを行うには全く別の方法は次のようになります:ランダムベクトル考えるし、持つランク1行列である固有値はゼロに等しく、1個の厳密に正の固有値に等しいと固有ベクトル。それは対称的でもあります。xA=xxTN1x2x

密なSPD行列を作成するには、そのようなランク1行列を多数追加します。言い換えると、ベクトル(例:ランダムベクトル) がある場合、場合、はSPDであり、ベクトルが線形独立の場合(それらがは線形独立ではなく、は正の半定値です)。グラムシュミットの逐次直交化を使用して、ベクトル(またはランダムプロセスから描画した最初のベクトル)が線形独立であるかどうかを確認できますが、単純に選択した場合でもSPD行列が得られる可能性があります。ベクトル。Mxi

A=i=1MxixiT
MNxiAMMNMN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.