Statistics 在索引表达式中脚本的八度无效使用

Statistics 在索引表达式中脚本的八度无效使用,statistics,octave,Statistics,Octave,我尝试使用fitgmdist.m来拟合高斯混合模型。但是,当它调用类gmdistribution的构造函数时,我得到的错误消息如下: 错误:在索引表达式中无效使用script/home/ubuntu/UAVProject_DataStructure/gmdistribution.m 错误:从以下位置调用: 错误:/home/ubuntu/UAVProject\u DataStructure/fitgmdist.m,第505行第7列 错误:/home/ubuntu/UAVProject_DataS

我尝试使用fitgmdist.m来拟合高斯混合模型。但是,当它调用类gmdistribution的构造函数时,我得到的错误消息如下:

错误:在索引表达式中无效使用script/home/ubuntu/UAVProject_DataStructure/gmdistribution.m 错误:从以下位置调用: 错误:/home/ubuntu/UAVProject\u DataStructure/fitgmdist.m,第505行第7列 错误:/home/ubuntu/UAVProject_DataStructure/computegm.m,第78行第10列 错误:/home/ubuntu/UAVProject\u DataStructure/ImageProcessing.m,第18行第13列

我将两个文件:fitgmdist.mgmdistribution.m放在当前目录中

我还更改了gmdistribution.m name,以避免与octave库的文件同名,但它不起作用。有人能帮忙吗?谢谢

下面是调用构造函数代码:

obj=gmdistribution(最佳参数mu,最佳参数Sigma,最佳参数p')

以下是构造函数代码:

 ########################################
  ## Constructor
  function obj = gmdistribution (mu,sigma,p = [],extra = [])
    obj.DistributionName = "gaussian mixture distribution";
    obj.mu = mu;
    obj.Sigma = sigma;
    obj.NumComponents = rows (mu);
    obj.NumVariables = columns (mu);
    if (isempty (p))
      obj.ComponentProportion = ones (1,obj.NumComponents) / obj.NumComponents;
    else
      if any (p < 0)
        error ("gmmdistribution: component weights must be non-negative");
      endif
      s = sum(p);
      if (s == 0)
        error ("gmmdistribution: component weights must not be all zero");
      elseif (s != 1)
        p = p / s;
      endif
      obj.ComponentProportion = p(:)';
    endif
    if (length (size (sigma)) == 3)
      obj.SharedCovariance = false;
    else
      obj.SharedCovariance = true;
    endif
    if (rows (sigma) == 1 && columns (mu) > 1)
      obj.DiagonalCovariance = true;
      obj.CovarianceType = 'diagonal';
    else
      obj.DiagonalCovariance = false;       ## full
      obj.CovarianceType = 'full';
    endif

    if (!isempty (extra))
      obj.AIC                   = extra.AIC;
      obj.BIC                   = extra.BIC;
      obj.Converged             = extra.Converged;
      obj.NegativeLogLikelihood = extra.NegativeLogLikelihood;
      obj.NlogL                 = extra.NegativeLogLikelihood;
      obj.NumIterations         = extra.NumIterations;
      obj.RegularizationValue   = extra.RegularizationValue;
    endif
  endfunction
########################################
##建造师
函数obj=gmdistribution(mu,sigma,p=[],extra=[]))
obj.DistributionName=“高斯混合分布”;
obj.mu=mu;
目标西格玛=西格玛;
obj.NumComponents=行(mu);
obj.NumVariables=列(mu);
if(isempty(p))
obj.component比例=一(1,obj.NumComponents)/obj.NumComponents;
其他的
如有(p<0.05)
错误(“gmmdistribution:组件权重必须为非负”);
恩迪夫
s=总和(p);
如果(s==0)
错误(“gmmdistribution:组件权重不能全部为零”);
其他(s!=1)
p=p/s;
恩迪夫
obj.componentproporty=p(:)';
恩迪夫
如果(长度(尺寸(西格玛))==3)
obj.SharedConvariance=false;
其他的
obj.SharedConvariance=真;
恩迪夫
如果(行(sigma)==1和列(mu)>1)
obj.对角协方差=真;
对象协方差类型='对角线';
其他的
对角协方差=假;##满的
obj.convariaceType='完整';
恩迪夫
如果(!isempty(额外))
obj.AIC=额外的.AIC;
obj.BIC=额外的.BIC;
obj.收敛=额外收敛;
obj.NegativeLogLikelihood=额外的.NegativeLogLikelihood;
obj.NlogL=额外的负性高血糖;
obj.NumIterations=额外的.NumIterations;
obj.正则化值=额外的.正则化值;
恩迪夫
端功能

我认为您应该创建一个MCVE(尽可能精简您的代码,并确保其他人可以运行您的代码(完整性))。听起来您的类没有正确定义,所以octave没有检测到它是一个类定义,并尝试将其视为一个简单的脚本(然后它抱怨你试图用参数调用它)。你有合适的
classdef
方法吗?