I have the following problem:
I have an algorithm, let's call if $r = F(μ)$. This algorithm consists of a gradient projection of a vector j on a vector g, a correction step a and a linear mapping of the resulting vector with a matrix K.
The input $μ$ is the multiplicator of a part of the j. The output ratio $r$ comprises of the infinity norm of part of the resulting vector in the nominator and the infinity norm of another part of the resulting vector in the denominator.
Hence, the function $F$ is non-linear, non-convex and probably non-differentiable.
I want now to make this ratio converge to a specific value $r^*$. So I am in effect trying to find the roots of the following function:
$$y(μ) = r^* - F(μ) = 0$$
I am looking only for positive values of $μ$. When μ changes sign, it greatly changes the physicsal meaning of my initial problem, which i don't want.
I use the secant method and it sometimes works; others it doesn't. I also apply an under-relaxation update rule:
$$μ_{k+1} += w^* μ_{k} + (1 - w)^* μ_{k+1}$$
where $w = 0.1\sim 0.3$.
This still does not help. It might converge sometimes, but others it greatly diverges. Next thing I would implement is the Aitken relaxation iteration, but I have a gut feeling it will not work either.
Some things about the $F(μ)$ that I have observed:
- For tiny increments of $μ$, the output r usually converges in the correct value.
- For bigger increments of $μ$, the output r barely changes, which in return gives me a zero gradient, which in return leads to a huge step update in the secant method, and boom! divergence.
Someone told me something about the $F(μ)$ being Lipschitz continuous in a tiny spectral radius around the intial $μ$ value. I do not know how to use this information though.
So question finally is: Which method I can use to ensure convergence to a value near my initial one? I am 100% this problem has a solution, so it is a matter of convergence and using the right method. And how can I keep my $μ$ positive? Should I apply a constraint explicitly or is there an implict faster way?
Thanks!