0
$\begingroup$
FixedPoint[If[# <= 0, 0, # - 1]&, 2 x]

Causes an infinite loop because of 'x'. How do i automatically prevent evaluation until 2 x is known? I have a similar function being fed into Plot[] and it has control over when x is known.

$\endgroup$
2
$\begingroup$

This question leaves us all guessing, but my guess is that you want a combination of the answers already given. I think you want to test the second argument of FixedPoint and only evaluate when this is numeric. You could use:

fp[function_, start_?NumericQ] := FixedPoint[function, start]

Now this halts evaluation:

expr = fp[If[# <= 0, 0, # - 1] &, 2 x]
fp[If[#1 <= 0, 0, #1 - 1] &, 2 x]

But after x is given a numeric value:

x = 5;
expr
0

Interaction with Plot with a modified function:

Plot[fp[If[# <= 0, #, # - 1] &, 2 z], {z, 0, 3}]

enter image description here

$\endgroup$
0
$\begingroup$

Your use-case is not really clear. When you simply define a function from your expression, you can control that it is called with any expression which makes sense

myFixedPoint[x_] := FixedPoint[If[# <= 0, 0, # - 1] &, 2 x]

Let's say now you have an expression for x which doesn't end in an infinite loop, you can call

y = 3;
myFixedPoint[7 y]

(* 0 *)
$\endgroup$
0
$\begingroup$

How about

ClearAll[x]
f[x_] := FixedPoint[If[# <= 0, 0, # - 1] &, 2 x ];
myFixedPoint = Function[x, If[NumberQ[x], f[x], Undefined]];

myFixedPoint[x]
myFixedPoint[123.4]
x = 123.4
myFixedPoint[x]

with output

Undefined
0
123.4
0
$\endgroup$

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.