Usein on mukavaa ajatella alaindeksoitua muuttujaa, kuten x[i]. Jos teemme vaikka
for i from 0 to 4 do x[i]:=a^i; end do:niin x[i]:t voidaan ajatella matematiikan kannalta indeksoiduiksi muuttujiksi. Maplen tietorakenteena olemme luoneet "array"-tyypin x ilman ennkkoallokointia. Täytyy huomata, että symbolia x ei ole nyt syytä käyttää muuhun tarkoitukseen.
Usein on mukavaa rakentaa lista, vaikkapa
[seq(x[i],i=0..10];(Loppupää tulee pelkkinä x[i]-symboleina.)
Voisimme tehdä myös suoraan: L:=[seq(a^i,i=0..4)];
Huomaa: Listan alkioita indeksoidaan myös hakasuluilla, indeksointi alkaa
aina 1:stä. (Array-tyypissä se voi alkaa mistä vain, ellemme ennakkoon
allokoi listan indeksirajoja, vaikkapa x:=array(1..5);)
Matriisit ja vektorit
Valitettavasti on sekä Vector että vector, Matrix, matrix,LinearAlgebra, linalg.
Kirjoittelen tähän lisää, kunhan ehdin ...
Toistaiseksi: ?LinearAlgebra, ?linalg (linalg-asioita on [HAM]-kirjassa, LinearAlgebra ei, kun ne eivät olleet vielä silloin (1998) syntyneet.)
ke 10.3.04
Mikan kysymys harvoista: Voidaanko lukea tiedostosta harvana?
A: spconvert
>> help spconvert SPCONVERT Import from sparse matrix external format. SPCONVERT is used to create sparse matrices from a simple sparse format easily produced by non-MATLAB sparse programs. SPCONVERT is the second step in the process: 1) LOAD an ASCII data file containing [i,j,v] or [i,j,re,im] as rows into a MATLAB variable. 2) Convert that variable into a MATLAB sparse matrix. ... Example: Suppose mydata.dat contains the rows 8 1 6.00 3 5 7.00 4 9 2.00 9 9 0 then the commands load mydata.dat A = spconvert(mydata); produces the 9-by-9 sparse matrix A = (8,1) 6 (3,5) 7 (4,9) 2ti 2.3.04 Matlab-idiomeja. Veeran esityksessä oli matriisi N. Jos on jo tehty A=ones(5,5), niin:
>> A=ones(5,5) A = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >>N= reshape(cumsum(A(:)),size(A)) N = 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 5 10 15 20 25Tämä tuli siinä heti mieleen. Yksinkertaisempi (ja varmasti tehokkaampikin) olisi
>> reshape(1:25,5,5) ans = 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 5 10 15 20 25
writeto("teht3.txt"); lprint(fx); lpritn(fy); writeto(terminal);Tästä voi suoraan tehdä tiedoston (harj2teht3.pps), joka kelpaa pplane5:lle. (Ladataan File-valikon load:lla.) Tässä sellainen on valmiina (pitää muistaa poistaa rivinsiirrot pitkistä kaavoista, kuten tässä on tehty). (Jouduin vähän aikaa temppuilemaan, ennenkuin pplane5 hyväksyi temput, koe ei ole toistettavissa.)
harj2teht3 x y -24*(13*x+4*x^3+6*x^2+4*x*y^2+8*x*y+2+2*y^2)/(1+x^2+y^2)^2/(11+2*x^2+4*x+2*y^2 +8*y)^2 -24*(13*y+4*y*x^2+4*x*y+4*y^3+12*y^2+4+4*x^2)/(1+x^2+y^2)^2/(11+2*x^2+4*x+2*y^ 2+8*y)^2 arrows 20 -2 4 -4 2Nämä lausekkeet on tuotettu suoraan Maplella, mitään lisäeditointeja ei ole tehty (rivinsiirtopoistojen lisäksi). Huomaa, että pplane5-kaavoissa ei ole Matlabille muuten tunnusomaisia pistetoimituksia, kuten .* jne.
Jos haluat piirtää samaan kuvaan korkeuskäyriä (isokliinejä), täytyy pisteet lisätä Maplella generoituun f:n kaavaan. Laitan tähön Matlab-istunnon.
>> f=inline('3./(1+x.^2+y.^2)./(1/4+1/2*(x+1).^2 + 1/2*(y+2).^2)','x','y') >> x=linspace(-2,4,20); >> y=linspace(-4,2,20); >> [X,Y]=meshgrid(x,y); >> figure(1) >> figure(2) >> Z=f(X,Y); >> contour(x,y,Z) >> contour(x,y,Z,20)
ti 27.1.04