Changeset 983

Show
Ignore:
Timestamp:
10/24/08 15:58:30 (2 months ago)
Author:
lebrun
Message:

Promoted some NumericalPoint into NumericalPointWithDescription that were missed during the separation between NumericalPoint and Description into the getParameters() method of several distributions. This solves tickets #155.
Changed the return type of the getImportanceFactors() method of the QuadraticCumul class. This solves ticket #156.
Added a simplified constructor from a String to the class Description. It closes ticket #108.
Removed the dependence to rotRPackage for the Kolmogorov() method of the FittingTest class. It greatly improves both the performance and the generality of this method.
Improved the const-correctness of many methods.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/lebrun/devel/lib/src/Base/Type/Description.cxx

    r924 r983  
    5353 
    5454 
     55      /* Constructor with value */ 
     56      Description::Description(const String & value) 
     57        : Common::TypedCollectionInterfaceObject<DescriptionImplementation>(new DescriptionImplementation(value)) 
     58      { 
     59        // Nothing to do 
     60      } 
     61 
     62 
    5563      /* Constructor with size and default value */ 
    5664      Description::Description(const UnsignedLong size, 
  • branches/lebrun/devel/lib/src/Base/Type/Description.hxx

    r924 r983  
    5757        Description(const UnsignedLong size); 
    5858 
     59        /** Constructor with value */ 
     60        Description(const String & value); 
     61 
    5962        /** Constructor with size and default value */ 
    6063        Description(const UnsignedLong size, 
  • branches/lebrun/devel/lib/src/Base/Type/DescriptionImplementation.cxx

    r924 r983  
    6363 
    6464 
     65      /* Constructor with size */ 
     66      DescriptionImplementation::DescriptionImplementation(const String & value) 
     67        : PersistentCollection<String>(1, value) 
     68      { 
     69        // Nothing to do 
     70      } 
     71 
     72 
    6573      /* Constructor with size and default value */ 
    6674      DescriptionImplementation::DescriptionImplementation(const UnsignedLong size, 
  • branches/lebrun/devel/lib/src/Base/Type/DescriptionImplementation.hxx

    r924 r983  
    5959        /** Constructor with size */ 
    6060        DescriptionImplementation(const UnsignedLong size);      
     61 
     62        /** Constructor with default value */ 
     63        DescriptionImplementation(const String & value);         
    6164         
    6265        /** Constructor with size and default value */ 
  • branches/lebrun/devel/lib/src/Uncertainty/Algorithm/Analytical/AnalyticalResult.cxx

    r943 r983  
    8181                                         const String & name): 
    8282        PersistentObject(name), 
    83         physicalSpaceDesignPoint_(NumericalPoint(standardSpaceDesignPoint.getDimension(), 0.0)), 
     83        physicalSpaceDesignPoint_(standardSpaceDesignPoint.getDimension()), 
    8484        limitStateVariable_(limitStateVariable), 
    8585        isStandardPointOriginInFailureSpace_(isStandardPointOriginInFailureSpace), 
    86         hasoferReliabilityIndex_(0.), 
    87         importanceFactors_(NumericalPoint(standardSpaceDesignPoint.getDimension(), 0.0)), 
    88         hasoferReliabilityIndexSensitivity_(Sensitivity(0)), 
     86        hasoferReliabilityIndex_(0.0), 
     87        importanceFactors_(standardSpaceDesignPoint.getDimension()), 
     88        hasoferReliabilityIndexSensitivity_(0), 
    8989        isAlreadyComputedImportanceFactors_(false), 
    9090        isAlreadyComputedHasoferReliabilityIndexSensitivity_(false) 
     
    9797      AnalyticalResult::AnalyticalResult(): 
    9898        PersistentObject(), 
    99         standardSpaceDesignPoint_(NumericalPoint(0)), 
    100         physicalSpaceDesignPoint_(NumericalPoint(0)), 
     99        standardSpaceDesignPoint_(0), 
     100        physicalSpaceDesignPoint_(0), 
    101101        // Fake event based on a fake 1D composite random vector, which requires a fake 1D NumericalMathFunction 
    102102        limitStateVariable_(RandomVector(new CompositeRandomVector(NumericalMathFunction(Description(0),Description(1),Description(1)), 
    103103                                                                                 new ConstantRandomVector(NumericalPoint(0)))), 
    104                             Less(), 0.), 
     104                            Less(), 0.0), 
    105105        isStandardPointOriginInFailureSpace_(false), 
    106         hasoferReliabilityIndex_(0.), 
    107         importanceFactors_(NumericalPoint(0)), 
    108         hasoferReliabilityIndexSensitivity_(Sensitivity(0)), 
     106        hasoferReliabilityIndex_(0.0), 
     107        importanceFactors_(0), 
     108        hasoferReliabilityIndexSensitivity_(0), 
    109109        isAlreadyComputedImportanceFactors_(false), 
    110110        isAlreadyComputedHasoferReliabilityIndexSensitivity_(false) 
     
    179179      void AnalyticalResult::computeImportanceFactors() 
    180180      { 
    181         UnsignedLong dimension(standardSpaceDesignPoint_.getDimension()); 
     181        const UnsignedLong dimension(standardSpaceDesignPoint_.getDimension()); 
    182182        importanceFactors_ = NumericalPoint(dimension, -1.0); 
    183183        /* First, check that the importance factors are well-defined */ 
     
    185185          { 
    186186            /* get the input distribution */ 
    187             Distribution inputDistribution(limitStateVariable_.getImplementation()->getAntecedent()->getDistribution()); 
     187            const Distribution inputDistribution(limitStateVariable_.getImplementation()->getAntecedent()->getDistribution()); 
    188188            /* get the input standard distribution */ 
    189             Distribution standardDistribution(inputDistribution.getStandardDistribution()); 
     189            const Distribution standardDistribution(inputDistribution.getStandardDistribution()); 
    190190            /* get the marginal 1D from in the standard space where all marginals are identical */ 
    191             Distribution standardMarginalDistribution(standardDistribution.getMarginal(0)); 
     191            const Distribution standardMarginalDistribution(standardDistribution.getMarginal(0)); 
    192192 
    193193            /* evaluate the corresponding vector in the importance factors space */ 
     
    195195            /* if Rosenblatt  Transformation : Z = Phi^(-1)o F_{Xi}(Xi*) */ 
    196196            // for each marginals */ 
    197             for (UnsignedLong marginalIndex = 0; marginalIndex < dimension; marginalIndex++
    198               { 
    199                 NumericalScalar y = inputDistribution.getMarginal(marginalIndex).computeCDF(NumericalPoint(1, physicalSpaceDesignPoint_[marginalIndex])); 
     197            for (UnsignedLong marginalIndex = 0; marginalIndex < dimension; ++marginalIndex
     198              { 
     199                const NumericalScalar y(inputDistribution.getMarginal(marginalIndex).computeCDF(NumericalPoint(1, physicalSpaceDesignPoint_[marginalIndex]))); 
    200200                importanceFactors_[marginalIndex] = standardMarginalDistribution.computeQuantile(y)[0]; 
    201201              } 
    202202            /* compute  square norm of importanceFactors vector */ 
    203             NumericalScalar inorm2(1.0 / importanceFactors_.norm2()); 
     203            const NumericalScalar inorm2(1.0 / importanceFactors_.norm2()); 
    204204            /* compute final importance factors */ 
    205             for (UnsignedLong marginalIndex = 0; marginalIndex < dimension; marginalIndex++
     205            for (UnsignedLong marginalIndex = 0; marginalIndex < dimension; ++marginalIndex
    206206              { 
    207207                importanceFactors_[marginalIndex] *= importanceFactors_[marginalIndex] * inorm2; 
     
    235235            computeImportanceFactors(); 
    236236          } 
    237         UnsignedLong dimension(importanceFactors_.getDimension()); 
     237        const UnsignedLong dimension(importanceFactors_.getDimension()); 
    238238        NumericalSample data(dimension, 1); 
    239239 
    240240        /* build data for the pie */ 
    241         for (UnsignedLong i = 0; i < dimension; i++
     241        for (UnsignedLong i = 0; i < dimension; ++i
    242242          { 
    243243            data[i]=NumericalPoint(1, importanceFactors_[i]); 
     
    249249        Description palette(dimension); 
    250250        Description labels(dimension); 
    251         Description colors(DrawableImplementation::GetValidColors()); 
     251        const Description colors(DrawableImplementation::GetValidColors()); 
    252252        Description::const_iterator colorsIterator; 
    253253        colorsIterator = colors.begin(); 
     
    257257          { 
    258258            description = Description(dimension); 
    259             for (UnsignedLong i = 0; i < dimension; i++
     259            for (UnsignedLong i = 0; i < dimension; ++i
    260260              { 
    261261                OSS oss; 
     
    264264              } 
    265265          } 
    266         for (UnsignedLong i = 0; i < dimension; i++
     266        for (UnsignedLong i = 0; i < dimension; ++i
    267267          { 
    268268            OSS oss; 
     
    272272            labels[i] = oss; 
    273273            palette[i] = (*colorsIterator); 
    274             colorsIterator++
     274            ++colorsIterator
    275275            if (colorsIterator == colors.end()) 
    276276              { 
     
    325325      { 
    326326        /* get Set1 : parameters of the physical distribution */ 
    327         Distribution physicalDistribution(limitStateVariable_.getImplementation()->getAntecedent()->getDistribution()); 
    328         NumericalPointWithDescriptionCollection set1(physicalDistribution.getParametersCollection()); 
     327        const Distribution physicalDistribution(limitStateVariable_.getImplementation()->getAntecedent()->getDistribution()); 
     328        const NumericalPointWithDescriptionCollection set1(physicalDistribution.getParametersCollection()); 
    329329        /* get Set2 : parameters of the physical model */ 
    330         NumericalMathFunction physicalModel(limitStateVariable_.getImplementation()->getFunction()); 
    331         NumericalPoint set2(physicalModel.getParameters()); 
    332         Bool isSet2Empty(set2.getDimension() == 0); 
     330        const NumericalMathFunction physicalModel(limitStateVariable_.getImplementation()->getFunction()); 
     331        const NumericalPointWithDescription set2(physicalModel.getParameters()); 
     332        const Bool isSet2Empty(set2.getDimension() == 0); 
    333333 
    334334        /* get SetIso : parameters included in the isoprobabilistic transformation which is a subset of Set1 */ 
    335         InverseIsoProbabilisticTransformation inverseIsoProbabilisticTransformation(physicalDistribution.getInverseIsoProbabilisticTransformation()); 
    336         NumericalPointWithDescription setIso(inverseIsoProbabilisticTransformation.getParameters()); 
     335        const InverseIsoProbabilisticTransformation inverseIsoProbabilisticTransformation(physicalDistribution.getInverseIsoProbabilisticTransformation()); 
     336        const NumericalPointWithDescription setIso(inverseIsoProbabilisticTransformation.getParameters()); 
    337337        /* scaling factor between sensitivity and gradients (ref doc : factor = -lambda/beta) */ 
    338338        /* gradient of the standard limite state function */ 
    339         Matrix physicalGradientMatrix(physicalModel.gradient(physicalSpaceDesignPoint_)); 
    340         NumericalPoint standardFunctionGradient(inverseIsoProbabilisticTransformation.gradient(standardSpaceDesignPoint_) * (physicalGradientMatrix * NumericalPoint(1, 1.0))); 
    341         NumericalScalar gradientToSensitivity(-(limitStateVariable_.getOperator().compare(1.0, 0.0) ? 1.0 : -1.0) / standardFunctionGradient.norm()); 
     339        const Matrix physicalGradientMatrix(physicalModel.gradient(physicalSpaceDesignPoint_)); 
     340        const NumericalPoint standardFunctionGradient(inverseIsoProbabilisticTransformation.gradient(standardSpaceDesignPoint_) * (physicalGradientMatrix * NumericalPoint(1, 1.0))); 
     341        const NumericalScalar gradientToSensitivity(-(limitStateVariable_.getOperator().compare(1.0, 0.0) ? 1.0 : -1.0) / standardFunctionGradient.norm()); 
    342342        /* evaluate the gradients of the physical model with respect to Set2 (ref doc : K2) */ 
    343343        NumericalPoint physicalGradient; 
     
    350350        if (setIso.getDimension() > 0) 
    351351          { 
    352             isoProbabilisticGradient =inverseIsoProbabilisticTransformation.parametersGradient(standardSpaceDesignPoint_) * (physicalGradientMatrix * NumericalPoint(1, 1.0)); 
     352            isoProbabilisticGradient = inverseIsoProbabilisticTransformation.parametersGradient(standardSpaceDesignPoint_) * (physicalGradientMatrix * NumericalPoint(1, 1.0)); 
    353353          } 
    354354        /* associate to each element of Set1 the gradient value */ 
    355355 
    356356        /* hasoferReliabilityIndexSensitivity is the collection Set1 + one other collection wich is Set2 */ 
    357         UnsignedLong set1Size(set1.getSize()); 
    358         UnsignedLong size(set1Size + (isSet2Empty ? 0 : 1)); 
     357        const UnsignedLong set1Size(set1.getSize()); 
     358        const UnsignedLong size(set1Size + (isSet2Empty ? 0 : 1)); 
    359359        hasoferReliabilityIndexSensitivity_ = Sensitivity(size); 
    360360 
    361         for (UnsignedLong sensitivityIndex = 0; sensitivityIndex < set1Size; sensitivityIndex++
    362           { 
    363             NumericalPointWithDescription currentParameters(set1[sensitivityIndex]); 
    364             UnsignedLong currentDimension(currentParameters.getDimension()); 
     361        for (UnsignedLong sensitivityIndex = 0; sensitivityIndex < set1Size; ++sensitivityIndex
     362          { 
     363            const NumericalPointWithDescription currentParameters(set1[sensitivityIndex]); 
     364            const UnsignedLong currentDimension(currentParameters.getDimension()); 
    365365            NumericalPointWithDescription currentSensitivity(currentDimension); 
    366             Description currentDescription(currentParameters.getDescription()); 
     366            const Description currentDescription(currentParameters.getDescription()); 
    367367            // the currentSensitivity gets the description and the name from set1 
    368368            currentSensitivity.setDescription(currentDescription); 
    369             String currentName(currentParameters.getName()); 
     369            const String currentName(currentParameters.getName()); 
    370370            currentSensitivity.setName(currentName); 
    371             Description isoDescription(setIso.getDescription()); 
    372             for (UnsignedLong currentIndex = 0; currentIndex < currentDimension; currentIndex++
    373               { 
    374                 UnsignedLong position(computePosition(currentName, currentDescription[currentIndex], isoDescription)); 
     371            const Description isoDescription(setIso.getDescription()); 
     372            for (UnsignedLong currentIndex = 0; currentIndex < currentDimension; ++currentIndex
     373              { 
     374                const UnsignedLong position(computePosition(currentName, currentDescription[currentIndex], isoDescription)); 
    375375                /* if currentParameters[currentIndex] is into setIso, then we get the sensitivity value in the corresponding isoProbabilisticGradient */ 
    376376                if (position < setIso.getDimension()) 
     
    396396      UnsignedLong AnalyticalResult::computePosition(const String & marginalName, const String & marginalParameterName, const Description & parameterSetNames) const 
    397397      { 
    398         UnsignedLong dimension(parameterSetNames.getSize()); 
    399         String fullName(OSS() << marginalName << "_" << marginalParameterName); 
    400         for (UnsignedLong index = 0; index < dimension; index++
     398        const UnsignedLong dimension(parameterSetNames.getSize()); 
     399        const String fullName(OSS() << marginalName << "_" << marginalParameterName); 
     400        for (UnsignedLong index = 0; index < dimension; ++index
    401401          { 
    402402            if ( parameterSetNames[index] == fullName ) return index; 
     
    416416            computeHasoferReliabilityIndexSensitivity(); 
    417417          } 
    418         UnsignedLong dimension(standardSpaceDesignPoint_.getDimension()); 
    419         UnsignedLong size(hasoferReliabilityIndexSensitivity_.getSize()); 
     418        const UnsignedLong dimension(standardSpaceDesignPoint_.getDimension()); 
     419        const UnsignedLong size(hasoferReliabilityIndexSensitivity_.getSize()); 
    420420        // The first graph shows the sensitivities with respect to the marginal parameters if there exist 
    421421        // in the cas where the distribution or some marginals are defined by user, it may not have parameters : we create a empty sensitivity graph 
    422422        Sensitivity marginalSensitivity(dimension); 
    423         for(UnsignedLong i = 0; i < dimension; i++
     423        for(UnsignedLong i = 0; i < dimension; ++i
    424424          { 
    425425            marginalSensitivity[i] = hasoferReliabilityIndexSensitivity_[i]; 
     
    434434          { 
    435435            Sensitivity otherSensitivity(size - dimension); 
    436             for(UnsignedLong i = dimension; i < size; i++
     436            for(UnsignedLong i = dimension; i < size; ++i
    437437              { 
    438438                otherSensitivity[i - dimension] = hasoferReliabilityIndexSensitivity_[i]; 
     
    458458        BarPlot sensitivityBarPlot(NumericalSample(0, 2), shift, ""); 
    459459 
    460         Description colors(DrawableImplementation::GetValidColors()); 
     460        const Description colors(DrawableImplementation::GetValidColors()); 
    461461        Description::const_iterator colorsIterator; 
    462462        colorsIterator = colors.begin(); 
    463463 
    464464        // Create the barplots 
    465         UnsignedLong sensitivitySize(sensitivity.getSize()); 
    466         for (UnsignedLong collectionIndex = 0; collectionIndex < sensitivitySize; collectionIndex++
     465        const UnsignedLong sensitivitySize(sensitivity.getSize()); 
     466        for (UnsignedLong collectionIndex = 0; collectionIndex < sensitivitySize; ++collectionIndex
    467467          { 
    468468            NumericalSample data(sensitivity[collectionIndex].getDimension(), 2); 
    469             UnsignedLong dataSize(data.getSize()); 
    470             for (UnsignedLong sensitivityIndex = 0; sensitivityIndex < dataSize; sensitivityIndex++
     469            const UnsignedLong dataSize(data.getSize()); 
     470            for (UnsignedLong sensitivityIndex = 0; sensitivityIndex < dataSize; ++sensitivityIndex
    471471              { 
    472472                data[sensitivityIndex][0] = width; 
     
    477477            oss << sensitivity[collectionIndex].getName() << " " << sensitivity[collectionIndex].getDescription(); 
    478478            sensitivityGraph.addDrawable(BarPlot(data, shift, (*colorsIterator), "solid", "solid", oss)); 
    479             colorsIterator++
     479            ++colorsIterator
    480480            if (colorsIterator == colors.end()) 
    481481              { 
  • branches/lebrun/devel/lib/src/Uncertainty/Algorithm/IsoProbabilisticTransformation/MarginalTransformation/InverseMarginalTransformationEvaluation.cxx

    r975 r983  
    9090      InverseMarginalTransformationEvaluation::Matrix InverseMarginalTransformationEvaluation::parametersGradient(const NumericalPoint & in) const 
    9191      { 
    92         NumericalPoint parameters(getParameters()); 
    93         UnsignedLong parametersDimension(parameters.getDimension()); 
    94         UnsignedLong inputDimension(getInputNumericalPointDimension()); 
     92        const NumericalPoint parameters(getParameters()); 
     93        const UnsignedLong parametersDimension(parameters.getDimension()); 
     94        const UnsignedLong inputDimension(getInputNumericalPointDimension()); 
    9595        Matrix result(parametersDimension, inputDimension); 
    9696        UnsignedLong rowIndex(0); 
    9797        for (UnsignedLong j = 0; j < inputDimension; ++j) 
    9898          { 
    99             NumericalPoint x(distributionCollection_[j].computeQuantile(in[j])); 
    100             NumericalPoint marginalCDFGradient(distributionCollection_[j].computeCDFGradient(x)); 
    101             NumericalScalar pdf(distributionCollection_[j].computePDF(x)); 
    102             NumericalPoint marginalQuantileGradient((-1.0 / pdf) * marginalCDFGradient); 
    103             UnsignedLong marginalParametersDimension(marginalCDFGradient.getDimension()); 
     99            const NumericalPoint x(distributionCollection_[j].computeQuantile(in[j])); 
     100            const NumericalPoint marginalCDFGradient(distributionCollection_[j].computeCDFGradient(x)); 
     101            const NumericalScalar pdf(distributionCollection_[j].computePDF(x)); 
     102            const NumericalPoint marginalQuantileGradient((-1.0 / pdf) * marginalCDFGradient); 
     103            const UnsignedLong marginalParametersDimension(marginalCDFGradient.getDimension()); 
    104104            for (UnsignedLong i = 0; i < marginalParametersDimension; ++i) 
    105105              { 
  • branches/lebrun/devel/lib/src/Uncertainty/Algorithm/IsoProbabilisticTransformation/MarginalTransformation/MarginalTransformationEvaluation.cxx

    r975 r983  
    4242      { 
    4343        Description description; 
    44         UnsignedLong size(distributionCollection.getSize()); 
     44        const UnsignedLong size(distributionCollection.getSize()); 
    4545        for (UnsignedLong i = 0; i < size; ++i) 
    4646          { 
     
    6868        throw (InvalidArgumentException, InternalException) 
    6969      { 
    70         UnsignedLong dimension(getOutputNumericalPointDimension()); 
     70        const UnsignedLong dimension(getOutputNumericalPointDimension()); 
    7171        NumericalPoint result(dimension); 
    7272        // Apply CDF over the components 
     
    8181      MarginalTransformationEvaluation::Matrix MarginalTransformationEvaluation::parametersGradient(const NumericalPoint & in) const 
    8282      { 
    83         NumericalPoint parameters(getParameters()); 
    84         UnsignedLong parametersDimension(parameters.getDimension()); 
    85         UnsignedLong inputDimension(getInputNumericalPointDimension()); 
     83        const NumericalPoint parameters(getParameters()); 
     84        const UnsignedLong parametersDimension(parameters.getDimension()); 
     85        const UnsignedLong inputDimension(getInputNumericalPointDimension()); 
    8686        Matrix result(parametersDimension, inputDimension); 
    8787        UnsignedLong rowIndex(0); 
    8888        for (UnsignedLong j = 0; j < inputDimension; ++j) 
    8989          { 
    90             NumericalPoint marginalCDFGradient(distributionCollection_[j].computeCDFGradient(NumericalPoint(1, in[j]))); 
    91             UnsignedLong marginalParametersDimension(marginalCDFGradient.getDimension()); 
     90            const NumericalPoint marginalCDFGradient(distributionCollection_[j].computeCDFGradient(NumericalPoint(1, in[j]))); 
     91            const UnsignedLong marginalParametersDimension(marginalCDFGradient.getDimension()); 
    9292            for (UnsignedLong i = 0; i < marginalParametersDimension; ++i) 
    9393              { 
  • branches/lebrun/devel/lib/src/Uncertainty/Algorithm/QuadraticCumul/QuadraticCumul.cxx

    r807 r983  
    6363        : Base::Common::PersistentObject(name), 
    6464          limitStateVariable_(limitStateVariable), 
    65           meanInputVector_(NumericalPoint(0)), 
    66           valueAtMean_(NumericalPoint(0)), 
    67           gradientAtMean_(Matrix(0, 0)), 
    68           hessianAtMean_(SymmetricTensor(0, 0)), 
     65          meanInputVector_(0), 
     66          valueAtMean_(0), 
     67          gradientAtMean_(0, 0), 
     68          hessianAtMean_(0, 0), 
    6969          isAlreadyComputedValue_(false), 
    7070          isAlreadyComputedGradient_(false), 
     
    7474          isAlreadyComputedCovariance_(false), 
    7575          isAlreadyComputedImportanceFactors_(false), 
    76           inputCovariance_(CovarianceMatrix(0)), 
    77           meanFirstOrder_(NumericalPoint(0)), 
    78           meanSecondOrder_(NumericalPoint(0)), 
    79           covariance_(CovarianceMatrix(0)), 
    80           importanceFactors_(NumericalPoint(0)
     76          inputCovariance_(0), 
     77          meanFirstOrder_(0), 
     78          meanSecondOrder_(0), 
     79          covariance_(0), 
     80          importanceFactors_(0
    8181      { 
    8282        /* Check if the given random vector is a composite random vector, which is mandatory */ 
     
    153153 
    154154      /* importance factors accessor */ 
    155       QuadraticCumul::NumericalPoint QuadraticCumul::getImportanceFactors() 
     155      QuadraticCumul::NumericalPointWithDescription QuadraticCumul::getImportanceFactors() 
    156156      { 
    157157        if(!isAlreadyComputedImportanceFactors_) 
     
    168168      { 
    169169        // To ensure that the importance factors are up to date 
    170         importanceFactors_ = getImportanceFactors(); 
    171         UnsignedLong dimension(importanceFactors_.getDimension()); 
     170        getImportanceFactors(); 
     171        const UnsignedLong dimension(importanceFactors_.getDimension()); 
    172172        NumericalSample data(dimension, 1); 
    173173 
    174174        /* build data for the pie */ 
    175         for (UnsignedLong i = 0; i < dimension; i++
     175        for (UnsignedLong i = 0; i < dimension; ++i
    176176          { 
    177177            data[i]=NumericalPoint(1, importanceFactors_[i]); 
     
    186186        Description::const_iterator colorsIterator; 
    187187        colorsIterator = colors.begin(); 
    188         for (UnsignedLong i = 0; i < dimension; i++
     188        for (UnsignedLong i = 0; i < dimension; ++i
    189189          { 
    190190            OSS oss; 
     
    193193            oss << 100.0 * data[i][0] << "%"; 
    194194            palette[i] = (*colorsIterator); 
    195             colorsIterator++
     195            ++colorsIterator
    196196            if (colorsIterator == colors.end()) 
    197197              { 
     
    254254        covariance_ = CovarianceMatrix(gradientAtMean_.getNbColumns()); 
    255255        /* we unroll the matrix multiplications transpose(gradient).covariance.gradient */ 
    256         for (UnsignedLong i = 0; i < covariance_.getDimension(); i++
    257           { 
    258             for (UnsignedLong j = 0; j < covariance_.getDimension(); j++
     256        for (UnsignedLong i = 0; i < covariance_.getDimension(); ++i
     257          { 
     258            for (UnsignedLong j = 0; j < covariance_.getDimension(); ++j
    259259              { 
    260260                covariance_(i, j) = 0; 
    261                 for (UnsignedLong k = 0; k < gradientAtMean_.getNbRows(); k++
     261                for (UnsignedLong k = 0; k < gradientAtMean_.getNbRows(); ++k
    262262                  { 
    263                     for (UnsignedLong l = 0; l < gradientAtMean_.getNbRows(); l++
     263                    for (UnsignedLong l = 0; l < gradientAtMean_.getNbRows(); ++l
    264264                      { 
    265265                        covariance_(i, j) += gradientAtMean_(l, i) * inputCovariance_(l, k) * gradientAtMean_(k, j); 
     
    283283        /* we compute here the importance factors */ 
    284284        /* in this scalar case, gradientAtMean is a NumericalPoint */ 
    285         UnsignedLong dimension(gradientAtMean_.getNbRows()); 
     285        const UnsignedLong dimension(gradientAtMean_.getNbRows()); 
    286286         
    287287        /* in this scalar case, importance factors is a NumericalPoint, defined as importanceFactors = gradient .* inputCovariance * gradient / outputCovariance, where .* means an element-wise multiplication between vectors */ 
    288288        importanceFactors_ = NumericalPoint(dimension, 0.0); 
    289289        // This line looks strange, but it is here to ensure that the covariance has actually been computed 
    290         covariance_ = getCovariance(); 
    291         for (UnsignedLong i = 0; i < dimension; i++
    292           { 
    293             for (UnsignedLong j = 0; j < dimension; j++
     290        getCovariance(); 
     291        for (UnsignedLong i = 0; i < dimension; ++i
     292          { 
     293            for (UnsignedLong j = 0; j < dimension; ++j
    294294              { 
    295295                importanceFactors_[i] += inputCovariance_(i, j) * gradientAtMean_(j, 0); 
     
    298298          } 
    299299        importanceFactors_.setDescription(limitStateVariable_.getImplementation()->getAntecedent()->getDescription()); 
    300  
    301300        isAlreadyComputedImportanceFactors_ = true; 
    302301      } // QuadraticCumul::computeImportanceFactors() 
     
    323322        /* developped formula */ 
    324323 
    325         UnsignedLong rowDimension(hessianAtMean_.getNbRows()); 
     324        const UnsignedLong rowDimension(hessianAtMean_.getNbRows()); 
    326325        /* i */ 
    327         UnsignedLong sheetDimension(hessianAtMean_.getNbSheets()); 
     326        const UnsignedLong sheetDimension(hessianAtMean_.getNbSheets()); 
    328327        /* k */ 
    329328        meanSecondOrder_ = valueAtMean_; 
    330329        /* loop on k */ 
    331         for (UnsignedLong k = 0; k < sheetDimension; k++
     330        for (UnsignedLong k = 0; k < sheetDimension; ++k
    332331          { 
    333332            NumericalScalar kSecondOrderContribution(0.0); 
    334333            /* loop on i */ 
    335             for (UnsignedLong i = 0; i < rowDimension; i++
     334            for (UnsignedLong i = 0; i < rowDimension; ++i
    336335              { 
    337336                kSecondOrderContribution += 0.5 * inputCovariance_(i, i) * hessianAtMean_(i, i, k); 
    338337                /* loop on j */ 
    339                 for (UnsignedLong j = 0; j < i; j++
     338                for (UnsignedLong j = 0; j < i; ++j
    340339                  { 
    341340                    kSecondOrderContribution += inputCovariance_(i, j) * hessianAtMean_(i, j, k); 
  • branches/lebrun/devel/lib/src/Uncertainty/Algorithm/QuadraticCumul/QuadraticCumul.hxx

    r867 r983  
    104104 
    105105        /** importance factors accessor */ 
    106         NumericalPoint getImportanceFactors(); 
     106        NumericalPointWithDescription getImportanceFactors(); 
    107107 
    108108        /** ImportanceFactors graph */ 
  • branches/lebrun/devel/lib/src/Uncertainty/Distribution/ComposedDistribution.cxx

    r975 r983  
    616616                parameters[index] = marginalParameters[j]; 
    617617                description[index] = OSS() << marginalName << "_" << marginalDescription[j]; 
    618                 index++
     618                ++index
    619619              } 
    620620          } 
     
    633633        IsoProbabilisticTransformation right(p_rightFunction, p_rightGradient, p_rightHessian); 
    634634        right.setParameters(parameters); 
    635  
    636635        IsoProbabilisticTransformation transformation(isoprobabilistic, right); 
    637636 
     
    664663                parameters[index] = marginalParameters[j]; 
    665664                description[index] = OSS() << marginalName << "_" << marginalDescription[j]; 
    666                 index++
     665                ++index
    667666              } 
    668667          } 
     
    700699        const Description description(getDescription()); 
    701700        // First put the marginal parameters 
    702         for (UnsignedLong marginalIndex = 0; marginalIndex < dimension; marginalIndex++
     701        for (UnsignedLong marginalIndex = 0; marginalIndex < dimension; ++marginalIndex
    703702          { 
    704703            // Each marginal distribution must output a collection of parameters of size 1, even if it contains an empty NumericalPoint 
    705704            const NumericalPointWithDescriptionCollection marginalParameters(distributionCollection_[marginalIndex].getParametersCollection()); 
    706             NumericalPoint point(marginalParameters[0]); 
     705            NumericalPointWithDescription point(marginalParameters[0]); 
    707706            point.setName(description[marginalIndex]); 
    708707            parameters[marginalIndex] = point; 
     
    713712            // Second put the dependence parameters 
    714713            const NumericalPointWithDescriptionCollection copulaParameters(copula_.getParametersCollection()); 
    715             NumericalPoint point(0); 
     714            NumericalPointWithDescription point(0); 
    716715            if (copulaParameters.getSize() != 0) 
    717716              { 
  • branches/lebrun/devel/lib/src/Uncertainty/Distribution/Epanechnikov.cxx

    r924 r983  
    166166      Epanechnikov::NumericalPointWithDescriptionCollection Epanechnikov::getParametersCollection() const 
    167167      { 
     168        // No parameter 
    168169        return NumericalPointWithDescriptionCollection(0); 
    169170      } 
  • branches/lebrun/devel/lib/src/Uncertainty/Distribution/ExtraFunc/DistFunc.cxx

    r924 r983  
    2525 */ 
    2626#include <iostream> 
     27#include <cstdio> 
     28#include <cstdlib> 
    2729#include <cmath> 
    2830#include "DistFunc.hxx" 
     
    267269      } // End of rGamma 
    268270 
     271      /*********************************************/ 
     272      /* Kolmogorov distribution                   */ 
     273      /*********************************************/ 
     274static double K(int n, double d); 
     275static void m_multiply(double *A, double *B, double *C, int m); 
     276static void m_power(double *A, int eA, double *V, int *eV, int m, int n); 
     277static double 
     278K(int n, double d) 
     279{ 
     280    /* Compute Kolmogorov's distribution. 
     281       Code published in 
     282         George Marsaglia and Wai Wan Tsang and Jingbo Wang (2003), 
     283         "Evaluating Kolmogorov's distribution". 
     284         Journal of Statistical Software, Volume 8, 2003, Issue 18. 
     285         URL: http://www.jstatsoft.org/v08/i18/. 
     286    */ 
     287 
     288   int k, m, i, j, g, eH, eQ; 
     289   double h, s, *H, *Q; 
     290 
     291   k = (int) (n * d) + 1; 
     292   m = 2 * k - 1; 
     293   h = k - n * d; 
     294   H = (double*) calloc(m * m, sizeof(double)); 
     295   Q = (double*) calloc(m * m, sizeof(double)); 
     296   for(i = 0; i < m; i++) 
     297       for(j = 0; j < m; j++) 
     298           if(i - j + 1 < 0) 
     299               H[i * m + j] = 0; 
     300           else 
     301               H[i * m + j] = 1; 
     302   for(i = 0; i < m; i++) { 
     303       H[i * m] -= pow(h, i + 1); 
     304       H[(m - 1) * m + i] -= pow(h, (m - i)); 
     305   } 
     306   H[(m - 1) * m] += ((2 * h - 1 > 0) ? pow(2 * h - 1, m) : 0); 
     307   for(i = 0; i < m; i++) 
     308       for(j=0; j < m; j++) 
     309           if(i - j + 1 > 0) 
     310               for(g = 1; g <= i - j + 1; g++) 
     311                   H[i * m + j] /= g; 
     312   eH = 0; 
     313   m_power(H, eH, Q, &eQ, m, n); 
     314   s = Q[(k - 1) * m + k - 1]; 
     315   for(i = 1; i <= n; i++) { 
     316       s = s * i / n; 
     317       if(s < 1e-140) { 
     318           s *= 1e140; 
     319           eQ -= 140; 
     320       } 
     321   } 
     322   s *= pow(10., eQ); 
     323   free(H); 
     324   free(Q); 
     325   return(s); 
     326} 
     327 
     328static void 
     329m_multiply(double *A, double *B, double *C, int m) 
     330{ 
     331    /* Auxiliary routine used by K(). 
     332       Matrix multiplication. 
     333    */ 
     334    int i, j, k; 
     335    double s; 
     336    for(i = 0; i < m; i++) 
     337        for(j = 0; j < m; j++) { 
     338            s = 0.; 
     339            for(k = 0; k < m; k++) 
     340                s+= A[i * m + k] * B[k * m + j]; 
     341            C[i * m + j] = s; 
     342        } 
     343} 
     344 
     345static void 
     346m_power(double *A, int eA, double *V, int *eV, int m, int n) 
     347{ 
     348    /* Auxiliary routine used by K(). 
     349       Matrix power. 
     350    */ 
     351    double *B; 
     352    int eB , i; 
     353 
     354    if(n == 1) { 
     355        for(i = 0; i < m * m; i++) 
     356            V[i] = A[i]; 
     357        *eV = eA; 
     358        return; 
     359    } 
     360    m_power(A, eA, V, eV, m, n / 2); 
     361    B = (double*) calloc(m * m, sizeof(double)); 
     362    m_multiply(V, V, B, m); 
     363    eB = 2 * (*eV); 
     364    if((n % 2) == 0) { 
     365        for(i = 0; i < m * m; i++) 
     366            V[i] = B[i]; 
     367        *eV = eB; 
     368    } 
     369    else { 
     370        m_multiply(A, B, V, m); 
     371        *eV = eA + eB; 
     372    } 
     373    if(V[(m / 2) * m + (m / 2)] > 1e140) { 
     374        for(i = 0; i < m * m; i++) 
     375            V[i] = V[i] * 1e-140; 
     376        *eV += 140; 
     377    } 
     378    free(B); 
     379} 
     380      NumericalScalar DistFunc::pKolmogorov(const UnsignedLong n, const NumericalScalar x, const Bool tail) 
     381      { 
     382        // If x <= 0, we are at the left of the support 
     383        if (x <= 0.0) return (tail ? 1.0 : 0.0); 
     384        // If x >= 1, we are at the right of the support 
     385        if (x >= 1.0) return (tail ? 0.0 : 1.0); 
     386//      // We use the summation formula of R. Von Mises 
     387//      const UnsignedLong kmax(floor(n * (1.0 - x))); 
     388//      NumericalScalar sum(pow(1.0 - x, n) / x); 
     389//      NumericalScalar logBinomial(log(n)); 
     390//      for (UnsignedLong k = 1; k <= kmax; ++k) 
     391//        { 
     392//          const NumericalScalar term(x + k / static_cast<NumericalScalar>(n)); 
     393//          sum += exp(logBinomial + (k - 1) * log(term) + (n - k) * log(1.0 - term)); 
     394//          logBinomial += log(n - k) - log (k + 1); 
     395//        } 
     396//      NumericalScalar result((tail ? 2.0 * x * sum : 1.0 - 2.0 * x * sum)); 
     397        NumericalScalar result2((tail ? 1.0 - K(n, x) : K(n, x))); 
     398        return result2; 
     399      } 
     400 
     401      NumericalScalar DistFunc::pKolmogorovAsymptotic(const UnsignedLong n, const NumericalScalar x, const Bool tail) 
     402      { 
     403        // If x <= 0, we are at the left of the support