#1 Navi
Za předpokladu, že se skutečně jedná o úlohu, kterou zde KIIV odkazoval, je to nakonec poměrně jednoduché.
Metoda půlení intervalu, kterou zde navrhovali, je skutečně průchozí cesta. Nicméně, podobně jako u všech numerických metod, vyžaduje určité podmínky:
- funkce, jejíž kořeny řešíte, musí být spojitá (to zde platí),
- musíte znát interval, kde se kořen nachází,
- funkce musí na daném intervalu být monotónní.
Podmínky jsou poměrně přímočaré. Pokud není splněná druhá, pak můžete na intervalu půlit, jak chcete, ale k řešení se nedostanete. Druhá je nutná, aby fungovalo porovnání "jsem výš, půjdu dolů, jsem níž, půjdu nahoru." Pokud funkce není spojitá nebo monotónní a může vám různě skákat nahoru a dolu, nemáte zaručeno, že se ke kořeni dostanete.
Tedy, pokud chcete dopočítat kořen, musíte funkci nejdříve podrobit určité analýze. Pro ni je důležitá informace uvedená v KIIVově odkazu: každý zlomek v součtu musí být kladný - vzdálenost úseku je kladná, skutečná rychlost úseku je kladná, celkový čas je kladný. Pokud je každý zlomek kladný (> 0), pak funkce na definičním oboru je monotónní - s rostoucím k všechny zlomky klesají, a protože nejsou záporné a "nejdou proti sobě", pak celkový součet s rostoucím k také klesá (limitně k nule).
Podmínku 3 jsme splnili, takže je potřeba určit interval hodnot k, ve kterém se řešení zaručeně nachází. Jako spodní mez lze použít kraj definičního oboru. Všechny zlomky musí být kladné, tzn. pokud najdeme vm = min{v1, ..., vn}, pak spodní mez kl musí být -vm. Pro každé k menší než -vm by už nebylo splněné, že zlomky jsou kladné. Povšimněte si ovšem, že tato hodnota není součástí definičního oboru, protože byste ve zlomku s minimálním v dělil nulou. To ovšem nevadí - při půlení intervalu se stejně do krajní meze nikdy reálně nedostaneme.
Určit horní mez je trochu složitější. Víme, že funkce s rostoucím k monotónně klesá. Můžeme tedy najít maximum z poměrů sm/vm = max{s1/v1, ..., sn/vn} a následně vyřešit rovnici t = n.sm/(vm + kh). Je to, jako bychom měli všechny zlomky v součtu stejné. Když do původní funkce dosadíme kh, pak každý zlomek v součtu bude zaručeně <= sm/(vm + kh) (proto jsme hledali maximum) a tudíž celkový součet bude zaručeně <= t.
Takže, suma sumárum, výsledný algoritmus je následující:
- nalézt minimální vm a jako dolní mez kl prohlásit -vm,
- nalézt maximální poměr sm/vm a z něho určit horní mez kh (viz. výše),
- půlením intervalu (kl, kh) se přiblížit k hodnotě, kde se součet zlomků rovná t.