restart; A:=linalg[matrix](2,2,[1,2,3,4]); 1 2 A := 3 4 with(linalg); Warning, the protected names norm and trace have been redefined and unprotected [BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, coldim, colspace, colspan, companion, concat, cond, copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge, dotprod, eigenvals, eigenvalues, eigenvectors, eigenvects, entermatrix, equal, exponential, extend, ffgausselim, fibonacci, forwardsub, frobenius, gausselim, gaussjord, geneqns, genmatrix, grad, hadamard, hermite, hessian, hilbert, htranspose, ihermite, indexfunc, innerprod, intbasis, inverse, ismith, issimilar, iszero, jacobian, jordan, kernel, laplacian, leastsqrs, linsolve, matadd, matrix, minor, minpoly, mulcol, mulrow, multiply, norm, normalize, nullspace, orthog, permanent, pivot, potential, randmatrix, randvector, rank, ratform, row, rowdim, rowspace, rowspan, rref, scalarmul, singularvals, smith, stackmatrix, submatrix, subvector, sumbasis, swapcol, swaprow, sylvester, toeplitz, trace, transpose, vandermonde, vecpotent, vectdim, vector, wronskian] B:=matrix(2,2,[1,2,3,4]); B:=matrix([[1,2],[3,4]]); B := B := 1 2 3 4 1 2 3 4 evalm(a-b); evalm(a&*b); evalm(a^3); evalm(a&^3); 0 0 0 0 7 10 15 22 37 54 81 118
37 54 81 118 det(a); inverse(a); evalm(a^(-1)); -2-2 1 3-1 2 2-2 1 3-1 2 2 pa:=charpoly(a,lambda); pa := λ 2-5 λ - 2 solve(pa=0,lambda); 5 2 + 1 2 33, 5 2-1 2 33 eigenvalues(a); 5 2 + 1 2 33, 5 2-1 2 33 eigenvectors(a); 5 2 + 1 33, 1, - 1 2 2 + 1 6 33, 1, 5 2-1 2 33, 1, - 1 2-1 6 33, 1 AA:=matrix([[1,1,0],[0,1,0],[0,0,1]]); eigenvalues(aa); BB:=matrix([[0,1,0],[0,0,0],[0,0,1]]); eigenvalues(bb); 1 1 0 AA := 0 1 0 0 0 1
BB := 1, 1, 1 0 1 0 0 0 0 0 0 1 0, 0, 1 eigenvectors(aa); eigenvectors(bb); [ 1, 3, {[ 1, 0, 0], [ 0, 0, 1] }] [ 0, 2, {[ 1, 0, 0] }], [ 1, 1, {[ 0, 0, 1] }] C:=array(1..3,1..3); for r from 1 to rowdim(c) do for c from 1 to coldim(c) do C[r,c]:=r-c; C := array( 1.. 3, 1.. 3, []) evalm(c); v:=vector([1,2,3]); evalm(v&*c); evalm(c&*v); 0-1 -2 1 0-1 2 1 0 v := [ 1, 2, 3] [ 8, 2, -4] [-8, -2, 4] w:=matrix([[1],[2],[3]]); w := 1 2 3 evalm(c&*w); evalm(w&*c);
-8-2 4 Error, (in ) non matching dimensions for vector/matrix product M1:=array(1..3,1..2); for r from 1 to rowdim(m1) do for c from 1 to coldim(m1) do M1[r,c]:=1; evalm(m1); M1 := array( 1.. 3, 1.. 2, []) 1 1 1 1 1 1 M2:=array(1..3,1..3); for r from 1 to rowdim(m2) do for c from 1 to coldim(m2) do M2[r,c]:=2; evalm(m2); M2 := array( 1.. 3, 1.. 3, []) 2 2 2 2 2 2 2 2 2 M3:=array(1..1,1..2); for r from 1 to rowdim(m3) do for c from 1 to coldim(m3) do M3[r,c]:=3; M4:=array(1..1,1..3); for r from 1 to rowdim(m4) do for c from 1 to coldim(m4) do M4[r,c]:=4;
evalm(m3);evalm(m4); M3 := array( 1.. 1, 1.. 2, []) M4 := array( 1.. 1, 1.. 3, []) [ 3 3] [ 4 4 4] M:=blockmatrix(2,2,[M1,M2,M3,M4]); 1 1 2 2 2 1 1 2 2 2 M := 1 1 2 2 2 3 3 4 4 4 N:=submatrix(M,2..4,2..3); N := 1 2 1 2 3 4 P:=array(1..2,1..2); for r from 1 to 2 do for c from 1 to 2 do P[r,c]:=x^r*y^c; end do; evalm(p); P := array( 1.. 2, 1.. 2, []) x y x y 2 x 2 y x 2 y 2 diff(p[1,1],x); diff(p,x); #attenzione! map(diff,p,x); y 0 y y 2 2 x y 2 x y 2
mdiff:=proc(mat,variab) local nr,nc,ir,ic,matapp; nr:=rowdim(mat): nc:=coldim(mat): matapp:=matrix(nr,nc): for ir from 1 to nr do for ic from 1 to nc do matapp[ir,ic]:=diff(mat[ir,ic],variab); eval(matapp); end proc; mdiff := proc( mat, variab) local nr, nc, ir, ic, matapp; nr := rowdim( mat); nc := coldim( mat); matapp := `matrix`( nr, nc); for ir to nr do for ic to nc do matapp[ir, ic] := `diff`( mat[ir, ic], variab) end do end do `eval`( matapp) end proc Px:=mdiff(P,x); Px := y y 2 2 x y 2 x y 2 mdiffbis:=proc(mat,variab) local nr,nc,ir,ic,matapp; nr:=rowdim(mat); print(nr); nc:=coldim(mat); print(nc); # per visualizzare le dimensioni matapp:=matrix(nr,nc): for ir from 1 to nr do for ic from 1 to nc do matapp[ir,ic]:=diff(mat[ir,ic],variab)end do eval(matapp);end proc; mdiffbis := proc( mat, variab) local nr, nc, ir, ic, matapp; nr := rowdim( mat); print( nr); nc := coldim( mat); print( nc); matapp := `matrix`( nr, nc); for ir to nr do for ic to nc do matapp[ir, ic] := `diff`( mat[ir, ic], variab) end do end do `eval`( matapp) end proc Px:=mdiffbis(P,x); 2 2
y y 2 Px := 2 x y 2 x y 2 save mdiff,mdiffbis,"d:/laura/didattica/labaut/labaut05/libreria"; # per caricare la procedura in altro documento: # read("d:/laura/didattica/labaut/labaut05/libreria"); read "D:/Laura/didattica/LabAut/labaut05/libreria"; mdiff := proc( mat, variab) local nr, nc, ir, ic, matapp; nr := rowdim( mat); nc := coldim( mat); matapp := `matrix`( nr, nc); for ir to nr do for ic to nc do matapp[ir, ic] := `diff`( mat[ir, ic], variab) end do end do `eval`( matapp) end proc mdiffbis := proc( mat, variab) local nr, nc, ir, ic, matapp; nr := rowdim( mat); print( nr); nc := coldim( mat); print( nc); matapp := `matrix`( nr, nc); for ir to nr do for ic to nc do matapp[ir, ic] := `diff`( mat[ir, ic], variab) end do end do `eval`( matapp) end proc S:=0; #somma di tutti i numeri pari fino a 10 for i from 2 by 2 to 10 do S:=S+i; end do: eval(s); S := 0 S:=0; #somma di tutti i numeri pari fino a 10 for i from 2 by 2 while i<11 do S:=S+i; end do: eval(s); S := 0 30 30 J:=array(1..4,1..4); J := array( 1.. 4, 1.. 4, []) evalm(j);
J 1, 1 J 1, 2 J 1, 3 J 1, 4 J 2, 1 J 2, 2 J 2, 3 J 2, 4 J 3, 1 J 3, 2 J 3, 3 J 3, 4 J 4, 1 J 4, 2 J 4, 3 J 4, 4 for r from 1 to 4 do for c from 1 to 4 do if r=c then J[r,c]:=2; else J[r,c]:=0; fi; evalm(j); 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0 2 for r from 1 to 4 do for c from 1 to 4 do if r=c then J[r,c]:=2; elif r=c-1 then J[r,c]:=1; else J[r,c]:=0; fi; evalm(j); J[3,4]:=0; 2 1 0 0 0 2 1 0 0 0 2 1 0 0 0 2 evalm(j); J 3, 4 := 0
2 1 0 0 0 2 1 0 0 0 2 0 0 0 0 2