Tạo ma trận xác định dương đối xứng bằng chỉ số


8

Tôi đã cố chạy các trường hợp thử nghiệm cho CG và tôi cần tạo:

  • ma trận xác định dương đối xứng
  • có kích thước> 10.000
  • ĐẦY ĐỦ
  • Chỉ sử dụng các chỉ số ma trận và nếu cần 1 vectơ (Giống như )A(i,j)=x(i)x(j)(i+j)

  • Với số điều kiện dưới 1000.

Tôi đã thử:

  1. Tạo ma trận ngẫu nhiên bằng cách sử dụng A=rand(N,N)và sau đó A'Ađể làm cho nó Sym. PD. [Điều này làm tăng số điều kiện]

  2. Sử dụng phương pháp thẩm định véc tơ như được hiển thị nhưng tôi dường như không thể có được chức năng (x,i,j)đảm bảo Sym và PD.

Sau nhiều thử nghiệm, tôi đã nghĩ ra:

a(it,jt) = (vec(it)+vec(jt))/((it-1)^2+(jt-1)^2);Nếu itjt

a(it,it) = x(it)nếu it=jt

Nhưng đây là PD cho đến khoảng 500x500.

  1. XLATMR . [Với tất cả các phân loại và nhân rộng, quá khó hiểu. Đặc biệt là vì tôi không thể hiểu đại số tuyến tính cơ bản]

Ai đó có thể cho tôi một hàm trong x (vectơ) và i, j (chỉ số) đáp ứng các yêu cầu trên không?


1
Hãy thử thêm một số lượng lớn (theo thứ tự của số điều kiện) vào các mục chéo của ma trận của bạn. Điều này tương đương với việc thêm vào mỗi giá trị riêng của bạn và sẽ cải thiện số điều kiện. alphaαα
Aron Ahmadia

@AronAhmadia, Hoạt động rực rỡ! Cảm ơn! Tuy nhiên, tôi nên thêm số lượng lớn nào? Tôi đã thử bản thân N và nó hoạt động đến 5000x5000 (vừa hoàn thành mô phỏng), liệu có sử dụng a+N*eye(N,N)đảm bảo rằng nó sẽ hoạt động cho tất cả các giá trị vượt quá 5000 không? Bạn có thể chuyển đổi nhận xét của bạn thành một câu trả lời?
Thắc mắc

Câu trả lời:


10

Để có được ma trận xác định dương dày đặc với số điều kiện với giá rẻ, hãy chọn ma trận đường chéo có đường chéo gồm các số từ (sẽ là giá trị riêng), với và được chọn ít nhất một lần và vectơ . Sau đó áp dụng một phép biến đổi tương tự, thông qua các phép biến đổi Householder, để tạo thành ma trận , trong đó .D [ 1 , c ] 1 c u A : = ( I - t u u T ) D ( I - t u u T ) t = 2 / u T ucD[1,c]1cuA:=(ItuuT)D(ItuuT)t=2/uTu

Để hình thành ma trận này với các phép toán , hãy tính , , trong các phép toán và sau đó là . (Nếu bạn chọn làm vectơ tất cả, một số phép nhân cần thiết chỉ là .)v : = D u s : = t 2 u T v / 2 w : = t v - s u O ( n ) A A = D - u w T - w u T u O ( n )O(n2)v:=Dus:=t2uTv/2w:=tvsuO(n)AA=DuwTwuTuO(n)

Lưu ý rằng hành vi của CG phụ thuộc rất nhiều vào sự phân bố eigenvalue, mà bạn có thể dễ dàng xác nhận bằng cách thay đổi .D

(Thêm vào ma trận đối xứng tùy ý cần lớn hơn giá trị riêng lớn nhất. Điều này khó tính toán, vì vậy người ta sẽ phải chọn , nhưng sau đó số điều kiện thường sẽ rất nhỏ , không phải là trường hợp thử nghiệm thực tế cho CG.)αAαα=A


Đây là hoàn hảo!
Thắc mắc vào

Làm cách nào để thay đổi thuật toán để cung cấp cho tôi ma trận khi tôi cung cấp các giá trị eigen? Chẳng hạn, tôi muốn một ma trận không đối xứng với các giá trị eigen 1,-1,2,-2...50,-50.
Thắc mắc

1
D=Diag(50:50) trong công thức trên cung cấp cho bạn các giá trị riêng này, nhưng với lựa chọn này, ma trận bây giờ không đối xứng và CG sẽ không giải quyết được vấn đề như vậy. Và trong bình luận của bạn, bạn thậm chí yêu cầu một ma trận không đối xứng, CG cũng không áp dụng. Có lẽ tốt nhất là đặt ra một câu hỏi mới với chính xác những gì bạn muốn.
Arnold Neumaier

3

Hãy thử thêm một số lượng lớn (theo thứ tự định mức của ma trận) vào các mục chéo của ma trận của bạn. Điều này tương đương với việc thêm vào mỗi giá trị riêng của bạn và sẽ cải thiện số điều kiện bằng cách giảm khoảng cách giữa giá trị riêng lớn nhất và nhỏ nhất. αα



2

Tôi không chắc bạn sẽ làm điều đó như thế nào chỉ với một vectơ, nhưng với hai vectơ ngẫu nhiên và có kích thước , bạn có thể tạo ra ma trận bán xác định dương thông qua nơi là một vòng quay trong mặt phẳng của các trục và .xθN

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

Nếu bạn muốn cải thiện số điều kiện, bạn có thể thêm giá trị dương cố định vào và bán lại nếu cần.x


Tôi xin lỗi nhưng toán học của tôi chưa tuyệt lắm. Có phải biểu thị chuyển vị? Không quay trong mặt phẳng có nghĩa là gì? Ngoài ra, lưu trữ 2 vectơ sẽ hơi tốn kém nhưng vẫn có vẻ như đây là một cách rất thú vị. U
Thắc mắc

Ri(θi)=(100cosθisinθisinθicosθi1) là ma trận xoay vòng. biểu thị ma trận chuyển tiếp phức tạp (giả sử tất cả là có thật, nó chỉ là chuyển vị). U
Deathbreath

2

Một cách hoàn toàn khác để làm điều đó sẽ như thế này: xem xét một vectơ ngẫu nhiên , sau đó là một ma trận hạng một với giá trị riêng bằng 0 và một giá trị riêng dương hoàn toàn bằng với eigenvector . Nó cũng đối xứng.xA=xxTN1x2x

Để xây dựng một ma trận SPD dày đặc, hãy cộng nhiều ma trận hạng 1 như vậy. Nói cách khác, nếu bạn có vectơ (ví dụ vectơ ngẫu nhiên), thì là SPD nếu và nếu vectơ độc lập tuyến tính (nếu chúng không độc lập tuyến tính, thì là semidefinite dương). Bạn có thể xác minh xem các vectơ của bạn (hoặc các vectơ đầu tiên bạn vẽ từ quá trình ngẫu nhiên) có độc lập tuyến tính bằng cách sử dụng trực giao liên tiếp Gram-Schmidt hay không, nhưng bạn cũng có thể nhận được ma trận SPD nếu bạn chỉ cần chọn vectơ.Mxi

A=i=1MxixiT
MNxiAMMNMN
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.