Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
na Ulož to jsem nahrál program.
Kombinací kláves control+R se spustí celý program.
Offline
Dekuju,uz jsem pochopila jak to pocita. Ale mam porad problem.v tomto: vse je ok dokud nezmenim hodnotu puvodni x: Seznam([1,2,3,4,5,6)],6; jakmile pozmenim cisla na jakoukoli hodnotu napr. 10,20,30,40,50,60 ci jakoukoli jinou kombinaci uz mi nechce spocitat. Vyskoci mi vysledek x [ ] Pouzila jsem primo Vas program z uloz to. Staci pozmenit jen jedno cislo a uz nepocita. :-( uz jsem zoufala.
Offline
Zdravím,
u počítače jsem málokdy, takže nemůžu odpovědět okamžitě.
Mě to spočítá:
Seznam([10,20,30,40,50,60],6);
Výsledek je:
[102030405060,102030406050,102030504060,102030506040, .... atd
Nepíšete místo nuly velké O?
Offline
Offline
Ještě mě napadlo,
v nastavení (Konfigurace programu) wxMaximy si zkontrolujte, zda máte povolené zobrazovat dlouhé výrazy.
Offline
https://uloz.to/xPR4yrAr/seznam-wxmx
jakmile to zmenim treba take tak uz to dela neplechu. Jak rikam, jednou to spocita a pak se zasekne a nepohnu s tim.
Offline
Dobře, nefunguje to proto, že jsou tam stejná čísla.
Takže to zjednodušíme bez kontroly.
Příkaz na vytvoření všech kombinací bez opakování je:
permut([65,65,65,65,82,82]);
Výsledek je:
[[65,65,65,65,82,82],[65,65,65,82,65,82],[65,65,82,65,65,82],[65,82,65, 65,65,82],[82,65,65,65,65,82],[65,65,65,82,82,65],[65,65,82,65,82,65],[65,82,65 ,65,82,65],[82,65,65,65,82,65],[65,65,82,82,65,65],[65,82,65,82,65,65],[82,65, 65,82,65,65],[65,82,82,65,65,65],[82,65,82,65,65,65],[82,82,65,65,65,65]]
No a spojení do jednoho čísla provede tato funkce (změněno! - používá pouze jeden parametr)):
Seznam(List):=maplist(lambda([w],eval_string(lreduce('concat,w))), permut(List))$ X: Seznam([65,65,65,65,82,82]);
Výsledek je:
[656565658282,656565826582,656582656582,658265656582,826565656582,656565828265, 656582658265,658265658265,826565658265,656582826565,658265826565,826565826565, 658282656565,826582656565,828265656565]
Offline
Takto s použitím nové funkce Seznam (ta potřebuje pouze jeden parametr a to List obsahující čísla které má k dispozici):
Seznam(List):=maplist(lambda([w],eval_string(lreduce('concat,w))), permut(List))$ X: maplist(lambda([z],[z, mod(z, 965132)]), Seznam([65,65,65,65,82,82])^32);
A takhle budou vidět pro přehlednost 3 čísla na každém řádku (druhý řádek programu):
1. Vygenerované číslo
2. Vygenerované číslo^32
3. modulo(Vygenerované číslo^32, 965132
(poslední příkaz transpose zamění řádky za sloupce [maticový příkaz], takže to graficky zvýrazní)
Seznam(List):=maplist(lambda([w],eval_string(lreduce('concat,w))), permut(List))$ X: maplist(lambda([z],[z, z^32, mod(z^32, 965132)]), Seznam([65,65,65,65,82,82]))$ transpose(X);
Offline
Dá se to zobrazit i přímo jako matice:
Seznam(List):=maplist(lambda([w],eval_string(lreduce('concat,w))), permut(List))$ X: maplist(lambda([z],[z, z^32, mod(z^32, 965132)]), Seznam([65,65,65,65,82,82]))$ apply('matrix, X);
V prvním sloupečku je vygenerované číslo, v druhém jeho 32 mocnina a ve třetím je modulo 965132.
Offline
Ted me jeste napadlo.....kdyz bych chtela by mi mi to vypsalo kombinace ze zadanych cisel od prvniho cisla... 65^...6582...658282....65828265. ...atd. Az po tu hodnotu zadanych cisel tedy tady 6. Je to teda uz hodne kombinaci . :-). Doufam ze jsem to popsala srozumitelne.
Offline
Zdravím,
pokud jsem to dobře pochopil, tak by to mělo vypadat asi takto - je to složitější, protože jsem pole dat musel adresovat nepřímo přes index:
Seznam(List):=block([Pocet, Index, S:List, Q], Pocet: length(List), if is(Pocet>1) then ( Index: makelist(i,i,1,Pocet), for i:2 thru Pocet do ( N: full_listify(powerset(setify(Index),i)), Q: maplist(lambda([z], maplist(lambda([w],eval_string(lreduce('concat, maplist(lambda([y],List[y]),w)))), permut(z))), N), S: cons(S,Q) ) ), unique(sort(flatten(S))) )$ X: maplist(lambda([z],[z, z^32, mod(z^32, 965132)]), Seznam([65,65,65,65,82,82]))$ apply('matrix, X);
Offline
Zdravim jeste jednou, tentokrat mam problem s necim jinym. Kdyz zadam cokoli do Maxima tak po chvilicce vyskoci "program lisp.exe prestal pracovat. " hlaseni ukazat nejde,vypne se. Pripojeni k internetu je v poradku. Jiz jsem zkontrolovala co se dalo.....ale asi neco prehlizim. Prosim pomoc.
Uplna odinstalace a nova instalace pomohla. Ale mam obavy ze to udela zas.
Offline
Zdravím,
já používám Ubuntu (Linux) a s tímto jsem se nesetkal. Předpokládám že máte Windows. Díval jsem se do repozitáře a je tam nová verze pro Windows (maxima-sbcl-5.38.1-win64.exe - doufám že řeší tento problém), zkuste program odinstalovat a nainstalovat tuto novou verzi.
Možná po odinstalování staré verze bude dobré Windows nějak vyčistit, aby nezůstalo něco v registrech, ale v tom se opravdu nevyznám.
Pokud by ani to nepomohlo, pak bych zkusil nějakou starší verzi. (5.37.3-Windows)
Je tam na výběr ze tří prostředí: sbcl, gcl a clisp. Určitě by mělo aspoň jedno jít.
Offline
Tak jsem udelala vsechno mozmy,ale stejne to pada.
Tak se mi povedlo alespon to ze se maxima ted alespon nevypne, ale naskoci mi
Message from maxima's stderr stream:
*** - Program stack overflow. RESET
Ale nechapu co mam presne resetovat??
No zjistila jsem ze to dela jen dyz zadam vic cisel do kombinace, tedy predpokladam ze jde o preteceni zasobniku. Ted jen nevim jestli staci neco nastavit maxime nebo je potreba pozmenit program.
Offline
Zdravím,
koukám asi nejsem moc náročný, ten program využíváte do maxima. Asi si brzo budete muset koupit stroj s větší pamětí a rychlejším procesorem. :-)
Funkce permut využívá rekurzi a při vyšších požadavcích přeteče zásobník (je moc náročná na paměť). Dá se nahradit funkcí permutations, která používá jiný způsob výpočtu, ale musíte počítat s tím, že s vyšším počtem hodnot nestoupá počet možností lineárně, ale mnohonásobně rychleji, takže to bude podstatně časově náročnější.
Upravený program (záměna funkce permut za permutations):
Seznam(List):=block([Pocet, Index, S:List, Q, N], Pocet: length(List), if is(Pocet>1) then ( Index: makelist(i,i,1,Pocet), for i:2 thru Pocet do ( N: full_listify(powerset(setify(Index),i)), Q: maplist(lambda([z], maplist(lambda([w],eval_string(lreduce('concat, maplist(lambda([y],List[y]),w)))), full_listify(permutations(z)))), N), S: cons(S,Q) ) ), unique(sort(flatten(S))) )$
Zbytek je stejný.
Offline
↑ mák:
Dekuji. Ja zatim zjistovala co presne je lisp.exe a na co se pouziva. No a Zmenila jsem v programu lisp.exe prostredi z clisp na sbcl,dle vasi rady( treti v nejnovejsi maxime nevidim) sice udela pred vypoctem neco...:-) ale jiz vysledek dala. A kupodivu i celkem rychle.Na kombinace cislel treba z 15 pozic uz bych potrebovala asi opravdu poradku hracku. :-).
Zatim ted tedy funguje.....moc dekuji. Pokud pomuze jak doufam mate u me flasku neceho vytecneho. :-)
Offline
mák napsal(a):
Dá se to zobrazit i přímo jako matice:
Code:
Seznam(List):=maplist(lambda([w],eval_string(lreduce('concat,w))), permut(List))$ X: maplist(lambda([z],[z, z^32, mod(z^32, 965132)]), Seznam([65,65,65,65,82,82]))$ apply('matrix, X);V prvním sloupečku je vygenerované číslo, v druhém jeho 32 mocnina a ve třetím je modulo 965132.
Mohu se prosim jeste zeptat? Lze u tohoto poslkladat vyskledky od nejmensiho? Treba vysledky modula.
Offline
Seřazeno podle třetího sloupce od nejmenšího po největší (vložený příkaz sort):
Seznam(List):=map(lambda([w],eval_string(lreduce('concat,w))), permutations(List))$ X: maplist(lambda([z],[z, z^32, mod(z^32, 965132)]), Seznam([65,65,65,65,82,82]))$ S: sort (X, lambda ([a, b], a[3] < b[3]))$ apply('matrix, S);
Offline