cisst-saw
Loading...
Searching...
No Matches
nmrLSNonLinJacobianSolver.h
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3
4/*
5
6 Author(s): Ankur Kapoor
7 Created on: 2004-10-26
8
9 (C) Copyright 2004-2007 Johns Hopkins University (JHU), All Rights
10 Reserved.
11
12--- begin cisst license - do not edit ---
13
14This software is provided "as is" under an open source license, with
15no warranty. The complete license can be found in license.txt and
16http://www.cisst.org/cisst/license.txt.
17
18--- end cisst license ---
19*/
20
21
26
27
28#ifndef _nmrLSNonLinJacobianSolver_h
29#define _nmrLSNonLinJacobianSolver_h
30
31
33
34#include <cnetlib.h>
35
125 // we have this class so that we reserve memory only one
126 // would help if svd of a same size matrix (or a matrix)
127 // that doesnt change much is desired.
128
129protected:
130 CISSTNETLIB_INTEGER M;
131 CISSTNETLIB_INTEGER N;
132 CISSTNETLIB_INTEGER Ldfjac;
133 CISSTNETLIB_DOUBLE Tolerance;
134 CISSTNETLIB_INTEGER Info;
135 CISSTNETLIB_INTEGER Lwork;
138
139public:
145 {
146 Allocate(0, 0);
147 }
148
149
159 nmrLSNonLinJacobianSolver(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n)
160 {
161 Allocate(m, n);
162 }
163
164
174
175
176
184 inline void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n) {
185 M = m;
186 N = n;
187 Lwork = M * N + 5 * N + M;
188 Ldfjac = M;
189 Tolerance = 1e-6;
190 Work.SetSize(Lwork);
191 IWork.SetSize(N);
192 }
193
194
203
204
205
211
213 template <int __instanceLineF,
214 class __elementTypeF,
215 int __instanceLineJ,
216 class __elementTypeJ>
222 CISSTNETLIB_DOUBLE tolerance) throw (std::runtime_error) {
223 //if ((N != (CISSTNETLIB_INTEGER) X.size()) || (M != (CISSTNETLIB_INTEGER) F.size()) || (Ldfjac != (CISSTNETLIB_INTEGER) J.rows()) || (N != (CISSTNETLIB_INTEGER) J.cols())) {
224 if ((N != static_cast<CISSTNETLIB_INTEGER>(X.size())) || (M != static_cast<CISSTNETLIB_INTEGER>(F.size())) || (Ldfjac*N != static_cast<CISSTNETLIB_INTEGER>(J.size()))) {
225 cmnThrow(std::runtime_error("nmrLSNonLinJacobianSolver Solve: Size used for Allocate was different"));
226 }
227 Tolerance = tolerance;
228 /* call the MINPACK C function */
229 lmder2_(callBackF.FunctionFlmdif, callBackJ.FunctionFlmder2, &M, &N,
230 X.Pointer(), F.Pointer(), J.Pointer(),
231 &Ldfjac, &Tolerance, &Info,
232 IWork.Pointer(), Work.Pointer(), &Lwork);
233 }
234
235
236};
237
238#endif // _nmrLSNonLinJacobianSolver_h
239
Definition nmrCallBack.h:45
Definition nmrCallBack.h:106
CISSTNETLIB_INTEGER Ldfjac
Definition nmrLSNonLinJacobianSolver.h:132
CISSTNETLIB_INTEGER M
Definition nmrLSNonLinJacobianSolver.h:130
CISSTNETLIB_INTEGER Lwork
Definition nmrLSNonLinJacobianSolver.h:135
void Solve(nmrCallBackFunctionF< __instanceLineF, __elementTypeF > &callBackF, nmrCallBackFunctionJ< __instanceLineJ, __elementTypeJ > &callBackJ, vctDynamicVector< CISSTNETLIB_DOUBLE > &X, vctDynamicVector< CISSTNETLIB_DOUBLE > &F, vctDynamicVector< CISSTNETLIB_DOUBLE > &J, CISSTNETLIB_DOUBLE tolerance)
Definition nmrLSNonLinJacobianSolver.h:217
CISSTNETLIB_INTEGER N
Definition nmrLSNonLinJacobianSolver.h:131
void Allocate(vctDynamicVector< CISSTNETLIB_DOUBLE > &X, vctDynamicVector< CISSTNETLIB_DOUBLE > &F)
Definition nmrLSNonLinJacobianSolver.h:200
nmrLSNonLinJacobianSolver(void)
Definition nmrLSNonLinJacobianSolver.h:144
vctDynamicVector< CISSTNETLIB_INTEGER > IWork
Definition nmrLSNonLinJacobianSolver.h:136
vctDynamicVector< CISSTNETLIB_DOUBLE > Work
Definition nmrLSNonLinJacobianSolver.h:137
nmrLSNonLinJacobianSolver(vctDynamicVector< CISSTNETLIB_DOUBLE > &X, vctDynamicVector< CISSTNETLIB_DOUBLE > &F)
Definition nmrLSNonLinJacobianSolver.h:171
CISSTNETLIB_DOUBLE Tolerance
Definition nmrLSNonLinJacobianSolver.h:133
nmrLSNonLinJacobianSolver(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n)
Definition nmrLSNonLinJacobianSolver.h:159
void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n)
Definition nmrLSNonLinJacobianSolver.h:184
CISSTNETLIB_INTEGER Info
Definition nmrLSNonLinJacobianSolver.h:134
Definition vctForwardDeclarations.h:131
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
const value_type & X(void) const
Definition vctDynamicConstVectorBase.h:263
Declaration of vctDynamicMatrix.