【问题标题】:indexing error, MATLAB索引错误,MATLAB
【发布时间】:2013-01-01 12:02:04
【问题描述】:

不断收到索引错误“()-索引必须出现在索引表达式的最后” 基本上我试图创建一个由 randn(n,1000000) 组成的矩阵 x,其中每 j 行乘以矩阵 NV(i,j)。

%monte carlo simulation
function [y1,y2,y3,y4]= ed1(SNRL,SNRS,SNRH,n) %ed is the energy detection
g1= SNRL:SNRS:SNRH;
g=10.^(g1/10);
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,length(g));
y=zeros(n,length(g));

for i=1 : length(g)



for j=1:n
     NV=(i,j); 
    x(j,:) = randn(n,1000000)*sqrt(NV(i,j)); 
     y(j,:)=randn(n,1000000*(j),:)*sqrt(g(i))+x(j,:); 
end

 %Tgam is the threshold of gamma distribution 
 Tgam = gaminv((1-beta),n/2,(2/n)*(1+g(i))); %probab of flase detection
 pf1(i)= gamcdf(Tgam,n/2,(2/n)*(1+g(i))); %ho
 pd1 (i) = gamcdf(Tgam,n/2,2/n); %h1 % prob of detection

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

 y1=pf1; y2=pd1; y3=pf2; y4=pd2;
end

【问题讨论】:

  • randn(n,1000000*(j),:)
  • 什么是 g,NV=(i,j); 是什么意思?一些可以让我们重现您的错误的代码会很棒。
  • 嘿,我已经添加了整个代码。 NV(i,j) 是噪声方差。但我稍后会添加该矩阵计算,现在我希望它是一个矩阵 i x j
  • @AK4749 我试过了,但它给了我错误:“未定义的函数或变量“randn”。

标签: matlab matrix indexing


【解决方案1】:

你有三件事给你错误:

1) NV=(i,j) 这个语法会给你一个错误信息。如果您没有收到有关此行的错误消息,那么您在调用此代码的行中有错误,也应该发布。尝试 NV=zeros(length(g),n); 进行临时修复,直到您知道 NV 应该是什么。

2) randn(n,1000000*(j),:) 也是错误的语法。你是说randn(n,1000000*(j))?

3) x(j,:) = randn(1,10000)*sqrt(NV(i,j));: x 在您的代码中写入的大小不正确,除非 g 的长度神奇地为 10000。

希望检查这 3 件事能让您了解是什么给出了您的特定错误消息(这与这些错误给我的任何消息都不相同。)

【讨论】:

  • 嘿,非常感谢您的帮助,但是一旦我添加了x(j,:) = randn(1,10000)*sqrt(NV(i,j)); ,它就会给出一个错误,提示““randn”以前似乎被用作函数或命令,与此处的使用冲突作为变量的名称。此错误的一个可能原因是您忘记初始化变量,或者您已使用 load 或 eval 隐式初始化它。"
猜你喜欢
  • 2018-03-20
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多