/[ascend]/trunk/base/generic/packages/sensitivity.h
ViewVC logotype

Contents of /trunk/base/generic/packages/sensitivity.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 534 - (show annotations) (download) (as text)
Tue Apr 25 13:25:04 2006 UTC (14 years, 1 month ago) by johnpye
File MIME type: text/x-chdr
File size: 3275 byte(s)
Working on platform-independent pathnames for the IMPORT command.
Added 'ospath.c' to base/generic/general for this purpose.
Patched kvalues and sensitivity to use the 'IMPORT "libname";' syntax
instead of 'IMPORT registerfn FROM libname;'.
Fixed pathnames in create.nsi.
Added GPL header to coupla files.
Added quoting to 'IMPORT' syntax in ascParse.y.
Removed 'PackageOption' from Tcl/Tk related Scons options so that missing Tcl/Tk
doesn't cause breakage.
1 /*
2 Sensitivity add-on for ASCEND
3 by Tom Epperly, Kirk Abbot
4
5 Copyright (C) 1990-2006 Carnegie-Mellon University
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 This file is part of the SLV solver.
21 */
22
23 /** @file
24 @note This is a static package in ASCEND. It can not be built as a dynamic package
25 because it doesn't contain the self-registration stuff.
26
27 This file attempts to implement the extraction of dy_dx from
28 a system of equations. If one considers a black-box where x are
29 the input variables, u are input parameters, y are the output
30 variables, f(x,y,u) is the system of equations that will be solved
31 for given x and u, then one can extract the sensitivity information
32 of y wrt x.
33
34 One crude but simple way of doing this is to finite-difference the
35 given black box, i.e, perturb x, n\subx times by delta x, resolve
36 the system of equations at the new value of x, and compute
37 dy/dx = (f(x\sub1) - f(x\sub2))/(x\sub1 - x\sub2).
38 This is known to be very expensive.
39
40 The solution that will be adopted here is to formulate the Jacobian J of
41 the system, (or the system is already solved, to grab the jacobian at
42 the solution. Develop the sensitivity matrix df/dx by exact numnerical
43 differentiation; this will be a n x n\subx matrix. Compute the LU factors
44 for J, and to solve column by column to : LU dz/dx = df/dx. Here
45 z, represents all the internal variables to the system and the strictly
46 output variables y. In other words J = df/dz.
47
48 Given the solution of the above problem we then simply extract the rows
49 of dz/dx, that pertain to the y variables that we are interested in;
50 this will give us dy/dx.
51
52 @todo Do we really need 2 files called [Ss]ensitivity.[ch]? Other one is in tcltk98.
53
54 @todo Make this self-registering so that it can be compiled as a dlopenable library.
55 */
56
57 /** @file
58 Requires:
59 #include <utilities/ascConfig.h>
60 #include <compiler/instance_enum.h>
61 #include <compiler/compiler.h>
62 #include <general/list.h>
63 #include <compiler/extfunc.h>
64 */
65
66 #ifndef ASC_SENSITIVITY_H
67 #define ASC_SENSITIVITY_H
68
69 /* ignores: interp, i, whichvar */
70 extern int do_solve_eval( struct Instance *i, struct gl_list_t *arglist);
71
72 /* ignores: interp, i, whichvar */
73 extern int do_finite_diff_eval( struct Instance *i, struct gl_list_t *arglist);
74
75 extern char sensitivity_help[];
76
77 /* ignores: interp, i, */
78 extern int do_sensitivity_eval_all( struct Instance *i, struct gl_list_t *arglist);
79
80 /* ignores: interp, i, */
81 extern int do_sensitivity_eval( struct Instance *i, struct gl_list_t *arglist);
82
83 ASC_DLLSPEC(int) sensitivity_register(void);
84
85 #endif /* ASC_SENSITIVITY_H */
86

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22