Changeset 76e63d for src


Ignore:
Timestamp:
Dec 19, 2012, 3:25:31 PM (12 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
63b9f7
Parents:
3c1465
git-author:
Frederik Heber <heber@…> (10/05/12 16:37:54)
git-committer:
Frederik Heber <heber@…> (12/19/12 15:25:31)
Message:

Extended FunctionApproximation::operator() to receive JacobianMode parameter.

  • this lets decide between finite differences or supplied parameter derivative.
Location:
src/FunctionApproximation
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/FunctionApproximation/FunctionApproximation.cpp

    r3c1465 r76e63d  
    113113
    114114
    115 void FunctionApproximation::operator()()
     115void FunctionApproximation::operator()(const enum JacobianMode mode)
    116116{
    117117  // let levmar optimize
     
    160160    // give this pointer as additional data to construct function pointer in
    161161    // LevMarCallback and call
    162 //    ret=dlevmar_dif(
    163 //        &FunctionApproximation::LevMarCallback,
    164 //        p, x, m, n, 1000, opts, info, work, covar, this); // no Jacobian, caller allocates work memory, covariance estimated
    165     ret=dlevmar_der(
    166         &FunctionApproximation::LevMarCallback,
    167         &FunctionApproximation::LevMarDerivativeCallback,
    168         p, x, m, n, 1000, opts, info, work, covar, this); // no Jacobian, caller allocates work memory, covariance estimated
     162    if (mode == FiniteDifferences) {
     163      ret=dlevmar_dif(
     164          &FunctionApproximation::LevMarCallback,
     165          p, x, m, n, 1000, opts, info, work, covar, this); // no Jacobian, caller allocates work memory, covariance estimated
     166    } else if (mode == ParameterDerivative) {
     167      ret=dlevmar_der(
     168          &FunctionApproximation::LevMarCallback,
     169          &FunctionApproximation::LevMarDerivativeCallback,
     170          p, x, m, n, 1000, opts, info, work, covar, this); // no Jacobian, caller allocates work memory, covariance estimated
     171    } else {
     172      ASSERT(0, "FunctionApproximation::operator() - Unknown jacobian method chosen.");
     173    }
    169174
    170175    {
     
    206211  }
    207212
    208   {
     213  if (mode == ParameterDerivative) {
    209214   double *err = new double[n];
    210215   dlevmar_chkjac(
     
    216221   delete[] err;
    217222  }
    218 
    219223
    220224  delete[] p;
  • src/FunctionApproximation/FunctionApproximation.hpp

    r3c1465 r76e63d  
    8181  void setModelFunction(FunctionModel &_model);
    8282
     83  /** This enum steers whether we use finite differences or
     84   * FunctionModel::parameter_derivative to calculate the jacobian.
     85   *
     86   */
     87  enum JacobianMode {
     88    FiniteDifferences,
     89    ParameterDerivative,
     90    MAXMODE
     91  };
     92
    8393  /** This starts the fitting process, resulting in the parameters to
    8494   * the model function being optimized with respect to the given training
    8595   * data.
     96   *
     97   * \param mode whether to use finite differences or the parameter derivative
     98   *        in calculating the jacobian
    8699   */
    87   void operator()();
     100  void operator()(const enum JacobianMode mode = FiniteDifferences);
    88101
    89102  /** Evaluates the model function for each pair of training tuple and returns
Note: See TracChangeset for help on using the changeset viewer.