Warning: Rank deficient, MATLAB

16,222

Solution 1

In the line

pf2(i)= length (find(sum((y)/(sqrt(NV))).^2)/(n<Tgam))/1000000;

do you really want to perform a matrix division? If you are interested in the element-wise division (i.e. the first element of y divided by the first of sqrt(NV) etc, you should use ./:

pf2(i)= length (find(sum((y)./(sqrt(NV))).^2)/(n<Tgam))/1000000;

Solution 2

You are using / (matrix right division) while you probably mean ./ (right division).

As for an explanation of the error msg see EitanT's comment.

Share:
16,222

Related videos on Youtube

user2002030
Author by

user2002030

Updated on June 04, 2022

Comments

  • user2002030
    user2002030 almost 2 years

    I've been recieving an error stating:

    Warning: Rank deficient, rank = 1, tol =  3.845925e-13. 
    In ed1 at 38 
    
    Warning from ed1 at 38
     pf2(i)= length (find(sum((y)/(sqrt(NV))).^2)/(n<Tgam))/1000000;
    

    to run the below code type in [y1,y2,y3,y4]= ed1(1,1,20,2); in the command promopt. the lines causing this error are pf2(i) and pd2(i)

    function [y1,y2,y3,y4]= ed1(SNRL,SNRS,SNRH,n) %ed is the energy detection
    g1= SNRL:SNRS:SNRH;
    g=10.^(g1/10); %SNR
    beta=0.8; % is the probability pfa, it cannot be more than 1
    
    pf1=zeros(1,length(g));
    pd1=zeros(1,length(g));
    pf2=zeros(1,length(g));
    pd2=zeros(1,length(g));
    x=zeros(n,1000000);
    y=zeros(n,1000000);
    NV=zeros(n,1000000);
    
    for a= 1:g %diff SNR
    for b= 1:n %DIFF USERS,users are columns 
                NV(a,b)=1*b ;%assigning a value to the element of the matrix.
    end
    end
    
    for i=1 : g %samples
    
    for j=1:n       %diff users. 
     %NV=ones(1000000,n);
        x(j,:)=randn(1,1000000)*sqrt(NV(i,j));  
        y(j,:)=randn(1,1000000)*sqrt(g(i)/NV(i,j))+x(j,:);
    
    end
    
     %Tgam is the threshold of gamma distribution 
     Tgam = gaminv((1-beta),n/2,(2/n)*(1+(g(i)/NV(i,j)))); %probab of flase detection;
    
    
     pf2(i)= length (find(sum((y)/(sqrt(NV))).^2)/(n<Tgam))/1000000;
     pd2(i)= length (find(sum(x/sqrt(NV)).^2)/n<Tgam)/1000000; 
    
     y1=pf1; y2=pd1; y3=pf2; y4=pd2;
    end
    

    any suggestion to what causes this? and how to solve please. thanks

    • Eitan T
      Eitan T about 11 years
      "Rank deficient" means that your matrix, I believe it is named x, doesn't have the largest possible rank. In other words, it has linearly dependent rows/columns, when there shouldn't be. Why does it matter? Because you're using the mrdivide operator on x, which tries to solve an equation system, which happens to be rank-deficient. How to solve it? Well, errm, you'll have to debug your code and see why this occurs.