help-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-gsl] Solving a underdetermined nonlinear system


From: Patrick Alken
Subject: Re: [Help-gsl] Solving a underdetermined nonlinear system
Date: Thu, 17 Mar 2016 08:48:00 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0

The problem as you stated has infinitely many solutions, since you have 4 variables and only 3 constraints, so you need to be clear about what you want. One option is to find a solution which also minimizes the norm of x || x ||, which would add a fourth constraint, allowing you to use the nonlinear least squares method. This would be similar to Tikhonov regularization, and you could form the augmented residual vector:

fnew = [ f1; f2; f3; x ]

and augmented Jacobian matrix:

Jnew = [ J ; I ]

Read the section on Tikhonov regularization in the manual to learn where the above expressions come from.

Patrick

On 03/16/2016 06:37 PM, axplusbu wrote:
Greetings,

I have a problem with p = 4 unknowns and n = 3 equations

i.e. p > n and my system is of the form:
f1(x1,x2,x3,x4) = 0
f2(x1,x2,x3,x4) = 0
f3(x1,x2,x3,x4) = 0

The multidimensional root finder "gsl_multiroots" requires p = n. The
nonlinear least-squares solver "gsl_multifit_nlin" requires n > p. (Note
this requirement appears to be absent from the documentation, the error
appears during compiling: "fsfsolver.c:37: ERROR: insufficient data points,
n < p.")

I could potentially transform my problem into a scalar minimization problem
and use "gsl_multimin". However, I currently have the Jacobian for the
above system and this would require me to re-derive the gradient for a new
scalar function which I would like to avoid.

Note: I was able to solve this problem in the past using the
Levenberg-Marquardt algorithm implemented in MATLAB's "fsolve".

Does there exist a solver in GSL that can solve my problem in its current
form? Or is anyone aware of another software package for doing so?

Thanks,
-axplusbu




reply via email to

[Prev in Thread] Current Thread [Next in Thread]