【问题标题】:issue in defining struct input定义结构输入的问题
【发布时间】:2015-10-28 16:21:08
【问题描述】:

如何在以下 Matlab 函数中定义一个名为 mix 的结构输入,其中包含以下字段:mu1、sigma1、mu1、sigma2 和 wts:

   function plotMixtureGaussians( mixture )

        % determine the contour described by the mixture
        m1 = mixture.mu1';
        s1 = mixture.sigma1;
        m2 = mixture.mu2';
        s2 = mixture.sigma2;
        w1 = mixture.wts(1);
        w2 = mixture.wts(2);

       xlim = -5:0.1:5;
       ylim = -5:0.1:5;
       [x,y] = meshgrid( xlim, ylim );

        z = zeros( length(xlim), length(ylim) );
        for ii = 1:length(xlim)
            for jj = 1:length(ylim)
                X = [x(ii,jj), y(ii,jj)]';
                t1 = w1 * gaussian2D( X, m1, s1 );
                t2 = w2 * gaussian2D( X, m2, s2 );
                if t1 > t2
                z(ii,jj) = 1;
                else 
                z(ii,jj) = -1;
               end
           end
        end

        contour(x,y,z, 'XData', xlim, 'YData', ylim)
        hold on;

        % plot the means
        x = [ mixture.mu1(1) mixture.mu2(1)];
        y = [ mixture.mu1(2) mixture.mu2(2)];
        plot( x, y, 'r.', 'Markersize', 5);

        % plot the individual gaussians
        plotGaussian( m1, s1, xlim, ylim );
        plotGaussian( m2, s2, xlim, ylim );
        end

       function p = gaussian2D( X, mu, s )
       p = (1/( 2 *pi *det(s)^2) * exp(-0.5 * (X - mu)' * (s \ (X-mu)) ));
   end

    function plotGaussian( mu, s, xlim, ylim )

        hold on
        [x,y] = meshgrid( xlim, ylim );

        z = zeros( length(xlim), length(ylim) );
        for ii = 1:length(xlim)
            for jj = 1:length(ylim)
                X = [x(ii,jj), y(ii,jj)]';
                z(ii,jj) = gaussian2D( X, mu, s ); 
            end
        end
        contour(x,y,z, 'XData', xlim, 'YData', ylim);
    end 

【问题讨论】:

  • 问题是什么?
  • 如何定义结构输入,称为混合指定字段以使上述脚本正常工作。

标签: matlab function input struct


【解决方案1】:

我会首先参考Matlab structures 上的手动条目。但是,最简单的做法是将其定义为:

mixture.mu1 = 1;
mixture.sigma1 = 1;
mixture.mu2 = 1;
mixture.sigma2 = 1;
mixture.wts = [1 1];

当然,您可以为结构的字段输入所需的值。

执行上述操作的更短方法是:

mixture = struct('mu1', 1, 'mu2', 1, 'sigma1', 1, 'sigma2', 1, 'wts', [1 1]);

【讨论】:

    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    相关资源
    最近更新 更多