CTH/GU STUDIO MVE47-8/9 Matematiska vetenskaper Inledning Funktionstor och nivåkurvor En graf till en funktion i en variabel f : R R är mängden {(,) : = f()}, dvs. en kurva i planet. En graf till en funktion i två variabler f : R R är mängden {(,,z) : z = f(,)}, dvs. en ta i rummet, en s.k. funktionsta. Som eempel tar vi över området 3,. Vi ser funktionstan nedan till vänster. f(,) = ( 3 )sin( ) Ett annat sätt att åskådliggöra en funktion i två variabler f: R R är att rita nivåkurvor, dvs. mängderna {(,) : f(,) = c}, där c är en konstant som anger nivån. Vi ser nivåkurvor till vår funktion ovan till höger. Vi får en slags topografisk karta av funktionen om vi ser funktionstan som ett landskap och då blir nivån helt enkelt höjden över havet. Enfunktionitrevariablerf: R 3 Rkanviinteritaengraftill.Detskullevaraentredimensionellt objekt i ett frdimensionellt rum. Motsvarigheten till nivåkurvor blir nivåtor, dvs. mängderna {(,,z) : f(,,z) = c} där c konstant. Dessa kan vi däremot rita upp. Låt oss som eempel ta funktionen f(,,z) = + + z i tre variabler. Nivåtorna blir då sfärer {(,,z) : + +z = c} med centrum i origo.
Funktionstor i R 3 Vi ser på funktionstan till funktionen från inledningen, dvs. f : R R där över området 3,. f(,) = ( 3 )sin( ) Resultatet får vi med kommandot surf, vilket är motsvarigheten till plot då vi skall rita tor. >> f=@(,)(/3*.^-).*sin(-.*); >> =linspace(-,3,3); =linspace(-,,3); >> [X,Y]=meshgrid(,); >> Z=f(X,Y); >> surf(x,y,z) % eller surf(,,z) >> grid on, bo on >> label( ), label( ), zlabel( z = f(,) ).5 z=f(,).5.5 3 Funktionen meshgrid får som indata två vektorer och, med - och -värden, och ger två matriser X och Y som utdata. Dessa matriser är uppbggda så att vi kan göra en matris Z med alla f(,)-värden på en gång genom att skriva av vår matematiska formel för f(, ) bara vi använder komponentvisa operationer och samtidigt ersätter med X och med Y. Ritar vi en graf av en funktion i en variabel tar vi kanske några hundratal -värden. När vi ritar en funktionsta tar vi istället några tiotal - respektive -värden. Ibland när man ritar en funktionsta med surf(x,y,z) kanske man vill ha den lite genomskinlig och det kan man få med surf(x,y,z, FaceAlpha,.7). Parametern FaceAlpha ges ett värde mellan och, där är helt transparent och är helt solid.
Vill vi ha en enfärgad tan, t.e. blå, och tan skall vara nästan helt genomskinlig så ger vi kommandot surf(x,y,z, FaceColor, b, FaceAlpha,.). Detta kan vara bra att använda när vi skall rita tangentplan i nästa studioövning. Uppgift. Rita funktionstan till funktionen f : R R där över området,. Hur fungerar det? f(,) = e ( + ) Den ta vi skall rita består avalla punkter (,,f(,)),där min ma och min ma. Då vi skall rita tan med surf krävs att vi bildar en m n-matris Z med elementen z ij = f( j, i ) där min = < < < n = ma och min = < < < m = ma. Lägg märke till ordningen på indeen, element z ij skall innehålla funktionsvärdet för = j och = i. Stigande -värden längs rader i Z, dvs. stigande kolonn-inde, och stigande -värden längs kolonner i Z, dvs. stigande rad-inde. Vi går igenom några alternativa lösningar och vi tänker oss att vi i Matlab redan skapat en funktion f och koordinat-vektorer och med n respektive n element. Alternativ. Vi bildar matrisen Z i Matlab med Z=zeros(m,n); for i=:m for j=:n Z(i,j)=f((j),(i)); Alternativ. I första alternativet fick hålla reda på var det skulle vara i respektive j. Med funktionen meshgrid skapas två matriser X och Y så att X(i,j) har värdet (j) och Y(i,j) har värdet (i), dvs. indeproblemet är borta. [X,Y]=meshgrid(,); Z=zeros(m,n); for i=:m for j=:n Z(i,j)=f(X(i,j),Y(i,j)); Alternativ 3. Den allra smidigaste lösningen får vi då vi låter de nästlade repetitionssatserna i tidigare alternativ ersättas av komponentvisa operationer. Dvs. vår funktion f måste använda komponetvisa operationer. Vi slipper även initieringen av Z. [X,Y]=meshgrid(,); Z=f(X,Y); 3
Polära koordinater Ibland behöver man bta variabler för att på ett lättare eller bättre sätt behandla ett problem. Ett eempel på variabel- eller koordinatbte är polära koordinater { = rcos(ϕ) där (,) (,) samt r > och ϕ < π. = rsin(ϕ).5.5 ϕ 6 5 4 3.5 r Vill vi t.e. rita grafen av f(,) = över området +, dvs. en halvsfär, och använder rektangulära koordinater får vi den inte alltför sngga figuren nedan till vänster men använder vi polära koordinater får vi den lite snggare till höger. Rektangulära koordinater Polära koordinater >> subplot(,,) % Rektangulära koordinater >> =linspace(-,,3); =linspace(-,,3); >> [X,Y]=meshgrid(,); >> U=-X.^-Y.^; >> U(find(U<))=; % Sätter negativa värden till noll, >> Z=sqrt(U); % så att vi kan ta roten ur utan problem >> surf(x,y,z) >> subplot(,,) % Polära koordinater >> r=linspace(,,3); t=linspace(,*pi,3); >> [R,T]=meshgrid(r,t); >> X=R.*cos(T); Y=R.*sin(T); >> Z=sqrt(-R.^); % Vi utnttjar att X.^+Y.^=R.^ >> surf(x,y,z) 4
Uppgift. Rita upp de tor som är grafer till nedanståe funktioner med surf: (a). f(,) = +, (,) [,] [3,4] (b). f(,) =, (,) [,] [,] (c). f(,) = ( ) /, (,) [,3] [,] (d). f(,) = (9 ) /, (,) {(,) : + 9} (Använd polära koordinater) (e). f(,) = e +, (,) {(,) : + 4} (Använd polära koordinater) Uppgift 3. Återskapa figur.4 i Adams. Dvs. rita grafen för funktionen f(,) = 6/(+ + ) över ett lämpligt område. Tänk på att använda komponentvisa operationer. 3 Nivåkurvor i R Som eempel ser vi på funktionen vars nivåkurvor vi visade en bild av i inledningen över området 3,. Vi får bilden nedan med f(,) = ( 3 )sin( ) >> =linspace(-,3,4); =linspace(-,,4); >> f=@(,)(/3*.^-).*sin(-.*); >> [X,Y]=meshgrid(,); >> Z=f(X,Y); >> contour(x,y,z,3) % eller contour(,,z,3) Den lite flligare bilden nedan till höger fås med contourf..5.5 3 3 5
När man ritar nivåkurvor med contour(x,y,z) får man som standard nivåer jämnt fördelade i spannet av värdena i Z, vill vi ha ett annat antal använder vi contour(x,y,z,nl), där nl är antalet önskade nivåer. Om vi istället vill ange eakt vilka nivåer som skall ritas upp ger vi dem i en vektor lvec och använder contour(x,y,z,lvec). I nästa studioövning vill vi rita upp ast nivån där funktionen är noll, dvs. rita noll-nivåkurvor. detta gör vi med contour(x,y,z,[ ]). Fundera på varför vi måste ge två gånger. Uppgift 4. Rita nivåkurvor till funktionerna i uppgift. Gå in och redigera cellerna så att ni samtidigt ser både funktionstan och nivåkurvorna. Använd subplot. Uppgift 5. Betrakta funktionen f(,) = 3 +3 5+ 5 Rita tan över ett lämpligt område samt skapa en konturplot. Rita några enstaka nivåkurvor. 4 Nivåtor i R 3 För att rita nivåtor använder vi isosurface. Vi tar eemplet från inledningen, dvs. funktionen f(,,z) = + +z i tre variabler. Nivåtorna blir då sfärer {(,,z) : + +z = c} och vi ritar upp för c =. >> =linspace(-,,3); =linspace(-,,3); z=linspace(-,,3); >> [X,Y,Z]=meshgrid(,,z); >> F=X.^+Y.^+Z.^; c=; >> p=patch(isosurface(x,y,z,f,c)); >> set(p, facecolor, r, edgecolor, none ); >> ais equal, ais([- - - ]), grid on 6