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) 2
ti 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 25
Tä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