Matlab में एक विशिष्ट रैंक के साथ एक mxn मैट्रिक्स कैसे बनाएं?

Dec 22 2020

मैं m by nरैंक के साथ एक मैट्रिक्स बनाना चाहता हूं k

जैसा Aहै 8 × 8रैंक के साथ 5या Bहै 4 × 6रैंक के साथ 4

इसलिए मैं नीचे दिए गए MATLAB में एक फ़ंक्शन लिखने की कोशिश करता हूं।

मेरा विचार है:

  1. शून्य मैट्रिक्स mद्वारा उत्पन्नn
  2. मैट्रिक्स mद्वारा उत्पन्न होता है nऔर इसे कम रो इकोलोन रूप में परिवर्तित करता है
  3. 2. के मैट्रिक्स को रैंक करने के लिए रैंक दें
  4. यदि num = k, तो आउटपुट में वर्तमान मैट्रिक्स असाइन करें
  5. यात्रा तोड़ो
function output = check_rank(m,n,k)
    while 1
        output = zeros(m,n);
        matrix = randi(20,m,n);
        tmp = rref(matrix);
        num = rank(tmp);
        if (num == k)
            output = matrix;
            break;
    end
    disp(output);    
end
A = check_rank(8,8,4)

परिणाम एक अनंत लूप है और सभी उत्तर 6x6शून्य मैट्रिक्स हैं: कमांड विंडो आउटपुट


मैं भी कैसे matlab का उपयोग कर एक रैंक कश्मीर मैट्रिक्स बनाने में विधि की कोशिश की है ?

A = zeros(8,8);
for i = 1:4, A = A + randn(8,1) * randn(1,8); end
A
rank(A)

यह मेरे लक्ष्य तक पहुंच सकता है, लेकिन मुझे नहीं पता कि यह सफलतापूर्वक कैसे काम करता है?

धन्यवाद, @ अनाम!

जवाब

1 ThomasIsCoding Dec 22 2020 at 03:33

यदि आप निर्दिष्ट रैंक के साथ एक यादृच्छिक मैट्रिक्स उत्पन्न करना चाहते हैं, तो आप नीचे की तरह एक उपयोगकर्ता फ़ंक्शन बनाने का प्रयास कर सकते हैं

function [Y,rk] = fn(m,n,k)
  P = orth(randn(m,k));
  Q = orth(randn(n,k))';
  Y = P*Q;
  rk = rank(Y);
end

कहां हैं Pऔर Qएकात्मक मातृवंश हैं। Yयादृच्छिक मूल्यों के साथ उत्पन्न मैट्रिक्स है, और rkआपको रैंक की जांच करने में मदद करता है।


उदाहरण

>> [Y,rk] = fn(8,6,5)
Y =

   3.8613e-02   7.5837e-03  -7.1011e-02  -7.0392e-02  -3.8519e-02   1.6612e-01
  -3.1381e-02  -3.6287e-02   1.4888e-01  -7.6202e-02  -3.7867e-02   3.2707e-01
  -1.9689e-01   2.2684e-01   1.2606e-01  -1.2657e-03   1.9724e-01   7.2793e-02
  -1.2652e-01   7.7531e-02   1.3906e-01   3.1568e-02   1.8327e-01  -1.3804e-01
  -2.6604e-01  -1.4345e-01   1.6961e-03  -9.7833e-02   5.9299e-01  -1.5765e-01
   1.7787e-01  -3.5007e-01   3.8482e-01  -6.0741e-02  -2.1415e-02  -2.4317e-01
   8.9910e-02  -2.5538e-01  -1.8029e-01  -7.0032e-02  -1.0739e-01   2.2188e-01
  -3.4824e-01   3.7603e-01   2.8561e-02   2.6553e-02   2.4871e-02   6.8021e-01

rk = 5
1 OmG Dec 22 2020 at 03:35

आप आसानी से eyeफ़ंक्शन का उपयोग कर सकते हैं :

I = eye(k);
M = zeros(m,n);
M(1:k, 1:k) = I;

के rank(M)बराबर है k