Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
PiT_Bull Forumaš(ica)
Pridružen/a: 26. 10. 2005. (17:01:43) Postovi: (1F)16
|
|
[Vrh] |
|
goranm Forumaš(ica)
Pridružen/a: 12. 11. 2002. (20:09:12) Postovi: (906)16
Spol:
|
Postano: 15:50 sri, 24. 6. 2009 Naslov: |
|
|
Napisati paket sa funkcijama ti je u principu ista stvar kao i kada pišeš funkcije u notebooku.
Nije mi jasno zašto pisati čitav paket za samo jednu funkciju, no svejedno:
otvoriš novi paket (file - new - new package) i započneš sa
[code:1]BeginPackage["ImePaketa`"][/code:1]
Recimo da već imaš u vidu kako bi izgledala funkcija koja provjerava da li je matrica stohastička, npr.
[code:1]StohastickaM[matrica_List]:=If[...[/code:1]
Ispod BeginPackage možeš definirati koje poruke da Mathematica izbacuje pri različitim upitima. Ako napišeš npr:
[code:1]StohastickaM::usage="Funkcija StohastickaM vraca True ako je matrica stohasticka, a inace False."[/code:1]
Ako takvo što definiraš u svom paketu, na upit [tt]?StohastickaM[/tt] će se u bilokojem notebooku koji ima učitan tvoj paket pojaviti poruka "Funkcija StohastickaM vraca True ako je matrica stohasticka, a inace False."
Zatim, možeš iskoristiti slijedeće:
[code:1]Unprotect[StohastickaM][/code:1]
za slučaj da negdje već postoji definirana funkcija istog imena. Mathematica ne voli kada se nešto nazove po već postojećoj funkciji pa ovom naredbom kažeš da se ignoriraju (ako postoje) funkcije tog imena.
Zatim upišeš
[code:1]Begin["`Private`"][/code:1]
Ispod tog Begina upisuješ funkcije koje će se nalaziti u paketu. Znači tu ide definicija tvoje funkcije
[code:1]StohastickaM[matrica_List]:=If[...[/code:1]
Kada si završio upisivanje svih funkcija koje misliš da bi tvoj paket trebao sadržavati, završiš sa
[code:1]End[];
Protect[StohastickaM];
EndPackage[]
[/code:1]
Sve skupa to bi trebalo izgledati ovako:
[code:1](*Proizvoljni komentari, poput naslova, autora, opisa paketa itd*)
BeginPackage["ImePaketa`"]
StohastickaM::usage="Funkcija StohastickaM vraca True ako je matrica stohasticka, a inace False."
Unprotect[StohastickaM];
Begin["`Private`"]
StohastickaM[matrica_List]:=If[... , Return[True], Return[False]];
End[];
Protect[StohastickaM];
EndPackage[][/code:1]
Taj paket sačuvaš u direktorij koji je u Mathematici predviđen za spremanje paketa, otvoriš novi notebook i pozoveš svoj paket. Nakon toga možeš koristiti funkciju StohastickaM kao da si ju definirao u notebooku.
Napisati paket sa funkcijama ti je u principu ista stvar kao i kada pišeš funkcije u notebooku.
Nije mi jasno zašto pisati čitav paket za samo jednu funkciju, no svejedno:
otvoriš novi paket (file - new - new package) i započneš sa
Kod: | BeginPackage["ImePaketa`"] |
Recimo da već imaš u vidu kako bi izgledala funkcija koja provjerava da li je matrica stohastička, npr.
Kod: | StohastickaM[matrica_List]:=If[... |
Ispod BeginPackage možeš definirati koje poruke da Mathematica izbacuje pri različitim upitima. Ako napišeš npr:
Kod: | StohastickaM::usage="Funkcija StohastickaM vraca True ako je matrica stohasticka, a inace False." |
Ako takvo što definiraš u svom paketu, na upit ?StohastickaM će se u bilokojem notebooku koji ima učitan tvoj paket pojaviti poruka "Funkcija StohastickaM vraca True ako je matrica stohasticka, a inace False."
Zatim, možeš iskoristiti slijedeće:
Kod: | Unprotect[StohastickaM] |
za slučaj da negdje već postoji definirana funkcija istog imena. Mathematica ne voli kada se nešto nazove po već postojećoj funkciji pa ovom naredbom kažeš da se ignoriraju (ako postoje) funkcije tog imena.
Zatim upišeš
Ispod tog Begina upisuješ funkcije koje će se nalaziti u paketu. Znači tu ide definicija tvoje funkcije
Kod: | StohastickaM[matrica_List]:=If[... |
Kada si završio upisivanje svih funkcija koje misliš da bi tvoj paket trebao sadržavati, završiš sa
Kod: | End[];
Protect[StohastickaM];
EndPackage[]
|
Sve skupa to bi trebalo izgledati ovako:
Kod: | (*Proizvoljni komentari, poput naslova, autora, opisa paketa itd*)
BeginPackage["ImePaketa`"]
StohastickaM::usage="Funkcija StohastickaM vraca True ako je matrica stohasticka, a inace False."
Unprotect[StohastickaM];
Begin["`Private`"]
StohastickaM[matrica_List]:=If[... , Return[True], Return[False]];
End[];
Protect[StohastickaM];
EndPackage[] |
Taj paket sačuvaš u direktorij koji je u Mathematici predviđen za spremanje paketa, otvoriš novi notebook i pozoveš svoj paket. Nakon toga možeš koristiti funkciju StohastickaM kao da si ju definirao u notebooku.
_________________ The Dude Abides
|
|
[Vrh] |
|
PiT_Bull Forumaš(ica)
Pridružen/a: 26. 10. 2005. (17:01:43) Postovi: (1F)16
|
|
[Vrh] |
|
goranm Forumaš(ica)
Pridružen/a: 12. 11. 2002. (20:09:12) Postovi: (906)16
Spol:
|
Postano: 16:19 sri, 24. 6. 2009 Naslov: |
|
|
Ako sam dobro shvatio, možeš u paketu funkciju StohastickaM definirat kao
[code:1]StohastickaM[matrica_List, n_Integer][/code:1]
pri čemu [i]matrica[/i] predstavlja listu, a [i]n[/i] je cijeli broj. Dodatak _List i _Integer služe tome da Mathematica očekuje da će argument [i]matrica[/i] biti lista, a [i]n[/i] cijeli broj - ako bar jedno od toga nije odgovarajućeg tipa, funkcija se neće izvršiti.
No mislim da nije potrebno učitavat duljinu liste; jednostavno se [i]n[/i] unutar funkcije zamijeni sa duljinom prvog retka, odnosno sa Length[matrica[[1]]], pa se obje petlje vrte od 1 do Length[matrica[[1]]] jer svi retci imaju jednak broj elemenata.
Ako sam dobro shvatio, možeš u paketu funkciju StohastickaM definirat kao
Kod: | StohastickaM[matrica_List, n_Integer] |
pri čemu matrica predstavlja listu, a n je cijeli broj. Dodatak _List i _Integer služe tome da Mathematica očekuje da će argument matrica biti lista, a n cijeli broj - ako bar jedno od toga nije odgovarajućeg tipa, funkcija se neće izvršiti.
No mislim da nije potrebno učitavat duljinu liste; jednostavno se n unutar funkcije zamijeni sa duljinom prvog retka, odnosno sa Length[matrica[[1]]], pa se obje petlje vrte od 1 do Length[matrica[[1]]] jer svi retci imaju jednak broj elemenata.
_________________ The Dude Abides
|
|
[Vrh] |
|
PiT_Bull Forumaš(ica)
Pridružen/a: 26. 10. 2005. (17:01:43) Postovi: (1F)16
|
|
[Vrh] |
|
girl_00 Forumaš(ica)
Pridružen/a: 29. 06. 2009. (21:29:13) Postovi: (A)16
|
|
[Vrh] |
|
Gergonne Gost
|
Postano: 22:36 pon, 29. 6. 2009 Naslov: |
|
|
Mislim da ovo pitanje nema veze s temom pod kojom je postavljeno :?, pa bi ga možda trebalo prebaciti u neku drugu temu.
Označimo li
z1 = a - b + 5*i, z2 = 1 + (a + b)*i,
onda jednakost z1 = z2 vrijedi ako i samo ako istodobno vrijede obje sljedeće jednakosti
Re(z1) = Re(z2) i Im(z1) = Im(z2),
gdje je Re(z1) realni dio broja z1, Re(z2) realni dio broja z2, Im(z1) imaginarni dio broja z1, a Im(z2) imaginarni dio broja z2.
Budući da je
Re(z1) = a - b, Re(z2) = 1, Im(z1) = 5, Im(z2) = a + b,
dobiva se sljedeći sustav dviju linearnih jednadžbi s dvije nepoznanice:
a - b = 1
a + b = 5.
Njegovo je rješenje a = 3, b = 2.
Mislim da ovo pitanje nema veze s temom pod kojom je postavljeno , pa bi ga možda trebalo prebaciti u neku drugu temu.
Označimo li
z1 = a - b + 5*i, z2 = 1 + (a + b)*i,
onda jednakost z1 = z2 vrijedi ako i samo ako istodobno vrijede obje sljedeće jednakosti
Re(z1) = Re(z2) i Im(z1) = Im(z2),
gdje je Re(z1) realni dio broja z1, Re(z2) realni dio broja z2, Im(z1) imaginarni dio broja z1, a Im(z2) imaginarni dio broja z2.
Budući da je
Re(z1) = a - b, Re(z2) = 1, Im(z1) = 5, Im(z2) = a + b,
dobiva se sljedeći sustav dviju linearnih jednadžbi s dvije nepoznanice:
a - b = 1
a + b = 5.
Njegovo je rješenje a = 3, b = 2.
|
|
[Vrh] |
|
|