En liten handledning till Maple

J-E A för naturvetarlinjen

version 08-93

1 Allmän information

Maple är ett matematikprogram som förutom numeriska beräkningar även inkluderar symbolisk formelmanipulation. Denna handledning är avsedd som en introduktion i samband med datorövningar i grundkurserna i matematik.Eftersom all information egentligen går att få genom Maples help-kommando är avsikten främst att underlätta starten av användandet.Först några detaljer.

• All inmatning avslutas med vagnretur RETURN .

• Maple startas (hos oss) med xmaple och avslutas med quit eller klick med vänster musknapp på quitbutton.

• Pågående kalkyler kan stoppas med klick på interruptbutton

• Alla kommandon avslutas med ; (eller : fast då skrivs inte resultatet ut).

• Kommandon kan sträcka sig över flera rader i väntan på ett semikolon.I samband med siffror måste man emellertid använda \ innan man byter rad.

• Information om vad ett speciellt kommando utför får man genom att skriva help(kommandot) eller bara ?kommandot .Genom att bara skriva ? får man allmän information om Maple.

• För att operationer skall göras fullt ut behövs ibland vissa evalueringskommandon:eval,evalf,evalm,evaln,evala,evalc,evalhf.De flesta av dessa behandlas i den följande texten.

• En variabel som inte tilldelats ett värde existerar som en symbol.Vid tilldelning av värden till variabler används symbolerna := .(Till exempel x:=1; ).Vill man sedan ha tillbaka x som en symbol skriver man x:=’x’; eller x:=evaln(x); vilket står för evaluera till namn.

• Funktionerna i Maple är av två typer.Dels sådana som laddas in automatiskt vid starten dels sådana som måste hämtas fram ur ett bibliotek genom kommandot readlib(’funktion’) innan de används första gången vid en körning.Genom help-kommandot får man reda på av vilken typ en speciell funktion är.Men det är väl först om en funktion inte fungerar som väntat, som man behöver undersöka om den behöver läsas in separat.

• Maple innhåller ett antal paket av funktioner som kan aktiveras genom kommandot with(paketnamn) .Exempel på sådana är:linalg,student och plots.Information fås genom ?package .

2 Tal och aritmetiska operationer

Talen π skrivs Pi e skrivs E i skrivs I

De vanliga aritmetiska operationerna mellan tal ser ut så här:

+ addition

- subtraktion

* multiplikation / division ˆ exponentiering Tal representeras i Maple som heltal,rationellt bråk,decimalbråk eller flyttal.Vill

man tvinga fram en decimal- eller flyttalsrepresentation går det att göra med kommandot

evalf(talet) Antalet siffror som skall skrivas ut går här att styra genom

evalf(talet,antalet siffror) Heltal representeras av Maple med alla sina siffror medan flyttal anges med

10 siffror om man inte anger något annat.Antalet siffror kan också ändras genom kommandot Digits .

3 De elementära matematiska funktionerna

Maple har de vanliga elementära matematiska funktionerna såsom exponential- och logaritmfunktionerna,de trigonometriska funktionerna och deras inverser, kvadratrot,absolutbelopp m fl.Här är en lista över de vanligaste i kurserna förekommande:

exp , ln , log10 , sinh , cosh , tanh sin , cos , tan arcsin , arccos , arctan sqrt , abs , signum

Alla dessa måste skrivas med parenteser t ex sin(x) och inte bara sin x . I samband med funktioner finns de två operationerna

@ som betyder sammansättning av två funktioner.Exempelvis är (sin@cos)(x) detsamma som sin(cos(x)) @@ som svarar mot upprepad sammansättning.Exempelvis är (sin@@3)(x) detsamma som sin(sin(sin(x))).

4 Symbolmanipulation

Här följer några användbara kommandon:

subs(variabel = värde,uttryck) som används för att räkna ut värdet av ett uttryck för ett visst variabelvärde. expand(uttryck) som används för att utveckla produkter av summor. simplify(uttryck) som används för att förenkla uttryck. combine(uttryck) som används som motsatt operation till expand normal(uttryck) som kan användas för att förenkla exempelvis rationella funktioner så att gemensamma faktorer divideras bort. normal(uttryck,expanded) som fungerar som normal men där täljare och nämnare inte ges faktoriserade.

5 Ekvationslösning

Maple har en uppsättning av kommandon för att lösa olika typer av ekvationer:algebraiska,system av ekvationer,rekurrensekvationer,differentialekvationer m fl.De är uppbyggda kring ordet solve.

solve(ekvation,variabel) för att lösa en ekvation med avseende på en variabel.Variabel går att byta mot funktion. solve(ekvationer,variabler) för att lösa system av ekvationer. fsolve som solve fast med flyttalsaritmetik.Här finns möjlighet att lägga till ytterligare en parameter för att till exempel ange att även komplexa lösningar skall skrivas ut genom complex. isolve söker heltalslösningar. linsolve används för att lösa linjära ekvationssystem.Vi återkommer till detta i avsnittet om linjär algebra-paketet. dsolve används för att lösa differentialekvationer. rsolve används för att lösa rekurrensekvationer.

6 Några algebrafunktioner

6.1 Heltal

Kommandona ithprime(n) ger det n:te primtalet nextprime(p) ger första primtal efter p prevprime(p) ger närmast föregående primtal ifactor(p) faktoriserar p i primfaktorer isprime(p) en sannolikhetsbaserad undersökning om p är ett primtal eller ej. issqr(p) undersöker om p är en jämn kvadrat.Funktionen måste först läsas in genom readlib(issqr). igcd(p1,p2,..,pn) ger största gemensamma delaren till ett godtyckligt antal tal p1,p2,...,pn. ilcm(p1,p2,...,pn) ger minsta gemensamma multipeln av talen. isolve(ekvationer) ger heltalslösningar till ekvationerna)

6.2 Polynom

Några kommandon aktuella i samband med polynom är

factor(uttryck) som bl.a. faktoriserar polynom med rationella koefficienter

gcd(p1,p2,...,pn) som bestämmer största gemensamma delaren till polynomuttrycken p1,...,pn

lcm(p1,...,pn) ger minsta gemensamma multipeln av p1,...,pn

divide(p,q) som undersöker om polynomuttrycket p är delbart med q över de rationella talen

divide(p,q,’s’) sätter dessutom värdet s på kvoten om p är delbart med q.

collect(uttryck,x) betraktar uttrycket som ett polynom i x och samlar ihop termer av samma gradtal.

De flesta av dessa kommandon fungerar även för polynom i flera variabler.Genom tilläggsargument kan man få factor,division osv att operera på polynomringar över andra talkroppar än den rationella.Dessa kroppar måste då vara definierade genom algebraisk utvidgning med rötterna till en polynomekvation.Antag att vi har ett polynom P(x). Kommandot

factor(uttryck,RootOf(P(x))) faktoriserar med koefficienter i den algebraiska utvidgningen av den rationella talkroppen med nollställena till P(x).Har man anledning att använda denna utvidgning flera gånger kan en speciell beteckning införas genom t.ex.

alias(RootOf(K=P(x)) som ger den beteckningen K.

6.3 Heltal modulo m

Många av operationerna ovan kan utföras i räkningar modulo ett heltal p genom att man skriver mod p efter kommandot.Detta skall då skrivas med stor första bokstav.Några exempel

5+4 mod 7; ger svaret 2

Factor(xˆ 2+3*x+3) mod 7; ger svaret (x+6)(x+4) .

Se mera om detta genom ?mod; .Ekvationer kan lösas i räkning modulo ett tal p genom

msolve(ekvationer,p);

6.4 Komplexa tal

Komplexa tal skrivs på formen x+y*I .Följande kommandon beskriver de vanliga operationerna i samband med komplexa tal.

evalc(uttryck); beräknar uttrycket komplext.

evalc(Re(uttryck)); och evalc(Im(uttryck)); beräknar real- respektive imaginärdel av uttrycket.

conjugate(uttryck); konjugerar uttrycket,men för att konjugatet verkligen skall räknas ut måste man skriva evalc(conjugate(uttryck)); abs(uttryck) ger absolutbeloppet av uttrycket. polar(r,v); anger att r och v skall uppfattas som polära koordinater.Tillsammans med evalc ger de ett komplext tal (evalc(polar(r,v));) convert(x+y*I,polar); omvandlar talet x+y*I till polära koordinater (r,v).

7 Iterationer,följder och listor

7.1 Iterationer,loopar

Iterationer kan åstadkommas på bland andra följande sätt.

for namn from uttryck to uttryck do följd av satser od Här går en del variationer att göra.Se exemplen nedan och den hjälp som Maple

ger på for.Det går också att konstruera loopar med while.

7.2 Följder

En följd är här en följd av uttryck separerade med kommatecken, t.ex. 1,4,9,16,25. Den kan i Maple skrivas in genom

s:=1,4,9,16,25; För att skapa följder är seq-funktionen användbar.Samma följd som ovan kan med denna skapas genom

s:=seq(kˆ 2, k=1..5); Generellt kan alltså vissa typer av följder skapas på formen

s:=seq(f(k),k=m..n); Detta är ett enklare (och bättre) sätt att skapa följder om det går än genom loopar.Samma effekt går också att få genom att använda & så här

s:=kˆ 2 & k=1..5; Om man har två följder s1 och s2 kan dessa sättas samman till en följd s genom

s:=s1,s2; vilket används då man skapar följder genom loopar.

7.3 Listor

En lista är en mängd av uttryck med hänsyn tagen till ordningen.De används i Maple exempelvis vid grafisk representation och vid konstruktion av matriser.En följd omvandlas till en lista genom hakparenteser

l:=[s]; Funktioner kan fås att operera på listor genom map.Om till exempel l är listan

[a,b,c] och f är en funktion så ger

map(f,l); listan [f(a),f(b),f(c)].

8 Grafisk representation

Kommandot för 2-dimensionell kurvritning är plot med olika tillvalsmöjligheter.- Väsentligen kan plot användas på tre typer av funktioner.

lista av punkter

vanlig funktion given genom uttryck (eller Maple-procedure)

parameterfunktion

I Maple finns också möjlighet till 3-dimensionell grafik genom kommandot plot3d.Det som då representeras är ytor i rummet.Genom paketet plots ger Maple ytterligare möjligheter till tredimensionell grafik.Bland annat kan man illustrera kurvor i rummet genom kommandot spacecurve.

Vi går igenom kommandona plot och plot3d i undersektioner.Det typiska kommandot är uppbyggt genom

plot(funktion,ev.variabelintervall,ev.tillval)

8.1 Lista av punkter

Vi tänker oss att vi har n st punkter (x1,y1),...,(xn,yn) vilka vi representerar som en lista som vi för enkelhets skull kallar f.

f:=[x1,y1,...,xn,yn];

Kommandot

plot(f);

ger oss en kurva som sammanbinder de olika kurvorna.Kurvan är sammansatt av styckvisa tredjegradspolynom,inte linjer som man kanske kunde väntat.Vill man verkligen att punkterna skall fogas samman med linjestycken skriver man i stället

plot(f,style=LINE);

Kommandot

plot(f,style=POINT);

ger oss punkterna utprickade utan sammanbindande kurva.Förutom dessa två stiltyper finns också en tredje,SPLINE,som dessutom är den förvalda.

8.2 Vanliga funktionsgrafer

Om en funktion är given genom ett uttryck f(x) ger kommandot

plot(f(x));

oss grafen för f .Det x-intervall som Maple då väljer är från -10 till +10 medan y-intervallet anpassas efter funktionen.Vill man ha funktionsgrafen uppritad på ett annat intervall till exempel från x=a till x=b så måste detta anges explicit.Det görs genom

plot(f(x),x=a..b);

Här kan ’x=’ utelämnas om man vill.

Som i föregående avsnitt kan de tre olika typerna av stilar användas,men normalt ser man inte någon större skillnad mellan LINE och SPLINE.

Flera kurvor kan ritas i samma graf.Exempelvis ger

plot({f(x),g(x)},x=a..b); kurvorna y=f(x) och y=g(x) uppritade samtidigt på intervallet [a,b].Vill man ha dem på olika intervall kan man ta till en annan typ av kostruktion.Låt

Gf:=[x,f(x),x=a..b]; Gg:=[x,g(x),x=c..d];

dvs f:s och g:s grafer (där nu g är definierad på intervallet [c,d]).Kommandot

plot({Gf,Gg}); ger oss nu de båda graferna i samma koordinatsystem.

8.3 Kurvor på parameterform

En kurva definierad på parameterform x=x(t),y=y(t)då t genomlöper intervallet [a,b] kan i Maple ritas genom

plot([x(t),y(t),t=a..b]); Har man kurvan given i polära koordinater,med radien r och vinkeln v som funktioner av parametern t,får man kurvan genom

plot([r(t),v(t),t=a..b,coords=polar]);

8.4 Ytor i rummet

Kommandot för att rita en funktionsyta z=f(x,y) över en rektangel, där x varierar mellan a och b medan varierar mellan c och d ,är

plot3d(f(x,y),x=a..b,y=c..d); Som i föregående avsnitt kan ytorna i stället vara givna på parameterform x=x(s,t),y=y(s,t),z=z(s,t), varvid kommandot är av formen

plot3d([x(s,t),y(s,t),z(s,t)],s=a..b,t=c..d); Det är möjligt att också styra hur finmaskigt det rutnät som ritas skall vara genom valet grid=[m,n],där det förvalda är [25,25],på följande sätt

plot3d(f(x,y),x=a..b,y=c..d,grid=[m,n]); Det finns ytterligare tillval som man kan läsa genom att skriva

help(plot3d,‘options‘);

9 Analys-funktioner

Följande funktioner svarar i Maple mot de centrala begreppen i en kurs i analys:

limit diff D int sum taylor dsolve Kopplat till analysbegrepp ger dessa följande.

GRÄNSVÄRDEN

limit(uttryck i x,x=gränspunkt,riktning) beräknar gränsvärdet av uttrycket då x går mot angiven gränspunkt.Denna kan även vara infinity eller -infinity .Riktning kan hoppas över men kan annars vara någon av left,right,real,complex.

DERIVATOR

diff(uttryck,variabel) beräknar derivatan av uttrycket med avseende på variabeln.Går också att använda för uttryck i flera variabler. diff(uttryck,variabel $ n) beräknar den n:te derivatan. D(f) beräknar derivatan av en funktion f till skillnad från diff.

INTEGRALER

int(f,x) innebär integration av ett uttryck eller en procedur f som en obestämd integral medan int(f,x=a..b) innebär en bestämd integral.

SUMMOR

sum(f,k) innebär summering av ett uttryck som en obestämd summa med k som summationsindex medan sum(f,k=m..n) innebär en bestämd summa.Det finns också andra sätt att ange över vilka k summan skall löpa. taylor(uttryck i x,x=punkt,ordning) där punkten är den punkt kring vilken utvecklingen skall ske.Ordning är resttermens ordning och är frivillig uppgift.

DIFFERENTIALEKVATIONER

dsolve(DE,BV,funktioner,val) löser ett system DE av differentialekvationer med begynnelsevillkoren BV med avseende på de funktioner som anges.Valet som är frivilligt gäller på vilken form lösningen skall presenteras.Möjliga val inkluderar:explicit,series,numeric.

Som ett komplement till ovanstående finns ett paket av funktioner, student,som kan användas om man vill ha steg för steg lösningar av ett problem.De blir tillgängliga genom kommandot

with(student);

En fullständig förteckning får man genom?student . Som exempel kan nämnas

changevar intparts

som genomför variabelsubstitution i integraler respektive partiell integration.

10 Linjär algebra

Hanteringen av linjär algebra underlättas om man inkluderar ett antal extrafunktioner genom att först skriva

with(linalg);

Då skrivs först en lista över dessa extrafunktioner ut.I fortsättningen antar vi att dessa funktioner har aktiverats.

10.1 Införande av vektorer och matriser

Matriser och vektorer kan alltid införas genom array men i linjära algebra-paketet finns enklare alternativ som vi nedan beskriver. Ett sätt att införa en n-dimensionell vektor v=(x1,...,xn) är genom

v:=vector([x1,...,xn]); Detta förutsätter att elementen x1,...,xn är givna.Genom

v:=vector(n); skapas en n-dimensionell vector n med tills vidare odefinierad element.Om elementen skall definieras genom genom en funktion f så att yi=f(xi),i=1,...,n,kan det göras genom

v:=vector(n,f); Till exempel ger

f:=x− >xˆ 2; v:=vector(3,f);

vektorn v=(1,4,9). Elementen i en införd vektor v kan tas fram genom v[1],v[2] osv till v[n]. Matriser införs på liknande sätt.Antag att vi vill ha 2x3 matrisen

A = ( \begin{matrix}2 & 3 & 4 \\ 5 & 6 & 7 \end{matrix} )

införd.Här är några sätt att göra detta.

A:=matrix([[2,3,4],[5,6,7]]); eller

A:=matrix(2,3,[2,3,4,5,6,7]); eller om man upptäckt att elementet på plats (i,j) är 3*i+j-2

f:=(i,j)− >3*i+j-2; A:=matrix(2,3,f);

Elementet på plats (i,j) kan nu fås genom

A[i,j]; Det finns också kommandon för att ta fram delmatriser respektive delvektorer

submatrix subvector

och för att utvidga matriser och vektorer augment stack extend

men dem får Du använda helpfunktionen för att läsa om! Enhetsmatrisen In av typ nxn kan skapas genom

In:=array(identity,1..n,1..n);

10.2 Matris- och vektorräkning

Addition och multiplikation av två matriser A och B kan i Maple skrivas

A+B; respektive

A& *B; men för att numeriska värden skall skrivas ut måste man också använda evalm (evaluera som matris) och skriva

evalm(A+B);evalm(A&*B); Detta undviker man genom att i stället använda

add(A,B);multiply(A,B); för addition respektive multiplikation.Här kan multiply användas för produkt med flera matriser.Dessutom fungerar multiply(A,v) då A är en matris och v är en vektor (tolkad som kolonnmatris).Vidare ger

Aˆ n matrisen A^{n} för såväl positiva som negativa n. Andra operationer vars betydelse bör vara uppenbara är

det(A); inverse(A); transpose(A); rank(A);

och för vektorer dotprod(u,v); norm(v); crossprod(u,v);

10.3 Basvektorer

Antag att v1,v2,...,vn är en uppsättning vektorer.Då ger

basis([v1,v2,...,vn]); en bas för linjära höljet av dessa vektorer. Om v1,v2,...,vn är linjärt oberoende ger

Gram-Schmidt([v1,v2,..,vn]); en ortogonal bas för höljet,ej alltid normerad.

10.4 Linjära ekvationssystem

Ett linjärt system Ax = b löses direkt genom

x:=linsolve(A,b); där b kan vara införd som en vektor eller matris.

På samma sätt kan matrisekvationen AX = B lösas genom X:=linsolve(A,B);

Har ett system flera lösningar ges svaret med parametrar.Saknas lösningar är svaret tomt.I det fall då lösningar saknas kan man vara intresserad av lösningar i minsta kvadratmetodens mening.Dessa får man genom

leastsqrs(A,b);

I samband med linjära ekvationssystem kan också

gausselim(A);

vara aktuellt.Då genomför elementära radoperationer på A tills den reducerats till trappstegsform.

10.5 Egenvektorer och egenvärden

I detta sammanhang finns (A kvadratisk,x tal)

charmat(A,x) som ger matrisen x*I-A

charpoly(A,x) som ger karakteristiska polynomet

eigenvals(A) som ger egenvärdena

eigenvects(A) som ger egenvektorerna.

10.6 Funktioner av matriser

Om man stoppar in en matris som argument i någon av Maples elementära funktioner blir resultatet att funktionen verkar elementvis på matrisen.Gör man samma sak med en kvadratisk matris för en polynomfunktion eller uttryck som man själv definierat används matriskalkyl vid uträkningen.För att få kalkylen utförd måste evalm användas.

Är man verkligen intresserad av att en funktion f skall verka separat på varje element i en matris kan det göras genom

map(f,A);

I samband med system av differentialekvationer kan man vara intresserad av de två funktionerna e^{A} och e^{tA}.Dessa får man i Maple genom

exponential(A);

exponential(A,t);

11 Definition av egna funktioner

Hur man kan definiera egna funktioner genom analytiska uttryck framgår av följande exempel.Antag att vi vill införa funktionen f : f(x) = x^{2} + 5sin(x).Det kan i Maple göras genom att sätta samman de två tecknen − och > till en pil så här

f:= x− >xˆ 2+5*sin(x);

Andra typer av funktioner kan i Maple införas genom ’procedurdefinitioner’.Ibland kan det då vara praktiskt att känna till en del ytterligare begrepp i Maple.Vi illustrerar några användbara genom ett exempel.De vi behandlar är följande

proc()

args

nargs

local Exempel.

Antag att vi vill definiera en funktion som av två givna reella tal väljer ut det största.Vi vill kalla denna funktion maximum.Detta kan göras genom

maximum:=proc(a,b) if a>b then a else b fi end;

Nu ger till exempel

maximum(2,3);

svaret 3.I vår funktion är det väsentligt att vi bara har två tal bland vilka ett största skall väljas.Vi vill därför bygga ut funktionen så att den väljer ut det största av ett godtyckligt antal tal.Starten blir då

maximum:=proc()

Vi har nu inga namn på de parametrar som ingår ,svarande mot a och b tidigare.Detta är dock inget problem.I samband med procedurer införs i Maple namnet args för parametrarna och nargs för deras antal.Här ges args som en lista och args[i] ger den i:te parametern.

När vi så går över till att definiera funktionen kommer vi att ha behov av att införa ytterligare parametrar vilka då inte finns med i själva proceduranropet.Dessa parametrar skall ju bara finnas i proceduren och inte påverka värdet på en tidigare definierad parameter som kanske råkar ha samma namn.Metoden för detta är att deklarera procedurens extraparametrar som lokala genom local.Hela definitionen skulle nu kunna se ut så här.

maximum:=proc()

local m,i; m:=args[1]; for i from 2 to nargs do

if args[i]> m then m:=args[i] fi

od; m

end;