WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Compiler - Fehler Klasse ProbDistUnivParam

 

MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 29.07.2012, 18:47     Titel: Compiler - Fehler Klasse ProbDistUnivParam
  Antworten mit Zitat      
Hallo,

ich habe meine GUI per Deployment Tool kompiliert. Bei der Verwendung von histfit() erhalte ich Fehler.

Code:

> !Normwerte.exe
??? Error using ==> histfit at 69
Setting the 'Support' property of the 'ProbDist' class is not allowed
 


Die Klassendefinition sieht folgendermaßen aus:

Code:

%ProbDistUnivParam  1 •Ï—ʃpƒ‰ƒƒgƒŠƒbƒNŠm—¦•ª•z
%
%   ProbDistUnivParam ƒIƒuƒWƒFƒNƒg‚́A1 •Ï—ʂ̃pƒ‰ƒƒgƒŠƒbƒNŠm—¦•ª•z‚ð•\‚µ‚Ü‚·B
%   ƒRƒ“ƒXƒgƒ‰ƒNƒ^‚ðŽg‚Á‚ăpƒ‰ƒ[ƒ^’l‚ð—^‚¦‚邱‚ƂŁA‚Ü‚½‚́A•ª•z‚ðƒf[ƒ^‚É
%   ‹ßŽ—‚·‚邽‚ß‚Ì FITDIST ŠÖ”‚ðŽg‚¤‚±‚Æ‚É‚æ‚Á‚āA‚±‚̃IƒuƒWƒFƒNƒg‚ðì¬‚·‚é
%   ‚±‚Æ‚ª‚Å‚«‚Ü‚·B
%
%   PD = ProbDistUnivParam(DISTNAME,PARAMS) ‚́Aƒpƒ‰ƒ[ƒ^ PARAMS ‚Å
%   DISTNAME ‚Æ‚¢‚¤–¼‘O‚ÌŠm—¦•ª•z‚ð’è‹`‚·‚éƒIƒuƒWƒFƒNƒg PD ‚ðì¬‚µ‚Ü‚·B
%
%   PD = FITDIST(X,DISTNAME) ‚́AƒxƒNƒgƒ‹ X “à‚̃f[ƒ^‚©‚琄’肳‚ê‚éƒpƒ‰ƒ[ƒ^‚ŁA
%   DISTNAME ‚Æ‚¢‚¤–¼‘O‚ÌŠm—¦•ª•z‚ð’è‹`‚·‚éƒIƒuƒWƒFƒNƒg PD ‚ðì¬‚µ‚Ü‚·B
%
%   ProbDistUnivParam ƒvƒƒpƒeƒB:
%       DistName      - •ª•z–¼
%       InputData     - •ª•z‚ð‹ßŽ—‚·‚邽‚ß‚ÉŽg—p‚·‚éƒf[ƒ^‚ðŠÜ‚ލ\‘¢‘Ì
%       NLogL         - ‹ßŽ—‚µ‚½ƒf[ƒ^‚ɑ΂·‚镉‚̑ΐ”–Þ“x
%       NumParams     - ƒpƒ‰ƒ[ƒ^‚̌”
%       ParamNames    - NumParams ƒpƒ‰ƒ[ƒ^–¼‚̃Zƒ‹”z—ñ
%       Params        - NumParams ƒpƒ‰ƒ[ƒ^’l‚Ì”z—ñ
%       ParamIsFixed  - „’è‚Å‚Í‚È‚­A‚ǂ̃pƒ‰ƒ[ƒ^‚ðC³‚·‚é‚©‚ðŽ¦‚·
%                       ˜_—ƒxƒNƒgƒ‹
%       ParamDescription - ƒpƒ‰ƒ[ƒ^‚ð‹Lq‚·‚é NumParams •¶Žš—ñ‚̃Zƒ‹”z—ñ
%       ParamCov      - ƒpƒ‰ƒ[ƒ^’l‚Ì‹¤•ªŽUs—ñ
%       Support       - •ª•z‚̃Tƒ|[ƒg‚ð‹Lq‚·‚é\‘¢‘Ì
%
%       ƒpƒ‰ƒ[ƒ^’l‚́AƒvƒƒpƒeƒB‚Æ‚µ‚Ä‚à—^‚¦‚ç‚ê‚Ü‚·B‚½‚Æ‚¦‚΁APD ‚ª
%       ³‹K•ª•z‚ð•\‚·ê‡APD.mu ‚Æ PD.sigma ‚́Amu ‚Æ sigma ƒpƒ‰ƒ[ƒ^‚Ì
%       ’l‚ð—^‚¦‚éƒvƒƒpƒeƒB‚É‚È‚è‚Ü‚·B
%
%   ProbDistUnivParam ƒƒ\ƒbƒh:
%      ProbDistUnivParam/ProbDistUnivParam - ƒRƒ“ƒXƒgƒ‰ƒNƒ^
%      cdf            - —ݐϕª•zŠÖ”
%      icdf           - ‹t—ݐϕª•zŠÖ”
%      iqr            - Žl•ªˆÊ”͈Í
%      mean           - •½‹Ï
%      median         - ’†‰›’l
%      paramci        - ƒpƒ‰ƒ[ƒ^‚ɑ΂·‚éM—Š‹æŠÔ
%      pdf            - Šm—¦–§“xŠÖ”
%      random         - —”¶¬
%      std            - •W€•Î·
%      var            - •ªŽU
%
%   ŽQl PROBDIST, PROBDISTPARAMETRIC, FITDIST.


%   Copyright 2008-2009 The MathWorks, Inc.
 


und

Code:

classdef ProbDistUnivParam < ProbDistParametric
%ProbDistUnivParam Univariate parametric probability distribution.
%   A ProbDistUnivParam object represents a univariate parametric probability
%   distribution.  You can create this object by using the constructor and
%   supplying parameter values, or by using the FITDIST function to fit the
%   distribution to data.
%
%   PD = ProbDistUnivParam(DISTNAME,PARAMS) creates an object PD defining a
%   probability distribution named DISTNAME with parameters PARAMS.
%
%   PD = FITDIST(X,DISTNAME) creates an object PD defining a probability
%   distribution named DISTNAME, with parameters estimated from the data in
%   the vector X.
%
%   ProbDistUnivParam properties:
%       DistName      - name of the distribution
%       InputData     - structure containing data used to fit the distribution
%       NLogL         - negative log likelihood for fitted data
%       NumParams     - number of parameters
%       ParamNames    - cell array of NumParams parameter names
%       Params        - array of NumParams parameter values
%       ParamIsFixed  - logical vector indicating which parameters are
%                       fixed rather than estimated
%       ParamDescription - cell array of NumParams strings describing
%                       the parameters
%       ParamCov      - covariance matrix of parameter values
%       Support       - structure describing the support of the distribution
%
%       Parameter values are also provided as properties.  For example, if
%       PD represents the normal distribution, then PD.mu and PD.sigma are
%       properties that give the values of the mu and sigma parameters.
%
%   ProbDistUnivParam methods:
%      ProbDistUnivParam - constructor
%      cdf            - Cumulative distribution function
%      icdf           - Inverse cumulative distribution function
%      iqr            - Interquartile range
%      mean           - Mean
%      median         - Median
%      paramci        - Confidence intervals for the parameters
%      pdf            - Probability density function
%      random         - Random number generation
%      std            - Standard deviation
%      var            - Variance
%
%   See also PROBDIST, PROBDISTPARAMETRIC, FITDIST.

%   Copyright 2008-2009 The MathWorks, Inc.
%   $Revision: 1.1.6.4 $  $Date: 2009/01/23 22:30:15 $

    properties(GetAccess='protected', SetAccess='protected')
        icdffunc = []; % function y=icdffunc(p,param1,param2,...)
    end
   
    methods
        x = icdf(obj,p)
        r = iqr(obj)
        m = median(obj)
    end
   
    methods
        function pd = ProbDistUnivParam(distname,params)
%ProbDistUnivParam Univariate parametric probability distribution constructor.
%   PD = ProbDistUnivParam(DISTNAME,PARAMS) creates an object PD defining a
%   probability distribution named DISTNAME with parameters specified by
%   the numeric vector PARAMS.  DISTNAME can be any of the following:
%    
%         'beta'                             Beta
%         'binomial'                         Binomial
%         'birnbaumsaunders'                 Birnbaum-Saunders
%         'exponential'                      Exponential
%         'extreme value' or 'ev'            Extreme value
%         'gamma'                            Gamma
%         'generalized extreme value' 'gev'  Generalized extreme value
%         'generalized pareto' or 'gp'       Generalized Pareto
%         'inversegaussian'                  Inverse Gaussian
%         'logistic'                         Logistic
%         'loglogistic'                      Log-logistic
%         'lognormal'                        Lognormal
%         'nakagami'                         Nakagami
%         'negative binomial' or 'nbin'      Negative binomial
%         'normal'                           Normal
%         'poisson'                          Poisson
%         'rayleigh'                         Rayleigh
%         'rician'                           Rician
%         'tlocationscale'                   t location-scale
%         'weibull' or 'wbl'                 Weibull
%
%   See also PROBDISTUNIVPARAM, FITDIST.

            if nargin<2
                error('stats:ProbDistUnivParam:TooFewInputs',...
                      'DISTNAME and PARAMS inputs are required.')
            end
 
            % Check distribution name
            [emsg,distname,spec] = checkdistname(distname);
            if ~isempty(emsg)
                error('stats:ProbDistUnivParam:BadDistName',emsg);
            end
            pd.DistName = distname;

            % Check parameters
            emsg = checkparams(spec,params);
            if ~isempty(emsg)
                error('stats:ProbDistUnivParam:BadParams',emsg);
            end
            params = params(:)';

            % Fill in object properties from spec structure
            pd.Params = params;
            pd.ParamNames = spec.pnames;
            pd.NumParams = numel(params);
            pd.ParamCov = zeros(numel(params));
            pd.ParamIsFixed = true(size(params));
            pd.ParamDescription = spec.pdescription;
            pd.Support.iscontinuous = spec.iscontinuous;
            pd.Support.range = spec.support;
            pd.Support.closedbound = spec.closedbound;
           
            pd.cdffunc = spec.cdffunc;
            pd.icdffunc = spec.invfunc;
            pd.statfunc = spec.statfunc;
            pd.pdffunc = spec.pdffunc;
            if isfield(spec,'randfunc')
                pd.randfunc = spec.randfunc;
            end
            if isfield(spec,'cifunc')
                pd.cifunc = spec.cifunc;
            end
        end %constructor
 
        function b = properties(pd)
%PROPERTIES Properties of a ProbDistUnivParam opject
%   P = PROPERTIES(PD) returns a cell array P of the names of the
%   properties of the probability distribution object PD.
            b = [properties('ProbDistUnivParam'); pd.ParamNames(:)];
        end
    end

    methods(Static = true, Hidden = true)
        pd = fit(distname,x,varargin)
    end

end % classdef

 


So wie ich das sehe, ist da kein Property privat. Ich habe auch schon beide Dateien in das Deployment Projekt direkt integiert. Das ergab eine kurze Recherche. Das löst das Problem leider auch nicht. Ich denke, dass die Klassendefinitionen fehlerhaft sind.

Was jemand, wie ich das beheben kann?

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.07.2012, 20:55     Titel:
  Antworten mit Zitat      
Hallo,

ich gehe davon aus, dass die GUI im "normalen" MATLAB-Betrieb funktioniert?

Kannst du Beispielcode zur Verfügung stellen, anhanddessen sich das Problem reproduzieren lässt? Muss ja nicht die gesamte GUI sein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 29.07.2012, 21:36     Titel:
  Antworten mit Zitat      
Hallo Harald,

ja, die GUI funktioniert im "normalen" Betrieb. Ich habe nun sehr viele Varianten ausprobiert, um den Fehler zu beheben. Ich habe fast den ganzen Tag daran gesessen. Daher war mein Frust so groß, dass ich eine eigene histfit-Funktion geschrieben habe. Diese arbeitet absolut zufriedenstellend. Daher werde ich der Sache hier nicht weiter nachgehen.

Mein Projekt ist einfach zu komplex, als dass ich hier die entsprechenden Codebereiche angeben könnte.

Man kann jedoch ein simples Beispiel selbst erzeugen.

Code:

a=randn(100,1);
histfit(a);
 


Wenn man dies mit dem Deployment Tool kompilieren will, kommt es zu den genannten Fehlern.

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.07.2012, 08:29     Titel:
  Antworten mit Zitat      
Hallo,

ich habe es gerade mal mit 2011b probiert, und dort läuft es problemlos.
Bei Gelegenheit werde ich es auch mal mit 2009b probieren um zu sehen, ob ich das reproduzieren kann.
Falls ja, dann wird es ein Problem sein, das inzwischen behoben ist. Falls nein, könnte es ein konfigurationsspezifisches Problem sein. Das müsste man dann genauer untersuchen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 30.07.2012, 08:43     Titel:
  Antworten mit Zitat      
Guten Morgen!

Ok, ich bin gespannt, ob du den Fehler mit 2009b reproduzieren kannst. Ich gehe allerdings von einer falschen Klassendefinition in der von mir verwendeten Version aus.

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.07.2012, 20:57     Titel:
  Antworten mit Zitat      
Hallo,

ja, ich konnte es reproduzieren.

Das zugrundeliegende Problem ist
http://www.mathworks.com/support/bugreports/558673

Das hat zur Folge, dass die (an sich korrekt implementierte) statische Methode fit der Klasse ProbDistUnivParam durch MATLAB Compiler nicht korrekt aufgelöst wird.

Die aufgezeigte Möglichkeit würde ich hier so umsetzen: das komplette Klassenverzeichnis in ein Verzeichnis kopieren, und dieses auf dem Suchpfad höher setzen. Dort wie im Bug Report beschrieben die Methode fit in das Klassendefinitionsfile reinschieben.

Die schönere Möglichkeit wäre natürlich das Upgrade auf eine neuere MATLAB-Version.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 31.07.2012, 11:54     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Bemühungen. Jetzt bin ich doch versucht, das nochmal an zufassen. Very Happy

Mal schauen...

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.