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.
Related videos on Youtube
Author by
user2002030
Updated on June 04, 2022Comments
-
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 arepf2(i)
andpd2(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 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 themrdivide
operator onx
, 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.
-