Arithmetic to ensure positives
Mostrar comentarios más antiguos
Hello all:
I am looking for a simple logic to ensure 'positive' for multiple variables. In pseudo code terms want to replace
if {(a-b>=0).and.(c-d>=0).and.(e-f>=0) then...}
without the use of boolean 'and' or special functions like max. Pure arithmetic will be much helpful.
My inspiration is
(a-b)^2 + (c-d)^2 + (e-f)^2 = 0
which uniquely ensures/enforces eqalities, a=b, c=d, e=f.
Any parallels.
Much appreciated.
Regards.
Respuestas (2)
Walter Roberson
el 27 de Dic. de 2015
0 votos
This is not possible to do without at least one comparison, and comparisons are not pure arithmetic. Your inspiration (a-b)^2 + (c-d)^2 + (e-f)^2 = 0 involves a comparison and so is not pure arithmetic.
5 comentarios
Amit
el 27 de Dic. de 2015
Image Analyst
el 27 de Dic. de 2015
I can't think of any legitimate reason why someone would want to write a program that doesn't allow boolean relational operators like >= and &&. Aside from whether it's even possible, why would you want to torture yourself like that? So your scheme is fragile - make it non-fragile and get on with things.
John D'Errico
el 27 de Dic. de 2015
Note that your "target" idea,
(a-b)^2 + (c-d)^2 + (e-f)^2 = 0
is actually a terribly written thing in terms of numerical analysis. Sorry, but that is a bad thing to do when you might be working with floating point numbers.
As Image Analyst says, just write some basic code that does what you want instead of looking for some elegant (to you) code fragment that looks nice, but does bad things.
Walter Roberson
el 27 de Dic. de 2015
When you say that your optimization scheme is very fragile, are you talking about attempting to code constraints in a manner that is differentiable?
Amit
el 3 de En. de 2016
Walter Roberson
el 4 de En. de 2016
0 votos
(a-b)^2 + (c-d)^2 + (e-f)^2 = 0 is differentiable only because it is smoothly invertible, that it can be translated into a series of variable reductions. Inequalities cannot be inverted that way. You cannot even code a > 0 invertibly -- if you could then c>=d could be coded as (c-d)^2 - delta_c = 0 together with however you coded delta_c > 0.
Unless, that is, you are okay with coding Heaviside functions, in which delta_c > 0 translates to Heaviside(delta_c) - 1 = 0 after having defined Heaviside(0) as 0 (Heaviside(0) does not have a fixed value, not really; one of the common conventions says Heaviside(0) = 1/2).
But diff(Heaviside(delta_c),delta_c) is Dirac(delta_c) and that is considered a distribution rather than a particular value, definitely not continuously differentiable. I would not consider it suitable for the use in this situation, but perhaps the theory of GRG is more flexible than I am.
1 comentario
Amit
el 4 de En. de 2016
Categorías
Más información sobre Programming en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!