Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 12. 12. 2008 22:56:45

jiko
Člen
Registrace: 12. 12. 2008
Příspěvků: 2

Rovnice - Excel spočítá, Calc ne

Hledám řešení transcendentní rovnice:

x = 1 / (2*log10(x*a)-0,8)

kde x je neznámá a a konstanta v jiné buňce. Nechť je rovnice uložená ve dvou buňkách A1 a A2, konstanta v B1:
A1: =1/(2*log10(A2*B1)-0,8)
A2: =A1
Ať nastavím počet iterací jaký chci (jde max.1000), přesnost výsledku taky libovolnou, Calc ukončí řešení chybou 502 v 18 případech z 27 různých hodnot konstanty a. To samé řešení v Excelu ale výsledek dá pro všech 27 hodnot.
Nepomůžou ani algebraické úpravy - úprava logaritmu součinu na součet logaritmů, příp.násobení logaritmu na logaritmus 2.mocniny.
V čem dělám chybu ?

Offline

#2 13. 12. 2008 07:10:37

j-pastierik
Člen
Registrace: 15. 11. 2004
Příspěvků: 761

Re: Rovnice - Excel spočítá, Calc ne

Funkcia log10 vedie k chybe 502, ak jej operand nie je väčší ako nula.

Nevidím logiku vo vzorcoch - máte ich zacyklené (bunka A1 odkazuje na A2 a A2 na A1) - to vedie k chybe 522. To sa nedá,pokiaľ je mi známe, ani v exceli.

Offline

#3 13. 12. 2008 13:39:56

jiko
Člen
Registrace: 12. 12. 2008
Příspěvků: 2

Re: Rovnice - Excel spočítá, Calc ne

To je právě jediný možný způsob, jak řešit transcendentní rovnice, tedy rovnice, které nemají algebraické řešení, ale jen numerické.
Budete se divit, ale v Excelu to spočítám, v Calcu jen někdy. A to je můj problém.
Můžu případně poslat tabulku (rovnice počítá koeficient hydraulických ztrát v závislosti na Reynoldsově čísle).

Offline

#4 19. 4. 2009 20:53:03

hanus
Člen
Místo Olomouc
Registrace: 29. 11. 2006
Příspěvků: 573
Web

Re: Rovnice - Excel spočítá, Calc ne

A což takhle vhodně použít Nástroje->Řešitel ?

Offline

#5 4. 4. 2013 18:42:32

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Re: Rovnice - Excel spočítá, Calc ne

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)

Offline

Zápatí