خوارزمية بسيطة لتوليد إيجابية-semidefinite المصفوفات

StackOverflow https://stackoverflow.com/questions/619335

  •  03-07-2019
  •  | 
  •  

سؤال

أريد أن تولد الإيجابية عشوائية شبه أكيدة المصفوفات.أنا أبحث عن خوارزمية أو أكثر ويفضل بسيط تنفيذ الخوارزمية في C, matlab, جافا أو أي لغة.

هل كانت مفيدة؟

المحلول

  1. توليد مصفوفة عشوائية
  2. اضربها الخاصة تبديل
  3. كنت قد حصلت على إيجابية شبه محدد المصفوفة.

رمز المثال (الثعبان):

from scipy import random, linalg
matrixSize = 10 
A = random.rand(matrixSize,matrixSize)
B = numpy.dot(A,A.transpose())
print 'random positive semi-define matrix for today is', B

نصائح أخرى

تحتاج إلى أن تكون واضحة على التعريف الخاص بك من "عشوائية".ما هي القيود على الناتج مصفوفة ؟ هل تريد معاملات أن يكون موحدا أو عادة توزيعها ؟ هل تريد مجرد أن يكون معين التوزيع ؟ (.... الخ)

هناك عدد من الطرق لتوليد إيجابية semidefinite المصفوفات م ، بما في ذلك:

  1. نظرا التعسفي المصفوفة A ، حساب M = ATأ (بناء Cholesky التحلل)
  2. نظرا التعسفي قطري مصفوفة S مع غير سلبي قطري الإدخالات ، orthonormal المصفوفة س من نفس الحجم ، حساب M = QSQT (بناء القيمة المفردة)

بالنسبة العددية الأسباب ربما اختيار النهج الثاني عن طريق توليد مصفوفة قطرية مع الخصائص المطلوبة ، ثم توليد س تكوين عدد من رب تأملات (توليد عشوائي ناقلات الخامس, الحجم إلى وحدة طول ، ح = ط - 2vvT);أشك أنك تريد استخدام K * N حيث N هو حجم المصفوفة م ، و K هو عدد يتراوح بين 1.5-3 (انا التخمين على هذا) أن يضمن أن لديها ما يكفي من درجات الحرية.

هل يمكن أيضا توليد orthonormal المصفوفة س باستخدام للمعطيات:اختيار 2 متميزة القيم من 1 إلى N و توليد معطيات دوران حول هذا الزوج من محاور, مع زاوية موزعة بشكل متجانس من 0 إلى 2 * pi.ثم تأخذ ك * ن من هذه (نفس التعليل الفقرة أعلاه) و تكوينها ينتج س.

تحرير:كنت تخمين (غير متأكد) أنه إذا كان لديك المعاملات بشكل مستقل ولدت و توزيعها بشكل طبيعي ، ثم المصفوفة ككل سيكون "التوزيع الطبيعي" (أيا كان ذلك يعني).هذا صحيح بالنسبة ناقلات على الأقل.(ن بشكل مستقل ولدت جاوس المتغيرات العشوائية ، واحدة لكل مكون يعطيك جاوس متجه عشوائي) هذا ليس صحيحا بالنسبة موحد-توزيع المكونات.

إذا كنت يمكن أن تولد مصفوفة عشوائية في اللغة التي اخترتها، ثم باستخدام الخاصية أن مصفوفة مضروبا تبديل لها أمر إيجابي شبه definte، يمكنك توليد إيجابية matix عشوائي شبه مؤكد

في ماتلاب أنه سيكون بهذه البساطة

% Generate a random 3x3 matrix
    A = rand(3,3) 
% Multiply by its tranpose
    PosSemDef = A'*A 

والتوزيعات الطبيعية على المصفوفات semidefinite الإيجابية توزيعات يشارت .

وA '* A سيعطي المنتدى إيجابي مصفوفة semidefite وفقط إذا كانت A هي رتبة التي تعاني من نقص. لذا الإجابات ذكرت أعلاه والتي تم نسخها من ويكيبيديا ليست صحيحة عموما. لحساب مصفوفة semidefinite إيجابية مجرد اتخاذ أي م مستطيلة بواسطة n مصفوفة (م <ن) واضربها تبديل لها. بمعنى آخر. إذا B هو م بواسطة n مصفوفة، مع م <ن، ثم B '* B هو مصفوفة semidefinite. آمل أن يساعد هذا.

لتوضيح قليلا (امل). السماح لتكون مصفوفة عشوائية (على سبيل المثال، التي يسكنها variates العادية عشوائي)، م خ ن م مع> = ن. ثم إذا كان (أ) هو من رتبة عمود كامل، A'A سوف تكون إيجابية محددة. إذا كانت A هي من رتبة <ن ثم A'A سيكون semidefinite الإيجابي (ولكن ليس إيجابية محددة).

ومصفوفة طبيعية عشوائية مع م> = ن ستكون بالتأكيد تقريبا من رتبة كاملة. لتوليد رتبة ناقصة مصفوفة واحدة يمكن إلحاق واحد أو أكثر من الأعمدة التي هي مزيج خطية من الأعمدة الأخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top