Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  30 31 32 33 34 35 36 37 38   další »

Ještě jeden článek k sattistice a náhodným číslům v Excelu (2010, 2013)

http://epublications.bond.edu.au/cgi/viewcontent.cgi?article=1179&context=ejsie

@eLCHa

Pár pojednání o generování náhodných čísel v Excelu.
Zatím jsem nenašel poslední verze. Vyplývá z toho, že pro náročnější úlony nic moc a že když MS hlásá zlepšení, tak je to notnou brát s velkou rezervou a prověřovat.

http://www.pages.drexel.edu/~bdm25/excel-rng.pdf

http://www.pages.drexel.edu/~bdm25/excel2007.pdf

https://www.random.org/analysis/

http://www.amstat.org/sections/srms/Proceedings/y2004/files/Jsm2004-000710.pdf

http://www.amstat.org/sections/srms/proceedings/y2001/proceed/00109.pdf

https://support.microsoft.com/en-us/kb/828795

http://homepages.ulb.ac.be/~gmelard/rech/gmelard_csda23.pdf

Co se týká jistoty, že funkce NÁHČÍSLO nevrátí vícekrát stejné číslo, tak ta ve 100% případů samozřejmě není. Je hodně malá, k jejímu odhadu nemám data (v jednom z uvedených článků je zmínka, že perioda použitého staršího algoritmu je cca 2^43).

Ale. Je snadné zkontrolavat, že se čísla jsou OK (5050 - suma = počet stejných čísel v sadě).
Dále. Z vágního dotazu se tu vyrojilo několik variant co by mohl tazatel potřebovat a jak by řešení mělo fungovat.

Metodu s =NÁHČÍSLO() + setřídit používám k náhodnému uspořádání dat. Tady mi případná shoda nevadí. Mimochodem, i to je řešení.

V prvním sloupci stačí jen

=NÁHČÍSLO()

K ostatním výhradám.

Uvědomte si, že 200 tis vzorců není nic přehnaného.
Např. při 20 sloupcích se to vejde na 100 řádků.
Vzorce celkem běžně bývají složitější než je volání jedné funkce a několika sekundový přepočet podobného listu by určitě neobstál.

Metoda Calculate přepočítá jen co je nutné. Protože v testu nejprve opakovaně spustím celkový přepočet aby se vyřešily případné změny a aby se aspoň trochu rozběhl procesor je čas cca 15 msec skutečně jen časem kontroly, že nic počítat není třeba.
V případě RoundX ovšem je nutné přepočítat volatilní funkci tak se také přepočítá.

Metoda .EnableCalculation=False zakáže přepočet listu. Po jeho povolení Excel neví, jestli se něco změnilo, tak při dalším přepočtu metodou Calculate přepočte vše co je na listu.

Doba vlastního přepočtu 200 tis. funkcí Ceiling je na mém stroji cca 20 msec.

V případě volatilní RoundX se v tomto případě přepočte zase vše. Rozdíl mezi prostým přepočtem a úplným přepočtem je tedy minimální je způsoben dalšími procesy v počítači.

Slabinou Vašeho testu je, jak se už pokoušel vysvětlit eLCHa, že mícháte volání funkce/udf z listu a volání funkce metodou WorksheetFunction, případně přímé volání makra.

Tj. v případě volání Ceiling je zde poměrně velká režie metody WorksheetFunction (Vaše představa, že tam režie není, není správná), v případě volání UDF z listu je zde naopak doplňková režie (možná na kontrolu volatility, možná na kontrolu, zda funkce nedělá něco, co UDF dělat nesmí).

@Vovka

Přehlédl jste jednu drobnost.
Vzhledem k rozumným omezením na velikost přikládaných souborů jsem testované listy vyplnil jen jedním řádkem.

Je tedy nutné nejprve v listech vybrat první dvě buňky, ctrl-shift-šipka dolů, ctrl-d
a pak spustit test.

Případně lze samozřejmě změnit počet vyplněných buněk.

Opoměl jsem. Ve výpočtech je dobré vypnout přepočet tabulek.

Pokud ladím složitější výpočet, používám citlivostní analýzu, tabulka dat.

V případě jedné proměnné lze tak rychle zjistit a zaznamenat výsledky při různých vstupech, včetně mezivýsledků.

Pokud potřebuji otestovat více než 2 vstupy, je třeba trochu přemýšlet. Nejprve, jestli je to opravdu nutné.

Obvykle mi stačí citlivost výsledku ke změnám jednotlivých vstupů, druhá proměnná mi určuje, do která buňka se má měnit. Zjistím snadno citlivost výpočtu na různé vstupy. Fakticky tak v jednom kroku provedu více výpočtů s jednou proměnnou.

Jinak, pokud to opravdu nutné je, lze třeba tabulky zřetězit.
Fakticky jsem se k tomuto dostal když jsem zkoušel, jestli lze použít výstup z jedné tabulky dat jako vstup do druhé.

Pro jistotu, pro někoho možná některé detaily citlivostní analýzy nemusí být samozřejmé:
Vzorec, která tabulka dat vyhodnocuje, je prostý odkaz na výsledek výpočtu.
Měněné buňky jsou na listu s tabulkou a vstupy výpočtu na tyto buňky odkazují.
Pokud řeším více vstupů (citlivost, často užitečné) je nutno trochu upravit výpočet:
"Normální" vstupní data jsou jinde a v původní vstupní buňce je vzorec typu:
když(2.měněná buňka má moje číslo; vezmi 1. měněnou buňku; vezmi "normální" vstup)

Zkusil jsem to trochu jinak.

V souboru jsou v obou listech na 1. řádku číslo a vzorce =ZAOKR.NAHORU(A1;0,01) na listu CEILING
a =roundx(A1;0,1;1) na listu RoundX

Na řádku 200000 je zarážka, která usnadní zkopírování 1. řádku dolů.

Měřil jsem dobu přepočtu a úplného přepočtu obou listů s vyplněnými 200 tis. řádky. Přepočet se opakoval 5x a výsledkem je průměrný čas.

Výsledky:

List CEILING
Přepočet: 14,7 msec
Úplný přepočet: 36,9 msec

List RoundX
Přepočet: 3101,1 msec
Úplný přepočet: 3098,1 msec

Pro srovnání výsledek testu Vovky pro 200000 opakování:

Ceiling : 578 msec
RoundX : 703 msec

Můj závěr:

1. Metoda WorksheetFunction má o hodně vyšší režii, než volání funkce z listu.
2. Volání UDF z listu je o dost pomalejší než volání té samé funkce z listu.

K tomu cyklu.

Obvykle používám tabulku dat

@eLCHa

Částečně se chyba řeší, u funkcí CEILING a FLOOR ve 2010 přidali varianty CEILING.PRECISE a FLOOR.PRECISE, u kterých nezáleží na znaménku 2. parametru.

A ve 2013 doplnili funkce CEILING.MATH a FLOOR.MATH, které se blíží k tomu, co poslal Vovka (lze nastavit způsob zaokrouhlení záporných čísel).

Nechápu, proč opravují jen funkce CEILING a FLOOR.

Propagovaný "dolovací" sloupec nefunguje v případě porovnání listu.

Varianta s odkazy z pomocného listu zdánlivě vypadá lépe, ale pokud vytvořím propojení na celý list, tak prázné buňky najednou nejsou prázdné.

Takže to "Funguje to, jako když vystřelí z praku." platí jen v některých případech (bez prázdných buněk).

"Ručně" mazat odkazy na prázdné buňky není zrovna něco k doporučení.

Zbývá tedy jen kopie hodnot (vložit jinak, hodnoty, vynechat prázdné)

Pokud to má běhat automaticky, tak zřejmě makrem načíst porovnávané hodnoty a porovnat. A možná najít mechanismus na snažší hledání ve větším souboru.

Pokud porovnávám sešity, tak pro moji potřebu a používám pro definici odkazu některou formu jmen.

@Vovka
Pozor na definici jmen s relativním odkazem. Taky jsem líný a používám to, ale občas se odkaz posune o nějaké políčko.

Dovolil jsem si tabulku trochu doplnit a pozměnit některé komentáře.

Možná, že několik peprných slov ještě přibude.

Nedoplnil jsem další zaokrouhlovací funkce, např. WORKDAY, WORKDAY.INTN, HODNOTA.NA.TEXT, možná jsem něco dalšího vynechal.

@marjanka

Možná tomu nebudeš věřit, ale

Počítače existovaly už před rokem 1981.

Programy pro tabulkové výpočty existovaly dlouho před rokem 1985 (např. VisiCalc, Lotus123). Excel nebyl ani první ani nejlepší.

DOS nabízela IBM pro řadu 360 kolem roku 1965.

Jen netestované nápady.

Zkusil jste deklarovat bez uvedení cesty?
Předpokládal bych, že pokud bude knihovna na vhodném místě (např. ve stejném adresáři jako soubor), tak by mohla být nalezena.

Pokud to selže, je tu vždy možnost použít win api:

LoadLibrary
FreeLibrary
GetProcAddress
CallWindowProc

A dopsat rozhraní.

Ok. Chybu ve vybarvování jsem opravil. Zpravidla hledám rozdíly, aby to hledalo shodu, bylo nutné změnit vzorec v podmíněném formátu (buňka A1).

místo
=pf1_2<>A1

má být
=pf1_2=A1

Není to samozřejmě dokonalé, jde o obcházení omezení v Excelu. Pro rychlé porovnání dvou otevřených sešitů mi to obvykle stačí.

Do zavřeného souboru takto definovaný podmíněný formát nevidí. Nevylučuji, že s jinou funkcí by to šlo.

Jinak Excel4makro funkce lze používat ve jménech. Excel toto pak vyhodnotí jako makro v sešitu a sešit se musí uložit jako xlsm.


Strana:  1 ... « předchozí  30 31 32 33 34 35 36 37 38   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Řazení podle času v kategoriích

veny • 16.7. 11:34

špatný výpočet ze zisku - příčina?

Anonym • 12.7. 22:56

špatný výpočet ze zisku - příčina?

Jakoby • 12.7. 12:35

Řazení podle času v kategoriích

Marekh • 12.7. 9:55

Porovnávací Tabulka

Jess • 8.7. 20:49

Vzorec pro zkopírování obsahu buňky.

veny • 6.7. 8:28

Vzorec pro zkopírování obsahu buňky.

Tonda_Hu • 5.7. 21:17