Functies van meer variabelen: Visualisaties van functies van twee variabelen
Contourgrafieken in Matlab
Als voorbeeld voor het tekenen van contourgrafieken gebruiken we de functie \[z=f(x,y)=\cos(xy)\]
We tekenen eerst maar eens de grafiek van de functie met enkele niveaulijnen hierin zichtbaar gemaakt via de contour
opdracht. Om een beter beeld te krijgen is een zelfgekozen zichtrichting gespecificeerd met het view
commando en is het oppervlak transparant gemaakt zodat de niveaulijnen goed zichtbaar zijn. Als kleurafbeelding gebruiken we een voorgeprogrammeerd schema waarin een lage \(z\)-waarde in de 'koele' kleur blauw is en een hoge \(z\)-waarde in de 'warme' kleur rood is.
>> x = linspace(-3,3,500);
>> y = linspace(-3,3,500);
>> [x,y] = meshgrid(x,y);
>> z = cos(x.*y);
>> fig = figure('Color','White');
>> ax = fig.CurrentAxes;
>> surf(x,y,z,'EdgeColor','none','FaceAlpha',0.5)
>> colormap(jet)
>> hold on
>> contour3(x,y,z)
>> xlabel('X')
>> ylabel('Y')
>> zlabel('Z')
>> xlim([-3,3])
>> ylim([-3,3])
>> zlim([-1.1,1.1])
>> view(40,45)
Bij een contourgrafiek projecteert men de niveaulijnen op het \(xy\)-vlak. Hieronder is dit op twee manieren gedaan, nameliijk mét en zonder opvulling van de ruimte tussen de niveaulijnen. Het verschil zit hem in de aanroep van contour
respectievelijk contourf
. Vanwege het zicht hebben we het projectievlak \(z=-2\) gekozen.
>> x = linspace(-3,3,500);
>> y = linspace(-3,3,500);
>> [x,y] = meshgrid(x,y);
>> z = cos(x.*y);
>> fig = figure('Color','White');
>> ax1 = subplot(1,2,1);
>> h1 = surf(x,y,z,'EdgeColor','None','Parent',ax1);
>> colormap(jet)
>> shading interp
>> hold on
>> contour_level = -2;
>> [~,properties] = contour(x,y,z);
>> properties.ContourZLevel = contour_level; % de z positie van de contour instellen
>> view(40,30)
>> xlabel('X')
>> ylabel('Y')
>> zlabel('Z')
>> xlim([-3,3])
>> ylim([-3,3])
>> zlim([contour_level,1.1])
>> ax2 = subplot(1,2,2);
>> h2 = surf(x,y,z,'EdgeColor','None','Parent',ax2);
>> colormap(jet)
>> shading interp
>> hold on
>> contour_level2 = -2;
>> [~,properties2] = contourf(x,y,z);
>> properties2.ContourZLevel = contour_level; % de z positie van de contour instellen
>> view(40,30)
>> xlabel('X')
>> ylabel('Y')
>> zlabel('Z')
>> xlim([-3,3])
>> ylim([-3,3])
>> zlim([contour_level2,1.1])
Normaliter zie je de (opgevulde) contourgrafieken als 2-dimensionale figuren.
>> x = linspace(-3,3,500);
>> y = linspace(-3,3,500);
>> [x,y] = meshgrid(x,y);
>> z = cos(x.*y);
>> fig = figure('Color','White');
>> ax1 = subplot(1,2,1);
>> colormap(jet)
>> contour(x,y,z,'Parent',ax1);
>> axis square
>> xlabel('x')
>> ylabel('y')
>> ax2 = subplot(1,2,2);
>> colormap(jet)
>> contourf(x,y,z,'Parent',ax2);
>> xlabel('x')
>> ylabel('y')
>> axis square