1
$\begingroup$

I would like to exclude the point {x=0,y=0} in the function definition

f = Function[{x, y}, {x/(x^2 + y^2), -(y/(x^2 + y^2))}]    

So far I tried ConditionalExpressionand /; without success.

Thanks!

$\endgroup$
  • $\begingroup$ What should happen for f[0,0]? $\endgroup$ – Lukas Lang Aug 8 at 11:14
  • $\begingroup$ Function shouldn't be applied to ` {0,0}` or should return Null! $\endgroup$ – Ulrich Neumann Aug 8 at 11:16
  • 1
    $\begingroup$ Assuming it needs to be a pure function for some reason, I guess your only real option is to use If or similar to do the check. As far as I am aware, Function will always evaluate when it is applied to something. Depending on the amount of conditions, you could use e.g. Replace[{##},{{0,0}->Null,{x_,y_}:>{x^2,y^2}}]& or Replace[{##},{{x_,y_}/;x!=0||y!=0:>{x^2,y^2},_->Null}]& to have a syntax more similar to traditional downvalue definitions $\endgroup$ – Lukas Lang Aug 8 at 11:24
  • $\begingroup$ @LukasLang Thank you for your assistance. My purpose is to use the pure function inside TransformedRegion. A possible workaround could be the definition of a region thereby excluding the point {0,0} . $\endgroup$ – Ulrich Neumann Aug 8 at 11:27
  • $\begingroup$ If you're using it in TransformedRegion, I don't recommend using the return value Null. It's probably not the correct return for "this thing doesn't exists". Undefined is probably better. Null is a programmatic value, not a mathematical one. $\endgroup$ – Sjoerd Smit Aug 8 at 11:31
1
$\begingroup$

As far as I know, you cannot have a pure function that holds its arguments depending on a condition on the arguments. Condition specifically works with pattern matching and pure functions don't use the pattern matcher. So the behaviour that f[0, 0] doesn't evaluate simply cannot be achieved with a pure function.

The alternative is some sort of default return value. Probably the easiest way to do this, is with something like If, Switch or Which:

f = Function[{x, y},
  If[ TrueQ[x == 0 || y == 0],
   Undefined,
   {x/(x^2 + y^2), -(y/(x^2 + y^2))}
   ]
 ];
f[0, 0]

Undefined

Note the use of TrueQ, which is necessary to deal with the case f[a, b] where a and b are symbols. The If will not evaluate otherwise, since a == 0 and b == 0 remain unevaluated (because they are equation, not truth statements). The test x === 0 is not useful here either, since 0. === 0 evaluates to False. PossibleZeroQ[x] is another test you could use in the If statement.

$\endgroup$
  • $\begingroup$ Thank you for your comprehensive answer. I didn't know Undefined $\endgroup$ – Ulrich Neumann Aug 8 at 12:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.