Partial Derivatives, Gradients, and Plotting Level CurvesHere we will explore how to compute partial derivatives and gradients in Maple (and thus find linearizations of functions). We will also look at plotting level curves (contours), level surfaces, gradient vectors, tangent planes and normal lines.restart;
with(plots):
with(VectorCalculus):Level Curves (i.e. Contours) and Level SurfacesConsider a function LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEiekYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSJmRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNistSSVtc3ViR0YkNiUtRiw2JVEieEYnRi9GMi1GIzYlLUkjbW5HRiQ2JFEiMUYnRjlGL0YyLyUvc3Vic2NyaXB0c2hpZnRHUSIwRictRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTlEsMC4zMzMzMzMzZW1GJy1GWDYlRlotRiM2JS1Gam42JFEiMkYnRjlGL0YyRl1vRmBvLUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmVvLUY2Ni1RIi5GJ0Y5RjtGPkZARkJGREZGRkhGZG9GZHBGYG8tRlg2JUZaLUYjNiUtRiw2JVEibkYnRi9GMkYvRjJGXW9GOUY5Rjk=. For any constant LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiY0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= we can consider the collection of points satisfying the equation: LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEiY0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSJmRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNistSSVtc3ViR0YkNiUtRiw2JVEieEYnRi9GMi1GIzYkLUkjbW5HRiQ2JFEiMUYnRjlGOS8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkgvRktRJjAuMGVtRicvRk5RLDAuMzMzMzMzM2VtRictRlg2JUZaLUYjNiQtRmpuNiRRIjJGJ0Y5RjlGXW9GYG8tRjY2LVEjLi5GJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GZW8tRjY2LVEiLkYnRjlGO0Y+RkBGQkZERkZGSEZkb0ZkcEZgby1GWDYlRlotRiM2JC1GLDYlUSJuRidGL0YyRjlGXW9GOUY5Rjk=. This collection of points is generally called a level surface. When LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEibkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JI21uR0YkNiRRIjNGJ0Y5Rjk= we generically have a (true 2-dimensional) surface. For example: The level surface of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSI9RidGQUZDL0ZHRkVGSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl1vLUklbXN1cEdGJDYlRjotRiM2JS1JI21uR0YkNiRRIjJGJ0ZBRi9GMi8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRj42LVEiK0YnRkFGQ0Zbb0ZIRkpGTEZORlAvRlNRLDAuMjIyMjIyMmVtRicvRlZGX3AtRmBvNiVGWEZib0Zob0ZbcC1GYG82JUZlbkZib0Zob0ZB at level LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEiY0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JI21uR0YkNiRRIjFGJ0Y5Rjk= is the unit sphere (the sphere of radius 1 centered at the origin). When LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEibkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JI21uR0YkNiRRIjJGJ0Y5Rjk= we generically have a curve. We call these level curves or contours. For example: The level curves of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBLUY+Ni1RIj1GJ0ZBRkMvRkdGRUZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGam5GWC1GPjYtUSgmbWludXM7RidGQUZDRmhuRkhGSkZMRk5GUC9GU1EsMC4yMjIyMjIyZW1GJy9GVkZgby1JJW1zdXBHRiQ2JUY6LUYjNiUtSSNtbkdGJDYkUSIyRidGQUYvRjIvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRkE= are parabolas: LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEieUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJW1zdXBHRiQ2JS1GLDYlUSJ4RidGL0YyLUYjNiUtSSNtbkdGJDYkUSIyRidGOUYvRjIvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GXG8tRiw2JVEiY0YnRi9GMkY5. A graph of (some of) the level curves of a function LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBRkE= is called a contour plot (it looks like a topographical map). Example: Let's plot of the surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEiekYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJm1mcmFjR0YkNigtSSVtc3VwR0YkNiUtRiw2JVEieEYnRi9GMi1GIzYlLUkjbW5HRiQ2JFEiMkYnRjlGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GIzYlLUZlbjYkUSI0RidGOUYvRjIvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmVvLyUpYmV2ZWxsZWRHRj0tRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZecC1GUDYoLUZTNiUtRiw2JVEieUYnRi9GMkZYRmhuLUYjNiUtRmVuNiRRIjlGJ0Y5Ri9GMkZgb0Zjb0Zmb0Zob0Y5 and several horizontal planes. The curves of intersection are level curves (or contours) at levels LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYvLUkjbWlHRiQ2JVEiekYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GUy1JI21uR0YkNiRRIjFGJ0Y5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkgvRktRJjAuMGVtRicvRk5RLDAuMzMzMzMzM2VtRidGTy1JJm1mcmFjR0YkNihGVS1GIzYlLUZWNiRRIjJGJ0Y5Ri9GMi8lLmxpbmV0aGlja25lc3NHRlgvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZ28vJSliZXZlbGxlZEdGPUZZLUZWNiRRIjBGJ0Y5RllGW29GWUY5 and 1.mySurface := implicitplot3d(z=(1/4)*x^2-(1/9)*y^2, x=-3..3, y=-3..3, z=-1.1..1.1, numpoints=2000, color=grey):
myLevels := seq(plot3d(-1+(1/2)*i, x=-3..3, y=-3..3, transparency=0.35), i=0..4):
display({mySurface,myLevels},orientation=[45,45],viewpoint=circleleft);The "contourplot" command plots level curves of a given function.contourplot((1/4)*x^2-(1/9)*y^2, x=-3..3, y=-3..3, contours=[-1,-1/2,0,1/2,1]);The "contourplot3d" function plots surfaces marked by contours. Notice with the current plot options the surface is colored in a different color between each consecutive pair of contours.contourplot3d((1/4)*x^2-(1/9)*y^2, x=-3..3, y=-3..3, contours=[-1,-1/2,0,1/2,1], filledregions=true, axes=boxed, viewpoint=circleleft);Example: Consider LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEiZ0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBLUY+Ni1RIj1GJ0ZBRkMvRkdGRUZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGam4tSSZtZnJhY0dGJDYoLUYjNiYtRiw2JVEkc2luRicvRjBGRUZBLUY2NiQtRiM2Jy1JJW1zdXBHRiQ2JUY6LUYjNiUtSSNtbkdGJDYkUSIyRidGQUYvRjIvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY+Ni1RIitGJ0ZBRkNGaG5GSEZKRkxGTkZQL0ZTUSwwLjIyMjIyMjJlbUYnL0ZWRmlwLUZdbzYoLUZqbzYlRlhGXHBGYnAtRiM2JS1GX3A2JFEiNEYnRkFGL0YyLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZpcS8lKWJldmVsbGVkR0ZFRi9GMkZBRi9GMi1GIzYnRmlvRmVwRl1xRi9GMkZkcUZncUZqcUZcci1GLDYjUSFGJ0ZB. Let's use "contourplot3d" to plot LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEiZ0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBLUYsNiNRIUYnRkE= over the rectangular region LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbW9HRiQ2LVEqJnVtaW51czA7RicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y0LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjQvJShsYXJnZW9wR0Y0LyUubW92YWJsZWxpbWl0c0dGNC8lJ2FjY2VudEdGNC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRkMtSSNtaUdGJDYlUScmIzk2MDtGJy8lJ2l0YWxpY0dGNEYvLUYsNi1RJiZsZXE7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRlAtRkc2JVEieEYnL0ZLUSV0cnVlRicvRjBRJ2l0YWxpY0YnRkxGRkYv and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbW9HRiQ2LVEqJnVtaW51czA7RicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y0LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjQvJShsYXJnZW9wR0Y0LyUubW92YWJsZWxpbWl0c0dGNC8lJ2FjY2VudEdGNC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRkMtSSNtaUdGJDYlUScmIzk2MDtGJy8lJ2l0YWxpY0dGNEYvLUYsNi1RJiZsZXE7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRlAtRkc2JVEieUYnL0ZLUSV0cnVlRicvRjBRJ2l0YWxpY0YnRkxGRkYv.
g := (x,y) -> sin(x^2+y^2/4)/(x^2+y^2):
'g(x,y)' = g(x,y);
contourplot3d(g(x,y), x=-Pi..Pi, y=-Pi..Pi, contours=5, filledregions=true, coloring=[blue,green], numpoints=2000,viewpoint=circleleft);Example: A Hyperbolic Paraboloid. LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBLUY+Ni1RIj1GJ0ZBRkMvRkdGRUZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGam4tSSVtc3VwR0YkNiVGOi1GIzYlLUkjbW5HRiQ2JFEiMkYnRkFGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GPjYtUSgmbWludXM7RidGQUZDRmhuRkhGSkZMRk5GUC9GU1EsMC4yMjIyMjIyZW1GJy9GVkZccC1GXW82JUZYRl9vRmVvRkE=f := (x,y) -> x^2-y^2:
'f(x,y)' = f(x,y);
plot3d(f(x,y),x=-2..2,y=-2..2,axes=boxed,viewpoint=circleleft);Let's plot this again, but now with a domain equal to LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkmbWZyYWNHRiQ2KC1JJW1zdXBHRiQ2JS1JI21pR0YkNiVRInhGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictRiM2JS1JI21uR0YkNiRRIjJGJy9GOVEnbm9ybWFsRidGNUY4LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GIzYlLUYvNiUtRj42JFEiM0YnRkFGO0ZDRjVGOC8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGUi8lKWJldmVsbGVkR1EmZmFsc2VGJy1JI21vR0YkNi1RIitGJ0ZBLyUmZmVuY2VHRlcvJSpzZXBhcmF0b3JHRlcvJSlzdHJldGNoeUdGVy8lKnN5bW1ldHJpY0dGVy8lKGxhcmdlb3BHRlcvJS5tb3ZhYmxlbGltaXRzR0ZXLyUnYWNjZW50R0ZXLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGZm8tRiw2KC1GLzYlLUYyNiVRInlGJ0Y1RjhGO0ZDLUYjNiUtRi82JUY9RjtGQ0Y1RjhGTUZQRlNGVS1GWTYtUSYmbGVxO0YnRkFGZm5GaG5Gam5GXG9GXm9GYG9GYm8vRmVvUSwwLjI3Nzc3NzhlbUYnL0Zob0ZocC1GPjYkRk9GQUZB (the inside of an ellipse).plot3d(f(x,y),x=-3..3,y=-2*sqrt(1-x^2/3^2)..2*sqrt(1-x^2/3^2),title="A Pringle Chip",viewpoint=circleleft,color=tan);Next, let's draw some contours. We can specify specific contours (for example, drawing contours where z = -3, z = 0, z = 1) or just have Maple draw a bunch of contours like the second example (where Maple is told to draw 15 contours).contourplot(f(x,y),x=-2..2,y=-2..2,contours=[-3,0,1]);
contourplot(f(x,y),x=-2..2,y=-2..2,contours=15);"contourplot3d" will draw the contours each at their proper z-level, so we get a 3D plot. "filledregions=true" make Maple fill in the surface in between the level curves.contourplot3d(f(x,y),x=-2..2,y=-2..2,filledregions=true,contours=15,axes=boxed,viewpoint=circleleft);Example: Consider the function LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYsLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBLUY+Ni1RIj1GJ0ZBRkMvRkdGRUZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGam5GWC1GPjYtUScmc2RvdDtGJ0ZBRkNGaG5GSEZKRkxGTkZQRlIvRlZGVC1JJW1zdXBHRiQ2JS1GPjYtUS8mRXhwb25lbnRpYWxFO0YnRkEvRkRRJnVuc2V0RicvRkdGZ28vRklGZ28vRktGZ28vRk1GZ28vRk9GZ28vRlFGZ29GUkZfby1GIzYnLUY+Ni1RKiZ1bWludXMwO0YnRkFGQ0ZobkZIRkpGTEZORlAvRlNRLDAuMjIyMjIyMmVtRicvRlZGZHAtRmFvNiVGOi1GIzYlLUkjbW5HRiQ2JFEiMkYnRkFGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GYW82JUZYLUYjNiUtRltxNiRRIjRGJ0ZBRi9GMkZecUYvRjJGXnEtRj42LVEiK0YnRkFGQ0ZobkZIRkpGTEZORlBGY3BGZXAtRiw2JVEkc2luRicvRjBGRUZBLUY2NiQtRiM2JEY6RkFGQUZB. Let's use plot3d, contourplot, and contourplot3d generate three different plots of this surface. f := (x,y) -> y*exp(-x^2*y^4)+sin(x):
'f(x,y)' = f(x,y);
plot3d(f(x,y),x=-2..2,y=-2..2,axes=framed,color=green,orientation=[35,80,0],viewpoint=circleleft);
contourplot(f(x,y),x=-2..2,y=-2..2,contours=5);
contourplot3d(f(x,y),x=-2..2,y=-2..2,filledregions=true,coloring=[blue,red],axes=boxed,contours=[-2,-1,0,1,2],orientation=[35,80,0],viewpoint=circleleft);Example: Consider the function LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSI9RidGQUZDL0ZHRkVGSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl1vLUklbXN1cEdGJDYlRjotRiM2JS1JI21uR0YkNiRRIjJGJ0ZBRi9GMi8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRj42LVEiK0YnRkFGQ0Zbb0ZIRkpGTEZORlAvRlNRLDAuMjIyMjIyMmVtRicvRlZGX3AtSSZtZnJhY0dGJDYoLUZgbzYlRlhGYm9GaG8tRiM2JS1GZW82JFEiNEYnRkFGL0YyLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZgcS8lKWJldmVsbGVkR0ZFRltwLUZicDYoLUZgbzYlRmVuRmJvRmhvLUYjNiUtRmVvNiRRIjlGJ0ZBRi9GMkZbcUZecUZhcUZjcUZB. The graph of this function would be a hyper-surface in 4-dimensional space. However, if we set LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQUZB equal to a constant, (generically) we get a surface in 3-dimensional space. Such a surface is a level surface of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic=. First, let's define LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= and print off the equations defining level surfaces at levels 9, 4, and 1.f := (x,y,z) -> x^2+y^2/4+z^2/9:
'f(x,y,z)' = f(x,y,z);
f(x,y,z)=9;
f(x,y,z)=4;
f(x,y,z)=1;Let's plot these surfaces together. Since these are nested ellipsoids, I'll make the outer ones somewhat transparent so we can "see inside".A := implicitplot3d(f(x,y,z)=9,x=-3..3,y=-6..6,z=-9..9,color=black,transparency=0.9):
B := implicitplot3d(f(x,y,z)=4,x=-2..2,y=-4..4,z=-6..6,color=green,transparency=0.8):
C := implicitplot3d(f(x,y,z)=1,x=-1..1,y=-2..2,z=-3..3,color=red,transparency=0):
display({A,B,C},scaling=constrained,axes=boxed,viewpoint=circleleft);The following code animates is sequence of plots of level surfaces: LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSI9RidGQUZDL0ZHRkVGSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl1vLUYsNiVRImNGJ0YvRjJGQQ== where LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbW5HRiQ2JFEiMEYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RJiZsZXE7RidGLy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGOC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZHLUkjbWlHRiQ2JVEiY0YnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJ0YyLUYsNiRRIjlGJ0YvRi8=. I have also set the color so it changes with LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiY0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic=.N := 50:
level := i -> c=evalf(9*i/N,3):
for i from 1 to N do
levelPlot[i] := implicitplot3d(f(x,y,z)=9*i/N,x=-sqrt(9*i/N)..sqrt(9*i/N),y=-2*sqrt(9*i/N)..2*sqrt(9*i/N),z=-3*sqrt(9*i/N)..3*sqrt(9*i/N),color=RGB(1-i/N,1-i/N,i/N),numpoints=1000,title=level(i)):
end do:
display(seq(levelPlot[i],i=1..N),insequence=true,scaling=constrained,axes=boxed);Partial Derivatives and GradientsPartial derivatives? Just differentiate. To compute the gradient of a function use: "Gradient(f(variables),[list of variables]);".Example:f := (x,y) -> x^2*y^3+sin(x+5*y)+x*exp(x^2*y^5):
'f(x,y)' = f(x,y);First partials...diff(f(x,y),x);
diff(f(x,y),y);Second partials...diff(f(x,y),x,x);
diff(f(x,y),x,y)=diff(f(x,y),y,x);
diff(f(x,y),y,y);A random fifth order partial: LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkmbWZyYWNHRiQ2KC1GIzYlLUklbXN1cEdGJDYlLUkjbW9HRiQ2LVErJlBhcnRpYWxEO0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPC8lKXN0cmV0Y2h5R0Y8LyUqc3ltbWV0cmljR0Y8LyUobGFyZ2VvcEdGPC8lLm1vdmFibGVsaW1pdHNHRjwvJSdhY2NlbnRHRjwvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZLLUYjNiUtSSNtbkdGJDYkUSI1RidGNy8lJ2l0YWxpY0dRJXRydWVGJy9GOFEnaXRhbGljRicvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUkjbWlHRiQ2JVEiZkYnRlRGV0Y3LUYjNi9GMy1GZ242JVEieUYnRlRGVy1GNDYtUSJ+RidGN0Y6Rj1GP0ZBRkNGRUZHRklGTEYzLUZnbjYlUSJ4RidGVEZXRl9vRjMtRjE2JUZcby1GIzYlLUZRNiRRIjJGJ0Y3RlRGV0ZZRl9vRjNGYm9GVEZXLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZhcC8lKWJldmVsbGVkR0Y8LUY0Ni1RIj1GJ0Y3RjpGPUY/RkFGQ0ZFRkcvRkpRLDAuMjc3Nzc3OGVtRicvRk1GanAtSSVtc3ViR0YkNiVGZm4tRiM2JS1GZ242JVEmeHl5eHlGJ0ZURldGVEZXLyUvc3Vic2NyaXB0c2hpZnRHRmVuRjc=diff(f(x,y),x,y,y,x,y);10 partials with respect to LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEieEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= followed by 5 with respect to y then x once more...diff(f(x,y),x$10,y$5,x);Example: Let's linearize LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYsLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBLUY+Ni1RIj1GJ0ZBRkMvRkdGRUZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGam4tSSVtc3VwR0YkNiVGOi1GIzYlLUkjbW5HRiQ2JFEiMkYnRkFGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZYLUY+Ni1RIitGJ0ZBRkNGaG5GSEZKRkxGTkZQL0ZTUSwwLjIyMjIyMjJlbUYnL0ZWRlxwLUZdbzYlRlgtRiM2JS1GYm82JFEiM0YnRkFGL0YyRmVvLUY+Ni1RKCZtaW51cztGJ0ZBRkNGaG5GSEZKRkxGTkZQRltwRl1wRmJwRkE= at (-2,5). To do this we need the function's value at (-2,5) along with the first partials evaluated at (-2,5).f := (x,y) -> x^2*y+y^3-3:
'f(x,y)' = f(x,y);
'f(-2,5)' = f(-2,5);
f_x(-2,5)=subs(y=5,subs(x=-2,diff(f(x,y),x)));
f_y(-2,5)=subs(y=5,subs(x=-2,diff(f(x,y),y)));
L := (x,y) -> 142 + (-20)*(x+2) + (79)*(y-5):
'L(x,y)' = L(x,y);The linearization should be a decent approximation of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= near LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkobWZlbmNlZEdGJDYkLUYjNictSSNtb0dGJDYtUSomdW1pbnVzMDtGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjkvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGSC1JI21uR0YkNiRRIjJGJ0Y0LUYxNi1RIixGJ0Y0RjcvRjtRJXRydWVGJ0Y8Rj5GQEZCRkQvRkdRJjAuMGVtRicvRkpRLDAuMzMzMzMzM2VtRictRkw2JFEiNUYnRjRGNEY0RjQ=, so LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic=(-1.9,5.3) should be approxiamately LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEiTEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYnLUkjbW9HRiQ2LVEqJnVtaW51czA7RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZCLyUpc3RyZXRjaHlHRkIvJSpzeW1tZXRyaWNHRkIvJShsYXJnZW9wR0ZCLyUubW92YWJsZWxpbWl0c0dGQi8lJ2FjY2VudEdGQi8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRlEtSSNtbkdGJDYkUSQxLjlGJ0Y+LUY7Ni1RIixGJ0Y+RkAvRkRGMUZFRkdGSUZLRk0vRlBRJjAuMGVtRicvRlNRLDAuMzMzMzMzM2VtRictRlU2JFEkNS4zRidGPkY+Rj4tRiw2I1EhRidGPg==.'f(-1.9,5.3)' = f(-1.9,5.3);
'L(-1.9,5.3)' = L(-1.9,5.3);Close but not exactly right. But we should expect the f(x,y) and L(x,y) don't match since f(x,y) isn't linear! Let's plot the surface and its linearization together.fPlot := plot3d(f(x,y),x=-16..12,y=-9..19,color=blue):
LPlot := plot3d(L(x,y),x=-16..12,y=-9..19,color=red):
display({fPlot,LPlot},orientation=[-26,52],viewpoint=circleleft);Now let's compute the gradient of our function...gradf := Gradient(f(x,y),[x,y]);Let's plug in the point (1,1/2).pt := <1,1/2>;
vec := evalVF(gradf,pt);The directional derivative of f in the direction LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2JVEidUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JKG1mZW5jZWRHRiQ2Ji1GIzYuLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZYLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRIjFGJ0Y5LUZobjYkUSIyRidGOS8lLmxpbmV0aGlja25lc3NHRmpuLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmJvLyUpYmV2ZWxsZWRHRj0tRjY2LVExJkludmlzaWJsZVRpbWVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTkZbcC1JJm1zcXJ0R0YkNiNGW28tRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqby9GTlEsMC4zMzMzMzMzZW1GJ0ZaRmdvRl1wLyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUpcmVhZG9ubHlHRjEvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJ0Y5RjkvJSVvcGVuR1EnJmxhbmc7RicvJSZjbG9zZUdRJyZyYW5nO0YnRmZwRmlwRltxRjk= at the point (1,1/2) is...vec . <-1/sqrt(2), 1/sqrt(2)>;Alternatively, we could use the VectorCalculus package function "DirectionalDiff". The "subs" command substitutes in the appropriate values for x and y.subs([x=1,y=1/2],DirectionalDiff(f(x,y),<-1/sqrt(2),1/sqrt(2)>,[x,y]));Here is the contour plot and the gradient vector plotted together. I'll use the option "scaling=constrained" so the graph isn't streched. If the graph is skewed, then the gradient won't look perpendicular to the level curve. Notice also the contourplot option "contours=40". We can specify how many level curves to plot. We could also specify "contours=[0,1,2,3]". conPlot := contourplot(f(x,y),x=-2.5..2.5,y=-2.5..2.5,contours=40):
vecPlot := arrow(pt,vec,shape=harpoon,color=magenta):
display({conPlot,vecPlot},scaling=constrained);Let's consider our surface z = f(x,y) as the level surface z - f(x,y) = 0.F := (x,y,z) -> z-f(x,y):
'F(x,y,z)' = F(x,y,z);
implicitplot3d(F(x,y,z)=0,x=-2.5..2.5,y=-2.5..2.5,z=-35..25,axes=boxed,viewpoint=circleleft);The gradient of F(x,y,z) evaluated at a point (a,b,c) on the level surface gives a normal vector for the plane tangent to F at that point.gradF := Gradient(F(x,y,z),[x,y,z]);
z=f(0,-1);The point (0,-1,-4) is on the level surface since...F(0,-1,-4)=0;We'll find the gradient vector at that point...pt := <0,-1,-4>;
vec := evalVF(gradF,pt);Now let's normalize our vector (so it doesn't stick out so far) and plot the surface,its tangent plane and gradient vector all together.n := Normalize(vec);
tPlaneEqn := vec.(<x,y,z> - pt) = 0;
plotP := implicitplot3d(tPlaneEqn,x=-2.5..2.5,y=-1.5..0.75,z=-5..0,color=blue):
plotF := implicitplot3d(F(x,y,z)=0,x=-2.5..2.5,y=-1.5..0.75,z=-5..0,color=red):
plotV := arrow(pt,n,shape=harpoon,color=green,thickness=3):
display({plotP,plotF,plotV},scaling=constrained,axes=boxed,orientation=[-90,5,-90],viewpoint=circleleft);Example: Define a function LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYsLUkjbWlHRiQ2JlEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUnb3BhcXVlR0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiZRInhGJ0YvRjJGNC1JI21vR0YkNi1RIixGJy9GNVEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGRy8lKnN5bW1ldHJpY0dGRy8lKGxhcmdlb3BHRkcvJS5tb3ZhYmxlbGltaXRzR0ZHLyUnYWNjZW50R0ZHLyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRictRiw2JlEieUYnRi9GMkY0Rj8tRiw2JlEiekYnRi9GMkY0RkNGQy1GQDYtUSI9RidGQ0ZFL0ZJRkdGSkZMRk5GUEZSL0ZVUSwwLjI3Nzc3NzhlbUYnL0ZYRl9vLUkmbWZyYWNHRiQ2KC1JJW1zdXBHRiQ2JUY8LUYjNiQtSSNtbkdGJDYlUSIyRidGMkZDRkMvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUYjNiQtRmpvNiVRIjRGJ0YyRkNGQy8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGanAvJSliZXZlbGxlZEdGRy1GQDYtUSIrRidGQ0ZFRl1vRkpGTEZORlBGUi9GVVEsMC4yMjIyMjIyZW1GJy9GWEZjcS1GYm82KC1GZW82JUZaRmdvRl1wLUYjNiQtRmpvNiVRIjlGJ0YyRkNGQ0ZlcEZocEZbcUZdcUZfcS1GYm82KC1GZW82JUZnbkZnb0ZdcEZgcEZlcEZocEZbcUZdcS1GLDYjUSFGJ0ZD. Let's consider the level surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSI9RidGQUZDL0ZHRkVGSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl1vLUkjbW5HRiQ2JFEiMUYnRkFGQQ==.F := (x,y,z) -> x^2/4+y^2/9+z^2/4:
'F(x,y,z)' = F(x,y,z);
F(x,y,z)=1;First, we'll verify that the point LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkobWZlbmNlZEdGJDYkLUYjNiktSSZtc3FydEdGJDYjLUYjNiQtSSNtbkdGJDYkUSIyRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnRjktSSNtb0dGJDYtUSIsRidGOS8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdRJXRydWVGJy8lKXN0cmV0Y2h5R0ZCLyUqc3ltbWV0cmljR0ZCLyUobGFyZ2VvcEdGQi8lLm1vdmFibGVsaW1pdHNHRkIvJSdhY2NlbnRHRkIvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GNjYkUSIwRidGOUY8LUY9Ni1RKiZ1bWludXMwO0YnRjlGQC9GREZCRkZGSEZKRkxGTi9GUVEsMC4yMjIyMjIyZW1GJy9GVEZobkYwRjlGOUY5 is on the level surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JlEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUnb3BhcXVlR0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiZRInhGJ0YvRjJGNC1JI21vR0YkNi1RIixGJy9GNVEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGRy8lKnN5bW1ldHJpY0dGRy8lKGxhcmdlb3BHRkcvJS5tb3ZhYmxlbGltaXRzR0ZHLyUnYWNjZW50R0ZHLyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRictRiw2JlEieUYnRi9GMkY0Rj8tRiw2JlEiekYnRi9GMkY0RkNGQy1GQDYtUSI9RidGQ0ZFL0ZJRkdGSkZMRk5GUEZSL0ZVUSwwLjI3Nzc3NzhlbUYnL0ZYRl9vLUkjbW5HRiQ2JVEiMUYnRjJGQ0ZD. Then we'll use the gradient operator to find a normal vector for the level surface at this point (we'll call this vector LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2J1EibkYnLyUlYm9sZEdRJXRydWVGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSxtYXRodmFyaWFudEdRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRjdGL0Y1Rjg=). F(sqrt(2),0,-sqrt(2))=1;
n := evalVF(Gradient(F(x,y,z),[x,y,z]),<sqrt(2),0,-sqrt(2)>);Finally, let's graph the level surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JlEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUnb3BhcXVlR0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiZRInhGJ0YvRjJGNC1JI21vR0YkNi1RIixGJy9GNVEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGRy8lKnN5bW1ldHJpY0dGRy8lKGxhcmdlb3BHRkcvJS5tb3ZhYmxlbGltaXRzR0ZHLyUnYWNjZW50R0ZHLyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRictRiw2JlEieUYnRi9GMkY0Rj8tRiw2JlEiekYnRi9GMkY0RkNGQy1GQDYtUSI9RidGQ0ZFL0ZJRkdGSkZMRk5GUEZSL0ZVUSwwLjI3Nzc3NzhlbUYnL0ZYRl9vLUkjbW5HRiQ2JVEiMUYnRjJGQ0ZD together with the its tangent plane and normal line at the point LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkobWZlbmNlZEdGJDYkLUYjNiktSSZtc3FydEdGJDYjLUYjNiQtSSNtbkdGJDYkUSIyRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnRjktSSNtb0dGJDYtUSIsRidGOS8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdRJXRydWVGJy8lKXN0cmV0Y2h5R0ZCLyUqc3ltbWV0cmljR0ZCLyUobGFyZ2VvcEdGQi8lLm1vdmFibGVsaW1pdHNHRkIvJSdhY2NlbnRHRkIvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GNjYkUSIwRidGOUY8LUY9Ni1RKiZ1bWludXMwO0YnRjlGQC9GREZCRkZGSEZKRkxGTi9GUVEsMC4yMjIyMjIyZW1GJy9GVEZobkYwRjlGOUY5.tangentPlane := n.(<x,y,z>-<sqrt(2),0,-sqrt(2)>)=0;
normalLine := <sqrt(2),0,-sqrt(2)> + n*t;
surfPlot := implicitplot3d(F(x,y,z)=1,x=-4..4,y=-4..4,z=-4..4,numpoints=5000):
tanPlot := plot3d(solve(tangentPlane,z),x=-4..4,y=-4..4):
normPlot := spacecurve(normalLine,t=-8..3,thickness=2,color=blue):
display({surfPlot,tanPlot,normPlot},orientation=[-44,73],viewpoint=circleleft);Example: Here we will graph the hyberboloid of one sheet LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUkjbWlHRiQ2I1EhRictSSZtZnJhY0dGJDYoLUklbXN1cEdGJDYlLUYsNiZRInhGJy8lJ2l0YWxpY0dRJXRydWVGJy8lJ29wYXF1ZUdGOi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictRiM2JC1JI21uR0YkNiVRIjJGJ0Y7L0Y+USdub3JtYWxGJ0ZGLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GIzYkLUZDNiVRIjRGJ0Y7RkZGRi8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGVS8lKWJldmVsbGVkR1EmZmFsc2VGJy1JI21vR0YkNi1RIitGJ0ZGLyUmZmVuY2VHRlovJSpzZXBhcmF0b3JHRlovJSlzdHJldGNoeUdGWi8lKnN5bW1ldHJpY0dGWi8lKGxhcmdlb3BHRlovJS5tb3ZhYmxlbGltaXRzR0ZaLyUnYWNjZW50R0ZaLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGaW8tRjA2KC1GMzYlLUYsNiZRInlGJ0Y4RjtGPUZARkgtRiM2JC1GQzYlRlJGO0ZGRkZGUEZTRlZGWC1GZm42LVEqJnVtaW51czA7RidGRkZpbkZbb0Zdb0Zfb0Zhb0Zjb0Zlb0Znb0Zqby1GMDYoLUYzNiUtRiw2JlEiekYnRjhGO0Y9RkBGSC1GIzYkLUZDNiVRIjlGJ0Y7RkZGRkZQRlNGVkZYLUZmbjYtUSI9RidGRkZpbkZbb0Zdb0Zfb0Zhb0Zjb0Zlby9GaG9RLDAuMjc3Nzc3OGVtRicvRltwRmpxRmVwRkY= together with its tagent plane and normal line at the point LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictSShtZmVuY2VkR0YkNiQtRiM2KS1JI21uR0YkNiVRIjJGJy8lJ29wYXF1ZUdRJXRydWVGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSSNtb0dGJDYtUSIsRidGOy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGOi8lKXN0cmV0Y2h5R0ZELyUqc3ltbWV0cmljR0ZELyUobGFyZ2VvcEdGRC8lLm1vdmFibGVsaW1pdHNHRkQvJSdhY2NlbnRHRkQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GPzYtUSomdW1pbnVzMDtGJ0Y7RkIvRkZGREZHRklGS0ZNRk8vRlJRLDAuMjIyMjIyMmVtRicvRlVGZm4tRjU2JVEiMUYnRjhGO0Y+LUY1NiVRIjNGJ0Y4RjtGO0Y7RitGOw==.F := (x,y,z) -> x^2/4+y^2-z^2/9:
'F(x,y,z)' = F(x,y,z);
F(2,-1,3)=1;Next, let's generate the normal vector at the point LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictSShtZmVuY2VkR0YkNiQtRiM2KS1JI21uR0YkNiVRIjJGJy8lJ29wYXF1ZUdRJXRydWVGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSSNtb0dGJDYtUSIsRidGOy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGOi8lKXN0cmV0Y2h5R0ZELyUqc3ltbWV0cmljR0ZELyUobGFyZ2VvcEdGRC8lLm1vdmFibGVsaW1pdHNHRkQvJSdhY2NlbnRHRkQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GPzYtUSomdW1pbnVzMDtGJ0Y7RkIvRkZGREZHRklGS0ZNRk8vRlJRLDAuMjIyMjIyMmVtRicvRlVGZm4tRjU2JVEiMUYnRjhGO0Y+LUY1NiVRIjNGJ0Y4RjtGO0Y7RitGOw==.n := evalVF(Gradient(F(x,y,z),[x,y,z]),<2,-1,3>);Next, we need equations for the tangent plane and the normal line. Both the tangent plane and normal line at (2,-1,3) pass through this point. The gradient vector at this point provides a normal vector for the tangent plane and a direction vector for the normal line.tPlane := n.(<x,y,z>-<2,-1,3>)=0;
nLine := <2,-1,3>+n*t;Now let's make our plots and display them together.levelSurface := implicitplot3d(F(x,y,z)=1,x=-5..5,y=-5..5,z=-8..8,numpoints=5000):
tangentPlot := plot3d(solve(tPlane,z),x=-4..4,y=-3..2,color=blue):
normalPlot := spacecurve(nLine,t=-3..3,color=red,thickness=3):
display({levelSurface,normalPlot,tangentPlot},scaling=constrained,orientation=[-90,71],viewpoint=circleleft);Example: Let's plot LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBLUY+Ni1RIj1GJ0ZBRkMvRkdGRUZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGam4tSSZtZnJhY0dGJDYoLUklbXN1cEdGJDYlRjotRiM2JS1JI21uR0YkNiRRIjJGJ0ZBRi9GMi8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRiM2JS1GZW82JFEiOUYnRkFGL0YyLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZlcC8lKWJldmVsbGVkR0ZFLUY+Ni1RIitGJ0ZBRkNGaG5GSEZKRkxGTkZQL0ZTUSwwLjIyMjIyMjJlbUYnL0ZWRl5xLUZdbzYoLUZgbzYlRlhGYm9GaG8tRiM2JS1GZW82JFEiNEYnRkFGL0YyRmBwRmNwRmZwRmhwRkE= over the circular disk: LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEieEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUkjbW5HRiQ2JFEiMkYnL0Y2USdub3JtYWxGJ0YyRjUvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUkjbW9HRiQ2LVEiK0YnRj4vJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkkvJSlzdHJldGNoeUdGSS8lKnN5bW1ldHJpY0dGSS8lKGxhcmdlb3BHRkkvJS5tb3ZhYmxlbGltaXRzR0ZJLyUnYWNjZW50R0ZJLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGWC1GLDYlLUYvNiVRInlGJ0YyRjVGOEZALUZENi1RJiZsZXE7RidGPkZHRkpGTEZORlBGUkZUL0ZXUSwwLjI3Nzc3NzhlbUYnL0ZaRl5vLUYsNiVGOkY4RkBGPg==. Then we'll plot some of its level curves and gradient vectors. solve(x^2+y^2=2^2,y);f := (x,y) -> x^2/9+y^2/4:
'f(x,y)'=f(x,y);
plot3d(f(x,y),x=-2..2,y=-sqrt(4-x^2)..sqrt(4-x^2),scaling=constrained,axes=boxed,viewpoint=circleleft);Next, let's use "conplot" and "gradplot" to plot level curves of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBRkE= along with some of its gradient vectors. Specifically let's draw contours for levels LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYzLUkjbWlHRiQ2JVEiekYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JI21uR0YkNiRRJTAuMDJGJ0Y5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkgvRktRJjAuMGVtRicvRk5RLDAuMzMzMzMzM2VtRictRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSEZXL0ZORlgtRlA2JFEkMC4xRidGOUZTRmVuLUZQNiRRJDAuNUYnRjlGU0Zlbi1GUDYkUSIxRidGOUZTRmVuLUZQNiRRJDEuNUYnRjlGU0Y5 and 2.5.conPlot := contourplot(f(x,y), x=-3..3, y=-3..3, contours=[0.02,0.1,0.5,1,1.5,2.5], filledregions=true, coloring=[red,yellow]):
gradPlot := gradplot(f(x,y), x=-3..3, y=-3..3, grid=[7,7],arrows=SLIM):
display({conPlot,gradPlot},axes=none);Example: Let LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYmLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGQUZBLUY+Ni1RIj1GJ0ZBRkMvRkdGRUZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGam4tRiw2JVEjbG5GJy9GMEZFRkEtRjY2JC1GIzYoLUkjbW5HRiQ2JFEiNEYnRkEtRj42LVEifkYnRkFGQ0ZobkZIRkpGTEZORlBGUi9GVkZULUklbXN1cEdGJDYlRjotRiM2JS1GZW82JFEiMkYnRkFGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GPjYtUSIrRidGQUZDRmhuRkhGSkZMRk5GUC9GU1EsMC4yMjIyMjIyZW1GJy9GVkZbcS1JKG1zdWJzdXBHRiQ2KEZYLUYsNiNRIUYnRl9wRmRwLyUvc3Vic2NyaXB0c2hpZnRHRmZwL0krbXNlbWFudGljc0dGJFEsW25vbmUsbm9uZV1GJ0ZBRkFGQQ==. We will use "contourplot" to plot some of f(x,y)'s level curves. Specifically let's plot the level curves where z equals -5, -4, -3, ..., 9, and 10. The plot option "numpoints=5000" makes sure the graphs don't look too rough.Note: We will need this plot later, thus the assignment and display command.f := (x,y) -> ln(4*x^2+y^2):
'f(x,y)' = f(x,y);
conPlot := contourplot(f(x,y),x=-3..3,y=-3..3,contours=[seq(i,i=-5..10)],numpoints=5000):
display(conPlot);Alternatively, we could have used the command:[> conPlot := contourplot(f(x,y),x=-3..3,y=-3..3,contours=[-5,-4,-,3,-2,-1,0,1,2,3,4,5,6,7,8,9,10],numpoints=5000):From this plot we can see that the level curves of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= are ellipses centered at the origin.Next, let's compute the gradient of f(x,y) using "Gradient". Then use "evalVF" to evaluate the gradient at the points:LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEicEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUkjbW5HRiQ2JFEiMUYnL0Y2USdub3JtYWxGJ0YyRjUvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJ0Y+ = (1,0), LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEicEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUkjbW5HRiQ2JFEiMkYnL0Y2USdub3JtYWxGJ0YyRjUvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJ0Y+ = (0,-1), and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEicEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUkjbW5HRiQ2JFEiM0YnL0Y2USdub3JtYWxGJ0YyRjUvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJ0Y+ = (1,-1).gradf := Gradient(f(x,y),[x,y]);
p[1] := <1,0>;
v[1] := evalVF(gradf,p[1]);
p[2] := <0,-1>;
v[2] := evalVF(gradf,p[2]);
p[3] := <1,-1>;
v[3] := evalVF(gradf,p[3]);Next, let's create plots for all 3 gradient vectors based at their corresponding points using the "arrow" command. Notice how the gradient vectors are perpendicular to level curves (and point toward "higher ground").v1Plot := arrow(p[1],v[1],shape=arrow,color=red,thickness=3):
v2Plot := arrow(p[2],v[2],shape=arrow,color=blue,thickness=3):
v3Plot := arrow(p[3],v[3],shape=arrow,color=green,thickness=3):
display({v1Plot,v2Plot,v3Plot,conPlot},scaling=constrained);Example: Let's define the function LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYsLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSJ+RidGQUZDL0ZHRkVGSEZKRkxGTkZQRlIvRlZGVC1GPjYtUSI9RidGQUZDRltvRkhGSkZMRk5GUC9GU1EsMC4yNzc3Nzc4ZW1GJy9GVkZhby1JJW1zdXBHRiQ2JUY6LUYjNiQtSSNtbkdGJDYkUSIyRidGQUZBLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GPjYtUSIrRidGQUZDRltvRkhGSkZMRk5GUC9GU1EsMC4yMjIyMjIyZW1GJy9GVkZjcC1GZG82JUZYRmZvRlxwRl9wLUZkbzYlRmVuRmZvRlxwRkE= and then plot the level surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSJ+RidGQUZDL0ZHRkVGSEZKRkxGTkZQRlIvRlZGVC1GPjYtUSI9RidGQUZDRltvRkhGSkZMRk5GUC9GU1EsMC4yNzc3Nzc4ZW1GJy9GVkZhby1JJW1zdXBHRiQ2JS1JI21uR0YkNiRRIjRGJ0ZBLUYjNiQtRmdvNiRRIjJGJ0ZBRkEvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRmhuRkE=using "implicitplot3d". Note: We will need this plot later, thus the assignment and display command.F := (x,y,z) -> x^2+y^2+z^2:
'F(x,y,z)'=F(x,y,z);
spherePlot:=implicitplot3d(F(x,y,z)=4^2,x=-4..4,y=-4..4,z=-4..4):
display(spherePlot);Let's verify that the point LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkobWZlbmNlZEdGJDYkLUYjNiotSSNtb0dGJDYtUSomdW1pbnVzMDtGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjkvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGSC1JI21uR0YkNiRRIjJGJ0Y0LUYxNi1RIixGJ0Y0RjcvRjtRJXRydWVGJ0Y8Rj5GQEZCRkQvRkdRJjAuMGVtRicvRkpRLDAuMzMzMzMzM2VtRidGSy1JJm1zcXJ0R0YkNiMtRiM2JEZLRjRGT0ZLRjRGNEY0 is on the level surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSI9RidGQUZDL0ZHRkVGSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl1vLUklbXN1cEdGJDYlLUkjbW5HRiQ2JFEiNEYnRkEtRiM2JS1GY282JFEiMkYnRkFGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GLDYjUSFGJ0ZB.F(-2,2*sqrt(2),2)=4^2;Next, we will compute the gradient of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYtLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSJ+RidGQUZDL0ZHRkVGSEZKRkxGTkZQRlIvRlZGVC1GPjYtUSI9RidGQUZDRltvRkhGSkZMRk5GUC9GU1EsMC4yNzc3Nzc4ZW1GJy9GVkZhby1JJW1zdXBHRiQ2JUY6LUYjNiUtSSNtbkdGJDYkUSIyRidGQUYvRjIvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY+Ni1RIitGJ0ZBRkNGW29GSEZKRkxGTkZQL0ZTUSwwLjIyMjIyMjJlbUYnL0ZWRmNwLUZkbzYlRlhGZm9GXHBGX3AtRmRvNiVGZW5GZm9GXHAtRiw2I1EhRidGQQ== and evalute it at the point LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkobWZlbmNlZEdGJDYkLUYjNiotSSNtb0dGJDYtUSomdW1pbnVzMDtGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjkvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGSC1JI21uR0YkNiRRIjJGJ0Y0LUYxNi1RIixGJ0Y0RjcvRjtRJXRydWVGJ0Y8Rj5GQEZCRkQvRkdRJjAuMGVtRicvRkpRLDAuMzMzMzMzM2VtRidGSy1JJm1zcXJ0R0YkNiMtRiM2JEZLRjRGT0ZLRjRGNEY0. gradF := Gradient(F(x,y,z),[x,y,z]);
pt := <-2,2*sqrt(2),2>;
vec := evalVF(gradF,pt);Next, let's plot the gradient vector based at LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkobWZlbmNlZEdGJDYkLUYjNiotSSNtb0dGJDYtUSomdW1pbnVzMDtGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjkvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGSC1JI21uR0YkNiRRIjJGJ0Y0LUYxNi1RIixGJ0Y0RjcvRjtRJXRydWVGJ0Y8Rj5GQEZCRkQvRkdRJjAuMGVtRicvRkpRLDAuMzMzMzMzM2VtRidGSy1JJm1zcXJ0R0YkNiMtRiM2JEZLRjRGT0ZLRjRGNEY0 and the level surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSI9RidGQUZDL0ZHRkVGSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl1vLUklbXN1cEdGJDYlLUkjbW5HRiQ2JFEiNEYnRkEtRiM2JS1GY282JFEiMkYnRkFGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GPjYtUSJ+RidGQUZDRltvRkhGSkZMRk5GUEZSL0ZWRlRGQQ==together. gradPlot := arrow(pt,vec,shape=arrow,color=red,thickness=3):
display({spherePlot,gradPlot},scaling=constrained,viewpoint=circleleft);Example: Let's plot level curves of a function along with some gradient vectors. We will see that the gradient vectors are orthogonal to the level curves. Then we'll view our surface as a level surface of a 3 variable function. The gradient vectors of this 3 variable function will give us vectors normal to the surface itself (i.e. normals for tangent planes).h := (x,y) -> y^2/4-x^2/9:
'h(x,y)' = h(x,y);Define LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2KFEidUYnLyUlYm9sZEdRJXRydWVGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSdvcGFxdWVHRjEvJSxtYXRodmFyaWFudEdRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRjlGL0Y3Rjo= to be the gradient vector at the point LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictSShtZmVuY2VkR0YkNiQtRiM2KC1JI21vR0YkNi1RKiZ1bWludXMwO0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjIyMjIyMjJlbUYnLyUncnNwYWNlR0ZMLUkjbW5HRiQ2JVEiMUYnLyUnb3BhcXVlR1EldHJ1ZUYnRjgtRjU2LVEiLEYnRjhGOy9GP0ZVRkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTlEsMC4zMzMzMzMzZW1GJ0Y0Rk9GOEY4RitGOA==, let LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2KFEidkYnLyUlYm9sZEdRJXRydWVGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSdvcGFxdWVHRjEvJSxtYXRodmFyaWFudEdRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRjkvRjhRJ25vcm1hbEYn be the gradient vector at the point LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictSShtZmVuY2VkR0YkNiQtRiM2Ji1JI21uR0YkNiVRIjJGJy8lJ29wYXF1ZUdRJXRydWVGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSSNtb0dGJDYtUSIsRidGOy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGOi8lKXN0cmV0Y2h5R0ZELyUqc3ltbWV0cmljR0ZELyUobGFyZ2VvcEdGRC8lLm1vdmFibGVsaW1pdHNHRkQvJSdhY2NlbnRHRkQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GNTYlUSIwRidGOEY7RjtGO0YrRjs=, and let LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2KFEid0YnLyUlYm9sZEdRJXRydWVGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSdvcGFxdWVHRjEvJSxtYXRodmFyaWFudEdRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRjkvRjhRJ25vcm1hbEYn be the gradient vector at LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictSShtZmVuY2VkR0YkNiQtRiM2Ji1JI21uR0YkNiVRIjBGJy8lJ29wYXF1ZUdRJXRydWVGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSSNtb0dGJDYtUSIsRidGOy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGOi8lKXN0cmV0Y2h5R0ZELyUqc3ltbWV0cmljR0ZELyUobGFyZ2VvcEdGRC8lLm1vdmFibGVsaW1pdHNHRkQvJSdhY2NlbnRHRkQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GNTYlUSIxRidGOEY7RjtGO0YrRjs=.gradh := Gradient(h(x,y),[x,y]);
u := evalVF(gradh,<-1,-1>);
v := evalVF(gradh,< 2, 0>);
w := evalVF(gradh,< 0, 1>);Next, let's graph the contours of the surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JlEiekYnLyUnaXRhbGljR1EldHJ1ZUYnLyUnb3BhcXVlR0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GNVEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj8vJSlzdHJldGNoeUdGPy8lKnN5bW1ldHJpY0dGPy8lKGxhcmdlb3BHRj8vJS5tb3ZhYmxlbGltaXRzR0Y/LyUnYWNjZW50R0Y/LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTi1GLDYmUSJoRidGL0YyRjQtSShtZmVuY2VkR0YkNiQtRiM2Ji1GLDYmUSJ4RidGL0YyRjQtRjg2LVEiLEYnRjtGPS9GQUYxRkJGREZGRkhGSi9GTVEmMC4wZW1GJy9GUFEsMC4zMzMzMzMzZW1GJy1GLDYmUSJ5RidGL0YyRjRGO0Y7LUY4Ni1RIn5GJ0Y7Rj1GQEZCRkRGRkZIRkpGam4vRlBGW29GOw==(in 2-dimensions) along with the gradient vectors LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2KFEidUYnLyUlYm9sZEdRJXRydWVGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSdvcGFxdWVHRjEvJSxtYXRodmFyaWFudEdRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRjktSSNtb0dGJDYtUSIsRicvRjhRJ25vcm1hbEYnLyUmZmVuY2VHRjQvJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRictRj02LVEifkYnRkBGQi9GRUY0RkZGSEZKRkxGTkZQL0ZURlItRiw2KFEidkYnRi9GMkY1RjdGOkY8RlZGQA==and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2KFEid0YnLyUlYm9sZEdRJXRydWVGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSdvcGFxdWVHRjEvJSxtYXRodmFyaWFudEdRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRjkvRjhRJ25vcm1hbEYn. conPlot := contourplot(h(x,y),x=-2..2,y=-2..2,contours=15):
uPlot := arrow(<-1,-1>,u,shape=arrow,thickness=2,color=black):
vPlot := arrow(< 2, 0>,v,shape=arrow,thickness=2,color=blue):
wPlot := arrow(< 0, 1>,w,shape=arrow,thickness=2,color=green):
display({uPlot,vPlot,wPlot,conPlot});Now let's compute normal vectors for the surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEiekYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSJoRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiYtRiw2JVEieEYnRi9GMi1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGOUY5Rjk= at the points LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYqLUkjbWlHRiQ2I1EhRictSShtZmVuY2VkR0YkNiQtRiM2KC1JI21vR0YkNi1RKiZ1bWludXMwO0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjIyMjIyMjJlbUYnLyUncnNwYWNlR0ZMLUkjbW5HRiQ2JVEiMUYnLyUnb3BhcXVlR1EldHJ1ZUYnRjgtRjU2LVEiLEYnRjhGOy9GP0ZVRkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTlEsMC4zMzMzMzMzZW1GJ0Y0Rk9GOEY4RlYtRjU2LVEifkYnRjhGO0Y+RkBGQkZERkZGSEZaL0ZORmVuLUYwNiQtRiM2Ji1GUDYlUSIyRidGU0Y4RlYtRlA2JVEiMEYnRlNGOEY4RjhGVkZobkY4and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictSShtZmVuY2VkR0YkNiQtRiM2Ji1JI21uR0YkNiVRIjBGJy8lJ29wYXF1ZUdRJXRydWVGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSSNtb0dGJDYtUSIsRidGOy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGOi8lKXN0cmV0Y2h5R0ZELyUqc3ltbWV0cmljR0ZELyUobGFyZ2VvcEdGRC8lLm1vdmFibGVsaW1pdHNHRkQvJSdhY2NlbnRHRkQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GNTYlUSIxRidGOEY7RjtGO0YrRjs=. To do this we will consider LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYqLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSI9RidGQUZDL0ZHRkVGSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl1vRmVuLUY+Ni1RKCZtaW51cztGJ0ZBRkNGW29GSEZKRkxGTkZQL0ZTUSwwLjIyMjIyMjJlbUYnL0ZWRmNvLUYsNiVRImhGJ0YvRjItRjY2JC1GIzYmRjpGPUZYRkFGQUZB so that LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEiekYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSJoRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiYtRiw2JVEieEYnRi9GMi1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGOUY5Rjk= is equivalent to LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRInlGJ0YvRjJGPS1GLDYlUSJ6RidGL0YyRkFGQS1GPjYtUSI9RidGQUZDL0ZHRkVGSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl1vLUkjbW5HRiQ2JFEiMEYnRkFGQQ==. Thus the normals for the tangents come from the gradient of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= (the gradient of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= gives us normals for its level surfaces).F := (x,y,z) -> z-h(x,y):
'F(x,y,z)' = F(x,y,z);
gradF := Gradient(F(x,y,z),[x,y,z]);
nU := evalVF(gradF,<-1,-1,h(-1,-1)>);
nV := evalVF(gradF,< 2, 0,h( 2, 0)>);
nW := evalVF(gradF,< 0, 1,h( 0, 1)>);Finally, let's plot the surface LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JlEiekYnLyUnaXRhbGljR1EldHJ1ZUYnLyUnb3BhcXVlR0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GNVEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj8vJSlzdHJldGNoeUdGPy8lKnN5bW1ldHJpY0dGPy8lKGxhcmdlb3BHRj8vJS5tb3ZhYmxlbGltaXRzR0Y/LyUnYWNjZW50R0Y/LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTi1GLDYmUSJoRidGL0YyRjQtSShtZmVuY2VkR0YkNiQtRiM2Ji1GLDYmUSJ4RidGL0YyRjQtRjg2LVEiLEYnRjtGPS9GQUYxRkJGREZGRkhGSi9GTVEmMC4wZW1GJy9GUFEsMC4zMzMzMzMzZW1GJy1GLDYmUSJ5RidGL0YyRjRGO0Y7LUYsNiNRIUYnRjs= in 3-dimensions using "LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JlEuY29udG91cnBsb3QzZEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUnb3BhcXVlR0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GNVEnbm9ybWFsRic= " (turning on the option which fills in the surface between the contours). We'll also plot the normal vectors we just computed and display everything together.con3dPlot := contourplot3d(h(x,y),x=-2..2,y=-2..2,contours=15,filled=true):
uPlot := arrow(<-1,-1,h(-1,-1)>,nU,shape=arrow,thickness=2,color=black):
vPlot := arrow(< 2, 0,h( 2, 0)>,nV,shape=arrow,thickness=2,color=blue):
wPlot := arrow(< 0, 1,h( 0, 1)>,nW,shape=arrow,thickness=2,color=green):
display({uPlot,vPlot,wPlot,con3dPlot},orientation=[-25,65,-15],scaling=constrained,viewpoint=circleleft);