Matematické Fórum

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
! 04. 11. 2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
17. 01. 2016 (Jel.) Rok 2016 s novými a novějšími krystaly od kolegy Pavla!
17. 01. 2016 (Jel.) Nabídka knih z oborů matematiky, fyziky, chemie
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

#1 11. 07. 2016 11:53

Marian
Místo: Mosty u Jablunkova
Příspěvky: 2404
Škola: OU (99-03,04,05-07)
Pozice: OA
Reputace:   55 
 

Zavádění diferenciálního operátoru v CAS

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

 

#2 12. 07. 2016 19:54

jelena
Jelena
Místo: Opava
Příspěvky: 29668
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   85 
 

Re: Zavádění diferenciálního operátoru v CAS

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

 

#3 13. 07. 2016 05:49 — Editoval Marian (14. 07. 2016 05:41)

Marian
Místo: Mosty u Jablunkova
Příspěvky: 2404
Škola: OU (99-03,04,05-07)
Pozice: OA
Reputace:   55 
 

Re: Zavádění diferenciálního operátoru v CAS

↑ 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...

Code:

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

Code:

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

 

#4 13. 07. 2016 20:55

jelena
Jelena
Místo: Opava
Příspěvky: 29668
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   85 
 

Re: Zavádění diferenciálního operátoru v CAS

↑ 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

 

#5 14. 07. 2016 05:37 — Editoval Marian (14. 07. 2016 07:33)

Marian
Místo: Mosty u Jablunkova
Příspěvky: 2404
Škola: OU (99-03,04,05-07)
Pozice: OA
Reputace:   55 
 

Re: Zavádění diferenciálního operátoru v CAS

↑ 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

Code:

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

Code:

H(3,f)

kde f je již nějaká zvolená funkce. Třeba

Code:

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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson