Skip to content
Snippets Groups Projects
Select Git revision
  • dba9fd08cadf70016401190b04c236722dc126e3
  • master default protected
  • 6.x protected
  • madysson
  • 5.x protected
  • asm
  • time-varying-information-set
  • 4.6 protected
  • dynare_minreal
  • dragonfly
  • various_fixes
  • 4.5 protected
  • clang+openmp
  • exo_steady_state
  • declare_vars_in_model_block
  • julia
  • error_msg_undeclared_model_vars
  • static_aux_vars
  • slice
  • aux_func
  • penalty
  • 6.4 protected
  • 6.3 protected
  • 6.2 protected
  • 6.1 protected
  • 6.0 protected
  • 6-beta2 protected
  • 6-beta1 protected
  • 5.5 protected
  • 5.4 protected
  • 5.3 protected
  • 5.2 protected
  • 5.1 protected
  • 5.0 protected
  • 5.0-rc1 protected
  • 4.7-beta3 protected
  • 4.7-beta2 protected
  • 4.7-beta1 protected
  • 4.6.4 protected
  • 4.6.3 protected
  • 4.6.2 protected
41 results

wblinv.m

Blame
  • wblinv.m 3.57 KiB
    function t = wblinv(proba, scale, shape)   % --*-- Unitary tests --*--
    
    % Inverse cumulative distribution function.
    %
    % INPUTS
    % - proba [double] Probability, scalar between 0 and 1.
    % - scale [double] Positive hyperparameter.
    % - shape [double] Positive hyperparameter.
    %
    % OUTPUTS
    % - t     [double] scalar such that P(X<=t)=proba
    
    % Copyright (C) 2015-2017 Dynare Team
    %
    % This file is part of Dynare.
    %
    % Dynare is free software: you can redistribute it and/or modify
    % it under the terms of the GNU General Public License as published by
    % the Free Software Foundation, either version 3 of the License, or
    % (at your option) any later version.
    %
    % Dynare is distributed in the hope that it will be useful,
    % but WITHOUT ANY WARRANTY; without even the implied warranty of
    % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    % GNU General Public License for more details.
    %
    % You should have received a copy of the GNU General Public License
    % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
    
    % Check input arguments.
    
    if nargin<3
        error('Three input arguments required!')
    end
    
    if ~isnumeric(proba) || ~isscalar(proba) || ~isreal(proba) || proba<0 || proba>1
        error('First input argument must be a real scalar between 0 and 1 (probability)!')
    end
    
    if ~isnumeric(scale) || ~isscalar(scale) || ~isreal(scale) || scale<=0
        error('Second input argument must be a real positive scalar (scale parameter of the Weibull distribution)!')
    end
    
    if ~isnumeric(shape) || ~isscalar(shape) || ~isreal(shape) || shape<=0
        error('Third input argument must be a real positive scalar (shape parameter of the Weibull distribution)!')
    end
    
    
    if proba<2*eps()
        t = 0;
        return
    end
    
    if proba>1-2*eps()
        t = Inf;
        return
    end
    
    t = exp(log(scale)+log(-log(1-proba))/shape);
    
    %@test:1
    %$ try
    %$    x = wblinv(0, 1, 2);
    %$    t(1) = true;
    %$ catch
    %$    t(1) = false;
    %$ end
    %$
    %$ if t(1)
    %$    t(2) = isequal(x, 0);
    %$ end
    %$ T = all(t);
    %@eof:1
    
    %@test:2
    %$ try
    %$    x = wblinv(1, 1, 2);
    %$    t(1) = true;
    %$ catch
    %$    t(1) = false;
    %$ end
    %$
    %$ if t(1)
    %$    t(2) = isinf(x);
    %$ end
    %$ T = all(t);
    %@eof:2
    
    %@test:3
    %$ scales = [.5, 1, 5];
    %$ shapes = [.1, 1, 2];
    %$ x = NaN(9,1);
    %$
    %$ try
    %$    k = 0;
    %$    for i=1:3
    %$       for j=1:3
    %$           k = k+1;
    %$           x(k) = wblinv(.5, scales(i), shapes(j));
    %$       end
    %$    end
    %$    t(1) = true;
    %$ catch
    %$    t(1) = false;
    %$ end
    %$
    %$ if t(1)
    %$    k = 1;
    %$    for i=1:3
    %$       for j=1:3
    %$           k = k+1;
    %$           t(k) = abs(x(k-1)-scales(i)*log(2)^(1/shapes(j)))<1e-12;
    %$       end
    %$    end
    %$ end
    %$ T = all(t);
    %@eof:3
    
    %@test:4
    %$ debug = false;
    %$ scales = [ .5, 1, 5];
    %$ shapes = [ 1, 2, 3];
    %$ x = NaN(9,1);
    %$ p = 1e-1;
    %$
    %$ try
    %$    k = 0;
    %$    for i=1:3
    %$       for j=1:3
    %$           k = k+1;
    %$           x(k) = wblinv(p, scales(i), shapes(j));
    %$       end
    %$    end
    %$    t(1) = true;
    %$ catch
    %$    t(1) = false;
    %$ end
    %$
    %$ if t(1)
    %$    k = 1;
    %$    for i=1:3
    %$       for j=1:3
    %$           k = k+1;
    %$           shape = shapes(j);
    %$           scale = scales(i);
    %$           density = @(z) exp(lpdfgweibull(z,shape,scale));
    %$           if debug
    %$               [shape, scale, x(k-1)]
    %$           end
    %$           if isoctave
    %$               s = quadv(density, 0, x(k-1),1e-10);
    %$           else
    %$               s = integral(density, 0, x(k-1));
    %$           end
    %$           if debug
    %$               [s, abs(p-s)]
    %$           end
    %$         if isoctave
    %$           t(k) = abs(p-s)<1e-10;
    %$         else
    %$           t(k) = abs(p-s)<1e-12;
    %$         end
    %$       end
    %$    end
    %$ end
    %$ T = all(t);
    %@eof:4