kuvakulma:=(A,u)->display(arrow(u,shape=arrow,color=blue),arrow(A.u,shape=arrow,color=red),scaling=constrained,title="Lahto:sininen, kuva:punainen"): ympyrankuva:=proc(A,n) local t,k,ympv,ympl,ympkuva; ympv:=[seq(,t=[seq(k*2*Pi/n,k=0..n)])]; ympl:=map(convert,ympv,list); ympkuva:=map(convert,map(x->A.x,ympv),list); display(plot(ympl,color=blue),plot(ympkuva,color=red),scaling=constrained); end: ######## Iteraatioita, trajektoreita (alkaa) #################### plotdots:=data->display([plot(data,style=point),plot(data,color=blue)]): traje:=proc(A,x0,n) # A 2x2-matriisi, piirretään iteraation x[n+1]=A x[n] # Trajektori lähtöpisteestä x0, n iteraatiota. # local x,k; x[0]:=x0: for k to n do x[k]:=A.x[k-1]: end do: plotdots(map(convert,[seq(x[k],k=0..n)],list)); end: trajedot:=proc(A,x0,n) # Sama kuin traje, mutta pelkät pisteet. local x,k; x[0]:=x0: for k to n do x[k]:=A.x[k-1]: end do: plot(map(convert,[seq(x[k],k=0..n)],list),style=point); end: trajenuoli:=proc(A,x0,n) # Trajektoreita nuolikuvana. # Huom! sekä 2d että 3d. local x,k; x[0]:=x0: for k to n do x[k]:=A.x[k-1]: end do: plots[arrow]([seq([x[k],x[k+1]-x[k]],k=0..n-1)],shape=arrow); end: iterjono:=proc (A, x0, n) # Palauttaa pelkän jonon. Hiukan tehotonta tehdä erikseen piirtoa # varten sama, mutta tässä ei meitä haittaa. local x, k; x[0] := x0; for k to n do x[k] := A.x[k-1] end do; [seq(x[k],k=0..n)]; end proc: ######## Iteraatioita, trajektoreita (loppuu) #################### Sis:=(u,v)->add(u[_i_]*conjugate(v[_i_]),_i_=1..LinearAlgebra[Dimension](u)): # Huom! Pitkä muoto LinearAlgebra[Dimension] siksi, että pelkkä "Dimension" # aiheuttaa outoa käytöstä, jos LinearAlgebra ei ole ladattuna, kun funktio # Sis määritellään. SisF:=(f,g,a,b)->int(f(t_)*g(t_),t_=a..b): "Olen ystävällisesti määritellyt sinulle funktiot:"; "kuvakulma,ympyrankuva,plotdots,traje,trajedot,trajenuoli,iterjono,Sis,SisF"; "Kokeile esim: print(trajenuoli);"; ############## Fourier-sarjoja ################### # Jaksollinen jatko: MapleTech Vol 3 No. 3 1996 # JJ:=proc(f,d::range) subs({'F'=f,'L'=lhs(d),'D'=rhs(d)-lhs(d)}, proc(x::algebraic) local y; y:=floor((x-L)/D); F(x-y*D); end) end: # Esim: #sw:=JJ(signum,-1..1); #plot(sw,-4..4); # parillinenjatko:=f->unapply(piecewise(x>0,f(x),x<0,f(-x)),x): paritonjatko:=f->unapply(piecewise(x>0,f(x),x<0,-f(-x)),x): trigsiev:=proc(lauseke,n) local tulos; tulos:=subs(sin(n*Pi)=0,lauseke); tulos:=subs(cos(n*Pi)=(-1)^n,tulos); tulos:=algsubs(exp(-2*I*n*Pi)=1,tulos); tulos:=algsubs(exp(2*I*n*Pi)=1,tulos); tulos:=subs((-1)^(2*n)=1,tulos);simplify(tulos); end: jana:=(x,y)->plot([[x,0],[x,y]],thickness=3,color=blue):