Sice je to staré téma, ale poměrně zajímavé.
Také jsem se setkal s tím, že Excel řešil problém přestupu tepla pomocí iterace bez problému, ale v OpenOffice (LibreOffice) to byl oříšek hodný Sisyfa.
Jak tady bylo vzpomenuto řešitel bývá optimální volbou pro tyto problémy, pokud zrovna nezvolím Newtonovu metodu, která se hodí taktéž pro numerické řešení transcendentní rovnice.
Jenže tuto úlohu lze řešit i analyticky a to pomocí Lambertovy W funkce. Calc ji sice neobsahuje, ale můžeme si ji vytvořit aproximací pomocí Taylorova rozvoje. Protože výsledek nebude přesný, použiji Newtonovu metodu přiblížení, čímž dosáhneme vysoké přesnosti v poměrně širokém rozmezí vstupních hodnot.
Výsledný kód:
' Tato funkce vrací téměř přesnou hodnotu ve velkém rozmezí kladných vstupních hodnot x: [0 .. +9E+20]
Function Lambert_W(x as Double) as Double
Dim w as Double, z as Double, p as Double
If (x <= 0) Then ' Funkce není počítána pro hodnoty 0 a menší !
w = 0
ElseIf (x < 3) Then ' Přibližná aproximace pro rozmezí [0 .. 3]
w = (8*x^2+6*x)/(5*x^2+14*x+6)
Else ' Velmi přibližná aproximace pro rozmezí [3 .. nějaká vysoká hodnota (nezkoušeno)]
w = log(x)-log(log(x))
EndIf
' Přesné přiblížení Newtonovou metodou (povolená nepřesnost)
While abs(w-z) > 0.0000000001
z = w
p = exp(w)
w = w-(w*p-x)/(w*p+p)
Wend
Lambert_W = w
End Function
Function SolveNikuradseEquation(a as double) as Double
Dim x as Double, z as Double
z = 10^(2/5)
x = z * exp(Lambert_W(a*(log(10))/(2*z))) / a
SolveNikuradseEquation = x
End Function
Editoval LADER (6. 4. 2013 04:04:17)
Ubuntu 22.04.4 LTS, LibreOffice Verze: 7.6.6.3, wxMaxima 20.12.1, Maxima 5.47.0 (SBCL)