Function doesn't show result

Hello! I wrote little function but its not show output. I am fresh in this language and I’ve no idea why it’s not work.
My input is : f(x->1) after that program freezes.
This is function:

function f(func=x^2)
a_lower = 1 
b_upper = 2  
ro = (3 - sqrt(5))/2
eps = b_upper - a_lower

a_old = a_lower
b_old = b_upper
iter = 0
while(eps > 10^-5)
   
    a_new = a_old + (b_old - a_old)*ro 
    b_new = b_old - (b_old - a_old)*ro
    
    if (func(b_new) > func(a_new))
        b_old = b_new       
    elseif (func(b_new) < func(a_new))
        a_old = a_new
    end
    eps = b_old - a_old
    iter = iter + 1
    
end

print(a_new,func(a_new))

There are two issues with this function.

  1. Your function infinite loops as func(b_new) = 1 and func(a_new) = 1 so b_old and a_old will never get updated.

  2. You are print(a_new,func(a_new)) in the last line, but a_new is not in scope in here. (I’m assuming there is also an end after your whole code)

1 Like

The parameters of f seem a little odd to me, what f(func=x^2) should mean? It seems to mean that func is the sole parameter and it can be ommited, in this case, the value is the square of a global variable x?

1 Like

Welcome to the Julia forum! There are several problems with your code:

  1. the function is missing an end (please indent properly, that should help you catch those things)

  2. the func default argument x^2 is not a function, but a value (if x is in scope), perhaps you meant x -> x^2 (which is, BTW, available as abs2 in Julia)

  3. finally, for x -> 1, neither branch is called (1 < 1 is always false), so no values are changed. You can print things in a loop (see @show), or use the debugger. It may be better to just use an else anyway.