[ april04 @ 21.05.2009. 12:09 ] @
Pozdrav svima! Kako u Mathematici generirati matricu reda, ne znam 70x70, sa random elementima (cijelim brojevima) u rasponu od [-100,100]? |
[ april04 @ 21.05.2009. 12:09 ] @
[ Bojan Basic @ 21.05.2009. 12:18 ] @
Table[Table[Random[Integer,{-100,100}],{j,1,70}],{i,1,70}]
[ april04 @ 21.05.2009. 19:03 ] @
Puno hvala! :)
[ april04 @ 23.05.2009. 20:41 ] @
Evo mene opet...
Probao sam i ovako A = Table[Random[Integer, {-150, 150}], {j, 101}, {i, 101}] i napravi mi matricu, pa me zanima ima li kakve razlike između ta dva načina? Izračunao sam trag, determinantu i svojstvene vrijednosti matrice, ima ih i kompleksnih i realnih, a sada bih pomoću funkcije Select trebao izdvojiti samo realne svojstvene vrijednosti. Probao sam sa Select[Eigenvalues[N[A]], Reals], ali dobijem jedino {} :( [ Bojan Basic @ 23.05.2009. 21:05 ] @
Citat: april04: Probao sam i ovako A = Table[Random[Integer, {-150, 150}], {j, 101}, {i, 101}] i napravi mi matricu, pa me zanima ima li kakve razlike između ta dva načina? Nema razlike (osim u dužini zapisa), a još je i najprirodnije Table[Random[Integer, {-150, 150}], {101}, {101}] (tj. bez imenovanja brojačâ). Prošli put sam ponudio onu varijantu zato što na kompjuteru s kog sam pisao nije bilo Mathematice, a meni se sve nešto činilo da varijanta bez brojača nije radila u nekim starim verzijama — pa sam napisao ono što je bilo sigurno. Citat: april04: Izračunao sam trag, determinantu i svojstvene vrijednosti matrice, ima ih i kompleksnih i realnih, a sada bih pomoću funkcije Select trebao izdvojiti samo realne svojstvene vrijednosti. Probao sam sa Select[Eigenvalues[N[A]], Reals], ali dobijem jedino {} Reč Reals u Mathematici označava skup realnih brojeva, što znači da tvojom komandom proveravaš postoji li među sopstvenim vrednostima skup ![]() ![]() [ april04 @ 23.05.2009. 23:18 ] @
Istina, baš :)
Nego, da pitam ja dalje :) Nakon što sam našao svojstvene vektore sa Eigenvectors[N[A]], sad bih trebao izdvojiti samo svojstvene vektore pridružene realnim svojstvenim vrijednostima, koristeći Select, Map i Apply funkcije. Gledao sam help file, i dok mi je Select više-manje jasan, Map i Apply mi uopće nisu jasni što rade oni zapravo :S [ Bojan Basic @ 23.05.2009. 23:53 ] @
U tom slučaju je zgodnije da koristiš funkciju Eigensystem, čiji su rezultat parovi sopstvena vrednost — sopstveni vektor. Da bi izdvojio samo realne, upiši Select[Eigensystem[N[A]], #[[1]] ∊ Reals &].
[ april04 @ 24.05.2009. 13:56 ] @
uh, sudeći po naslovu, lagano ulazim u neki mathematica help topic :)
Tamo kada sam odredio sve svojstvene vrijednosti matrice...sada ih trebam prikazati kao točke u kompleksnoj ravnini. Pretpostavljam da će to izgledati dosta... raspršeno, dok će na x-osi (osi realnog dijela kompleksnog broja) biti samo par točaka, jer od svih svojstvenih vrijednosti samo njih par je realno. Koristim funkciju: ListPlot[Eigenvalues[N[A]], PlotRange -> All, PlotStyle -> PointSize[Large]], ali mi dobiveni graf i nije baš "neki" :/ Dobijem tek 9 točaka, a trebao bi ih imati daleko više. Zanimljivo mi je to da baš imam 9 realnih svojstvenih vrijednosti :) Pa je pitanje - kako dobiti kompleksnu ravninu, odnosno kompleksni koordinatni sustav? [ Bojan Basic @ 24.05.2009. 15:08 ] @
Možeš umesto kompleksnih brojeva posmatrati uređene parove koji se sastoje od realnog i imaginarnog dela zasebno, pa ih tako ucrtati. Komanda bi bila ListPlot[{Re[#], Im[#]} & /@ Eigenvalues[N[A]], PlotRange -> All, PlotStyle -> PointSize[Large]].
[ april04 @ 24.05.2009. 18:52 ] @
Odlično radi :)
Još par pitanja ;) Crtanje kvadratne matrice, reda 20, koja ima sve elemente 0, osim glavne dijagonale koja ima random cjelobrojne elemente iz [-5,5], i dijagonale iznad nje koja ima bilo šta (osim samih nula). Na tragu sam rješenja (barem mislim) sa: DiagonalMatrix[{Table[Random[Integer, {-5, 5}]]}, 0, 20] dobijem matricu reda 20, samo što mi se samo prvi element generira, ne i cijela glavna dijagonala. Pretpostavljam da ću za popunjavanje ove dijagonale iznad glavne morati ovu 0 promijeniti u 1, što je kao neki offset? [ Bojan Basic @ 24.05.2009. 19:27 ] @
Uh, polako.
![]() Dobro si pretpostavio kako se popunjava dijagonala iznad glavne. [ april04 @ 24.05.2009. 19:47 ] @
Citat: Bojan Basic: Uh, polako. :) Ne znam šta će ti one vitičaste zagrade, to je prvi problem. A drugo, dvadesetica treba da ti bude brojač za Table, a ne za DiagonalMatrix. Dobro si pretpostavio kako se popunjava dijagonala iznad glavne. Vitičaste zagrade sam stavio jer sam iz Helpa skužio da DiagonalMatrix ide u obliku DiagonalMatrix[list,k], a list se unosi pomoću vitičastih zagrada :) I onda mi je išla logika generiranja tablice unutar tih zagrada, pa da ti elementi zapravo budu članovi liste, ali sam previdio brojač :) Ali uz tvoje savjete sad imam matricu koja na glavnoj dijagonali ima random [-5,5] - DiagonalMatrix[Table[Random[Integer, {-5, 5}], {20}], 0, 20] // MatrixForm Inače, dijagonalu iznad glavne sam dobio sa DiagonalMatrix[Table[Random[Integer, {-5, 5}], {20}], 1, 20]+DiagonalMatrix[Table[Random[Integer, {-5, 5}], {19}], 1, 20], znači, smanjio sam brojač za 1, jer je 19 elemenata na toj dijagonali, ostavio isti raspon brojeva i sve to pomaknuo za 1. Moćno :) [ april04 @ 25.05.2009. 00:54 ] @
Dobro veče, evo mene još malo :)
Sad moram napraviti dvije matrice, A i B, prema slijedćim pravilima: A matrica mora biti oblika (30,20) i ima random elemente iz skupa {-1,0,1} B matrica je kvadratna matrica reda 20, koja na glavnoj dijagonali i dijagonali iznad nje ima random elemente iz [-5,5] To sam izveo ovako: A = Table[Random[Integer, {-1, 1}], {30}, {20}] B = DiagonalMatrix[Table[Random[Integer, {-5, 5}], {20}], 0, 20] + DiagonalMatrix[Table[Random[Integer, {-5, 5}], {19}], 1, 20] E sad, trebam generirati random matrice oblika AB i napraviti 70 iteracija, te ispisati te matrice i odrediti im rang. To sam riješio pomoću While petlje - odnosno, u svakoj iteraciji generiram A matricu koju množim sa B matricom i ispisujem rezultat i rang te nove matrice n = 1; While[n < 71, Print[MatrixForm[c = (Table[Random[Integer, {-1, 1}], {30}, {20}]).(DiagonalMatrix[Table[Random[Integer, {-5, 5}], {20}], 0, 20] + DiagonalMatrix[Table[Random[Integer, {-5, 5}], {19}], 1, 20])], " je rang matrice :)" MatrixRank[c]]; n++] Nisam stavljao Print[MatrixForm[c=A.B]] jer sam skužio da mi onda izbaci iste matrice, jel...koje su već izgenerirane. Ovako im generira baš u petlji, u svakoj iteraciji po novu matricu. I sad mi je zadatak od tih 70 matrica odabrati onu sa najmanjim rangom i odrediti joj jezgu i defekt. Za to dvoje ću se snaći, ali mene zanima jel postoji neka funkcija koja bi prošla kroz tih 70 matrica i odabrala onu sa najmanjim rangom, ili ja moram ručno skrolati i odabrati? Napomenuo bih da se u zadatku kaže da ako ima više matrica sa najmanjim rangom (što je kod mene slučaj), onda nek se odabere po želji (naravno, od tih sa najmanjih rangom). [ april04 @ 25.05.2009. 11:28 ] @
I još jedna stvar :)
Citat: Bojan Basic: U tom slučaju je zgodnije da koristiš funkciju Eigensystem, čiji su rezultat parovi sopstvena vrednost — sopstveni vektor. Da bi izdvojio samo realne, upiši Select[Eigensystem[N[A]], #[[1]] ∊ Reals &]. Ovo mi vraća {}, prazni skup, što nebi smjelo bit :/ Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|