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

#1 11. 07. 2016 11:53

Marian
Místo: Mosty u Jablunkova
Příspěvky: 2512
Škola: OU
Pozice: OA, VSB-TUO
Reputace:   67 
 

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

  • (téma jako vyřešené označil(a) Marian)

#2 12. 07. 2016 19:54

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

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: 2512
Škola: OU
Pozice: OA, VSB-TUO
Reputace:   67 
 

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: 30020
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   100 
 

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: 2512
Škola: OU
Pozice: OA, VSB-TUO
Reputace:   67 
 

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

 

#6 16. 07. 2018 02:39

Twor21
Zelenáč
Příspěvky: 8
Reputace:   
 

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

↑ 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

 

#7 16. 07. 2018 14:34

Marian
Místo: Mosty u Jablunkova
Příspěvky: 2512
Škola: OU
Pozice: OA, VSB-TUO
Reputace:   67 
 

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

↑ 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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson