Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Solve an implicit function

I have an implicit function to solve:

enter image description here

So I tried root finding functions from scipy.optimize:

- fsolve : RuntimeWarning: The iteration is not making good progress, as 
  measured by the improvement from the last ten iterations.
- excitingmixing : NoConvergence
-brent:  RuntimeWarning: invalid value encountered in double_scalars (but 
  without a chance to set constraints)

I have to confess that I'm not sure about the correct solver. Could someone please help?

Minimal working example:

from scipy.optimize import fsolve, newton, brent, excitingmixing
import numpy as np

def func_zeta(zeta):
    k= 1.2
    Re = 5000.
    d = 0.03
    return (2.51 /Re/np.sqrt(zeta)+k/d/3.71) + 10**(0.5/ np.sqrt(zeta))
zeta = fsolve(func_zeta, 64/Re)
like image 833
TThe Avatar asked Jan 31 '26 04:01

TThe


1 Answers

There were problems in your translation of the formula. Shouldn't it rather be the following return statement?

return 2.51 / (Re * np.sqrt(zeta)) + k / (d * 3.71) - 10 ** (-0.5 / np.sqrt(zeta))

But even then we get again a RuntimeWarning. Let's try again and substitute zeta:

from scipy.optimize import fsolve
import numpy as np

def zeta_in_disguise(x):
    global k, d, Re
    return x + 2 * np.log10(2.51 * x / Re + k / (d * 3.71))

k = 1.2
Re = 5000
d = 0.03
#x = 1 / np.sqrt(zeta)
x = fsolve(zeta_in_disguise, 0)
print(x)
#let's test, if x is really the solution to the equation
print(-2 * np.log10(2.51 * x / Re + k / d / 3.71))

Ah, now it is convergent and produces the following output

-2.06528864

And there we have the problem - there is no solution for your given parameters, at least not, when we only consider float numbers.

like image 53
Mr. T Avatar answered Feb 02 '26 18:02

Mr. T



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!