eqsolver.html - Multidimensional Equation Solver Copyright (C) 2009 Clifford Wolf <clifford@clifford.at> This program 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 2 of the License, or (at your option) any later version. This program 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. --------------------------------------------------------------------- This scripts implements a simple equation solver based on the Gauss-Newton algorithm for non-linear least square fitting. The algorithm has been altered to improve it for some corner cases and add support for weighted equations. The Jacobi Matrices are creating using a rather simple numerical differentiation approach. Normal equations can spezified using the '=' operator. Inequations can be written using the '<' and '>' operators. Variable aliases, macros or static constants can be declared using special ':=' equations, with the macro name on the left side. The start value for all variables is '1'. Another start value can be defined using special '?=' equations, with the variable name on the left and a numerical value on the right side. Since this program is based on a least square fitter it can also 'solve' overdefined quation systems with no real solution. For this cases the "Remaining error: X" line has been included in the output. It is also possible to use this script for solving underdefined quation systems. In this cases any numerically valid solution is returned. Some special commands can be used to modify the behavior of the equation solver: $tryhard Deactivates the close-to-singularity detection. In some scenarios the equation solver returns better results with this option set. But it also incrases the solver runtime. $scalehack Setting this option enables a small hack in the Gauss-Newton solver that helps finding solutions in equations that are otherwise problematic with Gauss-Newton solvers (such as the equation 'pow(x,3)-2*x+2 = 0') and speeds up solving of some equation systems. $showindep Also print the independent variables/expressions. $range:X:Min:Max This command can be used to specify the valid range for fitted variable. That e.g. usefull when using a variable as argument sqrt() and thus only positive values are valid. Open ranges can be implemented by leaving the Min or Max field empty. $weight:X This command sets the weight for all (in)equations following this statement. The default weight is '1'. A higher weight for an (in)equation results in a higher impact on the solution. $function:avg(a, b) return (a+b) / 2; $endfunction Such a code block can be used to define a javascript function which can be used in the equation system. Note that all JavaScript Math.* functions can be used in the equations, but without the "Math." prefix. I.e. '0.8 = sin(x)' is a valid equation. Beware of bugs in this program. I haven't tested it much yet..