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
Stránky: 1
Marně pátrám po tom, jak správně zavést v Maple (primárně), resp. Mathematica nový diferenciální operátor. Nový diferenciální operátor H by měl být definován zhruba (tj. pro jednoduchost) takto:
H:=(1/x)*D,
kde D je běžný operátor derivace. Jeho zavedení by mělo fungovat obdobně jako u operátoru D, tj. D^2 značí druhou derivaci. Tedy např. H^2 má znamenat
H^2=(1/x)*D[(1/x)*D].
Obdobně i pro vyšší mocniny. Existuje nějaká procedura, která toto umí zautomatizovat?
Offline
Zdravím, Mariane, u Tebe není pochyb, že před vložením dotazu jsi manuály prošel velice pečlivě :-). Tak snad jen pro další posun, když už jsem včera téma přesunula do sekce pro CAS - máš na mysli něco takového nebo podobného jako Odkaz
diff has a user interface that will call the user's own differentiation functions. If the procedure `diff/f` is defined, then the function call diff(f(x, y, z), y) will invoke `diff/f`(x,y,z,y) to compute the derivative. See example below.
a příklad (23) v odkazu?
Máš na mysli zápis H:=(f(x))*D (* značí násobení (ne, že budou Vánoce (c))? může být předpoklad i jiné operace, než *?) Děkuji.
Offline
↑ jelena:
Jeleno, díky za komentář.
Maple
To co mi píšeš jsem si skutečně již přečetl. Tyto příkazy mi ale neumožňují přímý výpočet daného operátoru vyššího řádu. Měl bych dvě možnosti: (i) provádět to ručně - to se ale absolutně nehodí pro zamýšlený účel, (ii) nebo to zkusit naprogramovat pomocí nějakých řídících sekvencí Maple - v těch se nevyznám. Takže tady prozatím nevím a na možnost (ii) s programováním mi nezbývá prozatím tolik času, abych to zkoušel.
Mathematica
Ačkoliv nepracuji v programu Mathematica, myslím, že se problém podařilo vyjasnit. Syntaxe tohoto programu mi připadá daleko více konzistentní, než je tomu v případě Maple (a to už ani nehovořím o nesnesitelném fontu Maple, který není možné trvale přepnout na nějakou neproporcionální variantu). Vygeneroval jsem následující snadný kód...
H[K_]:=Nest[1/x*D[#,x]&,#,K]& f[x_]=<nejaka funkce promenne 'x'>
Takže pokud budu chtít H^3(f), stačí nyní psát
H[3]@(f)
dávající výsledek pro 1/x*(d/dx(1/x*d/dx(1/x*df/dx))).
Tím je můj problém vlastně vyřešen. Pokud by ale někdo přidal i verzi pro Maple, zvláště přímý ekvivalent příkazu 'Nest', nebudu se vůbec zlobit. Naopak budu zvědavý na to, jak to mohu příště zařídit.
Edit: Co se týče znaku '*', ten je nutno pro násobení v Maple používat velmi často, takže místo 'x*y' není možno psát jednoduše 'xy', protože 'xy' značí proměnnou, jejíž označení je takové, jaké jsme zadali. Takže Vánoce se v tomto případě nekonají.
Offline
↑ Marian:
Zdravím, Mariane, také děkuji za podrobné upřesnění (minimálně bych to viděla jako dobré vodítko pro kolegy, kdo by se toho ujmul).
Zde na str. 56 (označení v dokumentu, nebo 55 v pdf) autor porovnává oba nástroje a píše v podstatě totéž, co Ty (že v Mathematica je hotový příkaz Nest, ale v Maple se to musí naprogramovat). Příklad kódu pro Nest v Maple má v dokumentu na str. 56, také se odkazuje na své knihovny na stažení, ale já to nemám na čem zkoušet. Tobě tato cesta časově a systémově také nevyhovuje. Předpokládám, že i na některém jiném místě bude hotový balíček, nebo to ještě sepíše někdo z kolegů. Obávám se však, že v Maple jen samotný tento baliček postačovat nebude.
'*', ten je nunto pro násobení v Maple používat velmi často,
ano, samozřejmě, jen jsem si upřesňovala, zda to nemůže v tomto konkrétním případě znamenat něco jiného (a také zda předpokládáš jen formu H:=(f(x))*D).
Pokud by ale někdo přidal i verzi pro Maple, zvláště přímý ekvivalent příkazu 'Nest', nebudu se vůbec zlobit. Naopak budu zvědavý na to, jak to mohu příště zařídit.
za to se také přimlouvám a děkuji.
Offline
↑ jelena:
Kniha je zajímavá, ale podařilo se mi najít jednodušší proceduru, která programuje klasickou rekurenci a dává taktéž požadovaný výsledek:
Maple
H:=proc(K,f) # H: nazev operatoru # K: pocet iteraci # f: dana funkce local a,k; a:=array(0..K); for K from 1 to K do a[k]:=1/x*diff(a[k-1],x) end do; print(simplify(a[K])); end proc
Takže pokud jsem psal v Mathematice H[3]@(f), tady píšu
H(3,f)
kde f je již nějaká zvolená funkce. Třeba
H(3,sqrt(x))
Co se týče užití operací '*', zvolil jsem pouze něco na ukázku. Můj původní problém byl složitější. Funkce f závisela ještě na kladném celočíselném parametru a měla formu součinu s proměnnou mezí závisející právě na něm, přitom forma součinu se ještě měnila v závislosti na paritě parametru. Musela se proto použít i nějaká IF-odmínka a (de-)aktivizující příkazy 'Inactivate', 'Activate' (Mathematica), resp. inertní formu součinu 'Prod' v Maple.
Offline
↑ Marian: Pod "D^2" si predstavim urceny rozsah derivacie upravou na kvadrat. Suradnice sa pisu inak. Ta nula na pravej strane sa tam ako ocitla? Lebo s inplicitnou notaciou mam skusenosti a "nulárna identita" vraví , ze si vsetko na lavej strane odpoveda( preto sa rovnica takto anuluje) mozem sa mylit samozrejme.
Offline
↑ Twor21:
Můžeš mi vysvětlit, o jakých souřadnicích je tady řeč? Nebo uveď pro zřejmost nějaký případ, kdy popsaná procedura dává nesprávný výsledek. Nějak nemohu chytit červenou nit ve tvém příspěvku.
Offline
Stránky: 1