The Total Differential
and
Partial Derivatives
of
z = f[x,y]

by
K. D.  Stroyan
University of Iowa

copyright 1997 by Academic Press, Inc. - All rights reserved.

Special Mathematica Functions used in this NoteBook

Off[General::spell];
Off[General::spell1];
SetOptions[ParametricPlot3D,ViewPoint->{5,3,1},AspectRatio->Automatic];
SetOptions[Plot3D,ViewPoint->{5,3,1},BoxRatios->Automatic];
SetOptions[ContourPlot,PlotPoints->30];

BeginPackage["zoom3D`"];

zoom3D::usage = "zoom[f, x,y, dx] expands the graph of f[x,y]
about the point (x,y,f[x,y]) in 10 steps until the specified
dx appears unit size.";

Begin["`Private`"];
Needs["Graphics`Colors`"];

snglFrame[f_,x_,y_,dx_,deltaX_,opns___] := 
Module[{z,box,ddx,ddy,fX,fY,dz,xaxis,yaxis,zaxis,plot,tang},
z = N[f[x,y]];

plot = Plot3D[ f[x+ddx,y+ddy]-z,{ddx, -deltaX,deltaX},{ddy, -deltaX,deltaX},opns,
		PlotRange->{ -deltaX,deltaX},BoxRatios->Automatic,
		Axes->None,Ticks->None,Boxed->False,
		DisplayFunction->Identity];
		
fX[ddx_,ddy_] := Evaluate[D[f[ddx,ddy],ddx]];
fY[ddx_,ddy_] := Evaluate[D[f[ddx,ddy],ddy]];

dz[ddx_,ddy_] :=  fX[x,y] ddx + fY[x,y] ddy;
tang = Plot3D[ dz[ddx,ddy] ,{ddx, -deltaX .7,deltaX .7},{ddy, -deltaX .7,deltaX .7},
		PlotRange->{ -deltaX,deltaX},BoxRatios->Automatic, PlotPoints->3,
		Axes->None,Boxed->False, Ticks->None,
		DisplayFunction->Identity];
	
box = Line[N[{{-dx,-dx,-dx},{-dx,dx,-dx},{-dx,dx,dx},{-dx,-dx,dx},{-dx,-dx,-dx},
			{-dx,-dx,-dx},{dx,-dx,-dx},
			{dx,dx,-dx},{dx,dx,dx},{dx,-dx,dx},{dx,-dx,-dx}}]];
			
box = Join[{box,Line[N[{{-dx,-dx,dx},{dx,-dx,dx}}]],
		Line[N[{{-dx,dx,dx},{dx,dx,dx}}]],
		Line[N[{{-dx,dx,-dx},{dx,dx,-dx}}]]}];

box = Graphics3D[{AbsoluteThickness[2],Red,box}];
		
				
If[ (N[Abs[x]]<N[deltaX]&&N[Abs[y]]<N[deltaX]&&N[Abs[z]]<N[deltaX]),
xaxis = {AbsoluteThickness[3],Green,Line[N[{{-deltaX,-y,-z},
						{3 deltaX/4,-y,-z}}]]};
xaxis = Graphics3D[{xaxis,Text["x",N[{.9 deltaX,-y,-z}]]}];
yaxis = {AbsoluteThickness[3],Green,Line[N[{{-x,-deltaX,-z},
						{-x,3 deltaX/4,-z}}]]};
yaxis = Graphics3D[{yaxis,Text["y",N[{-x,.9 deltaX,-z}]]}];
zaxis = {AbsoluteThickness[3],Green,Line[N[{{-x,-y,-deltaX},
						{-x,-y,3 deltaX/4}}]]};
zaxis = Graphics3D[{zaxis,Text["z",N[{-x,-y,.9 deltaX}]]}];
Show[{plot,xaxis,yaxis,zaxis,box,tang}]
		,
Show[{plot,box,tang}]
]];

zoom3D[f_,x_,y_,dx_,opns___] := Module[{n},

deltaX = Table[N[dx^(n/9)],{n,0,9}];
Map[
Show[
GraphicsArray[{snglFrame[f,x,y,dx,2.5,
				Ticks->{{-1,1},{-1,1},{-1,1}},opns],
				snglFrame[f,x,y,dx,#]}],
DisplayFunction->$DisplayFunction]&,deltaX];
];

End[];
EndPackage[];

BeginPackage["zoom2D`"];

zoom2D::usage = "zoom[f, x,y, dx] expands the contour graph of f[x,y]
about the point (x,y,f[x,y]) in 10 steps until the specified
dx appears unit size.";

Begin["`Private`"];
Needs["Graphics`Colors`"];

snglContour[f_,x_,y_,dx_,deltaX_,opns___] := 
Module[{z,box,ddx,ddy,fX,fY,dz,xaxis,yaxis,plot,tang},
z = f[x,y];
plot = ContourPlot[ f[x+ddx,y+ddy]-z,{ddx, -deltaX,deltaX},{ddy, -deltaX,deltaX},opns,
		FrameTicks->None,DisplayFunction->Identity];
		
fX[ddx_,ddy_] := Evaluate[D[f[ddx,ddy],ddx]];
fY[ddx_,ddy_] := Evaluate[D[f[ddx,ddy],ddy]];

dz[ddx_,ddy_] :=  fX[x,y] ddx + fY[x,y] ddy;
tang = ContourPlot[ dz[ddx,ddy] ,{ddx, -deltaX .7,deltaX .7},{ddy, -deltaX .7,deltaX .7},
		ContourShading->False,FrameTicks->None,
		DisplayFunction->Identity];
	
box = Graphics[{AbsoluteThickness[2],Red,
		Line[N[{{-dx,-dx},{-dx,dx},{dx,dx},
				{dx,-dx},{-dx,-dx}}]]}];
		
				
If[ (N[Abs[x]]<N[deltaX]&&N[Abs[y]]<N[deltaX]),
xaxis = {AbsoluteThickness[3],Green,Line[N[{{-deltaX,-y},
						{3 deltaX/4,-y}}]]};
xaxis = Graphics[{xaxis,Text["x",N[{.9 deltaX,-y}]]}];
yaxis = {AbsoluteThickness[3],Green,Line[N[{{-x,-deltaX},
						{-x,3 deltaX/4}}]]};
yaxis = Graphics[{yaxis,Text["y",N[{-x,.9 deltaX}]]}];

Show[{plot,xaxis,yaxis,box,tang}]
		,
Show[{plot,box,tang}]]];

zoom2D[f_,x_,y_,dx_,opns___] := Module[{n},

deltaX = Table[N[dx^(n/9)],{n,0,9}];
Map[
Show[
GraphicsArray[{snglContour[f,x,y,dx,2.5,FrameLabel->{"dx","dy"},
				FrameTicks->{{-1,1},{-1,1}},opns],
				snglContour[f,x,y,dx,#]}],
DisplayFunction->$DisplayFunction]&,deltaX];
];

End[];
EndPackage[];

BeginPackage["plot3DContour`"];

plot3DContour::usage = "plot3DContour[f, xCenter,yCenter, scale] draws 
the 3-D Plot  z = f[x,y] and shows the contour plot at the bottom.";

Begin["`Private`"];

plot3DContour[f_,xCnt_,yCnt_,scale_,opns___]:= 
Module[{zSs,surface,contour,cont,baseContour,combined},
zSs = Table[N[f[x,y]],{x,xCnt-scale,xCnt+scale,scale/30},
			{y,yCnt-scale,yCnt+scale,scale/30}];
zMIN = Min[zSs];

surface = Plot3D[ f[x,y] , {x,xCnt-scale,xCnt+scale},
						{y,yCnt-scale,yCnt+scale},opns,
			PlotPoints->30,BoxRatios->Automatic,
			Ticks->None,
			DisplayFunction->Identity];

contour = ContourPlot[ f[x,y] ,{x,xCnt-scale,xCnt+scale},
			{y,yCnt-scale,yCnt+scale},PlotPoints->30,
			DisplayFunction -> Identity];

cont = Show[contour,ContourShading->False,
				DisplayFunction -> Identity];

baseContour = First[Graphics[cont]];
					
baseContour = Graphics3D[baseContour /. Line[x_]:>
			Line[Map[Append[#,zMIN]&,x]]];

combined = Show[surface,baseContour,
		DisplayFunction->$DisplayFunction];
		];
		
End[];
EndPackage[];

Notebook Overview

This NoteBook gives the microscope interpretation of "Landau's small oh approximation" of a nonlinear function by its total differential:

f[x+dx,y+dy] - f[x,y] = ∂(f/∂)x[x, y]· dx + ∂(f/∂)y[x, y]· dy + ϵ · |dX|

dX = (dx,dy), or

f[x+dx,y+dy] - f[x,y] = ∂(f/∂)x[x, y]· dx + ∂(f/∂)y[x, y]· dy + ϵ ·(Sqrt[(dx^2) + (dy^2)])

This is explained in the text and the following subsections:

The Function  z = f[x,y] and its Change  f[x+dx,y+dy] - f[x,y]

We start with a nonlinear function

z = f[x,y]

which we can represent graphically as an explicit surface.  Mathematica makes the plot easy, but differential calculus can measure features of the graph and even predict properties of the graph without having it in advance.  Differential calculus can estimate small CHANGES in the function, so we will be interested in changing  x  to  x + dx,  y to  y + dy  and computing the change in z:

f[x+dx,y+dy] - f[x,y]

For example,

An important typical case is when the function  f[x,y]  is given by a formula in  x  and  y  built from, addition, multiplication, applying the classical functions and their compositions to x and y, for example,

z = f[x, y] = 9 - (x^2) - ((y^2)/3)

or

z = f[x, y] = Sin[x y] Exp[-(x^2) - ((y^2)/3)]

or

z = 
        f[x, y] = Cos[(x^2) - x]/(1 + (y^2)) - (1/2) x Sin[3 y]

The Linear Function  dz = m dx + n dy  in Local Coordinates

The total differential is a linear function in new variables (dx,dy,dz)

dz = m dx + n dy

where  m  and  n are constants and the (dx,dy,dz) coordinates are parallel to the (x,y,z) coordinates, but (dx,dy,dz) = (0,0,0) is translated to the point (x,y,f[x,y]) where we want to approximate the function  z = f[x,y].  The new variables simply represent changes or differences in the old variable from the base point.

(We could write this  dx = x - x0, dy = y - y0, dz = z - z0, but find the calculus easier if we use new variables for the differences. The "d" stands for difference.)

The Partial Derivatives

The connection between  the total differential and the function is that

m = the derivative of the formula  f[x,y]  with respect to x, treating y as a constant

and

n = the derivative of the formula  f[x,y]  with respect to x, treating y as a constant

When the function  f[x,y]  is given by a formula in  x  and  y  built from, addition, multiplication, applying the classical functions	and their compositions to x and y, the rules of one-variable calculus applied to  x  treating  y as a parameter calculate  m, while the rules applied to  y  treating  x  as a parameter compute  n.

For example,

if

z = f[x,y] = 9 - x^2 - y^3/5

the derivative with respect to x is

- 2 x

and the derivative with respect to  y  is

-(3/5) y.

Mathematica Partial Derivatives  D[f[x,y],x] & D[f[x,y],y]

Mathematica computes these partial derivatives with the commands

m = D[f[x,y],x]

&

n = D[f[x,y],y]

We denote the partial derivatives by  fX[x,y] = D[f[x,y],x]  and  fY[x,y] = D[f[x,y],y] below.

The Local Linear Approximation

The important theoretical fact is that when  m  and  n  can be computed by rules and the resulting formulas for f[x,y], fX[x,y] and fY[x,y] are valid on a rectangle of (x,y)-vlaues, then the linear total differential approximates small changes in the nonlinear function,

f[x+dx,y+dy] - f[x,y] ≈ m dx + n dy

where  m = fX[x,y],  n = fY[x,y]  and (x,y) is the fixed base point. More specifically,

f[x+dx,y+dy] - f[x,y] = ∂(f/∂)x[x, y]· dx + ∂(f/∂)y[x, y]· dy + ϵ · |dX|

dX = (dx,dy), or

f[x+dx,y+dy] - f[x,y] = ∂(f/∂)x[x, y]· dx + ∂(f/∂)y[x, y]· dy + ϵ ·(Sqrt[(dx^2) + (dy^2)])

Notice that we don't just have

	f[x + dx , y+ dy] - f[x,y] ~ m dx + m dy,

but rather that the error  is  ϵ |dX|  with  ϵ ≈ 0 AND 	|dX| ≈ 0.  The absolute error is small COMPARED with the size of the change in the independent variables, |dX| = (Sqrt[(dx^2) + (dy^2)]).

Geometric meaning of the error

Geometrically, the error  ϵ  is what you see as the difference between the graph and its tangent approximation when you look at the graph under a microscope of magnification   1/ |dX|.  This magnification makes  |dX|  appear unit size.  (NOTE:  ϵ depends on x, y, dx, and dy.)

Smoothness or Tangency in General

If a function  z = f[x,y]  is not given by a classical formula or if the rules for differentiation result in formulas that are not defined, we need a general defiition of smoothness or tangency.  (If the formulas work, we just compute!)

The General Definition of Smoothness of  z = f[x,y]

The function z = f[x,y] is smooth if  ϵ  is small when  |dX|  is small.  Under a microscope of power  1/ |dX|  the error term  ϵ  would be the observed gap between the graph and its linear approximation.    If  ϵ  tends to zero as  |dX|  tends to zero, this means that you would not see the error  ϵ, so that the graph would appear to be linear under sufficient magnification.  In other words, the graph of a smooth function is "locally linear."  This is the main approximation of differential calculus.

References to the Text

This NoteBook goes with Chapter 19 of the text.

A Step-by-step Computation for an Explicit Surface

Compute each step of this example in order, first doing the computations by hand yourself.

Step (1): The Function & Symbolic Derivatives

For step (1), calculate the derivatives of  z = 1 - (((x^2)/3) + ((y^2)/5)) by hand and then compare your computation to Mathematica's.

Clear[x, y, z, f, dx, dy, dz, fX, fY]; \(f[x_, y_] := 1 - \((x\^2\/3 + y\^2\/5)\); 


    fX[x_, y_] := \ Evaluate[D[f[x, y], x]]; 

    fY[x_, y_] := \ Evaluate[D[f[x, y], y]]; 


    Print["The explicit function  z = ", f[x, y]]; 

    \(Print["Partial df/dx = ", fX[x, y]]; \)\)Print[" "]; Print["Partial df/dy = ", fY[x, y]];

Step (2): The Nonlinear Graph at a Fixed (x,y)

For step (2), sketch a plot of the surface z  =  1 - (((x^2)/3) + ((y^2)/5)) by hand above (x,y) = (1,-2) and then compare your sketch to Mathematica's drawing.

x = -(1/2); y = (3/2); z = f[x, y]; scale = 5; Print["The explicit graph near (x,y,z) = (", x, ",", y, 
      ",", z, ")"]; surface = 
      Plot3D[f[x + dx, y + dy] - z, {dx, -scale, scale}, {dy, -scale, 
          scale}, AxesLabel -> {"dx", "dy", "dz"}, 
        PlotRange -> {-scale, scale}, PlotPoints -> 30, 
        DisplayFunction -> Identity]; Show[surface, Graphics3D[{PointSize[0.02], Point[{0, 0, 0}]}], 
      DisplayFunction -> $DisplayFunction];

Step (3): The Slices y-fixed, x varies and  x-fixed, y varies

For step (3) do the following:

3.1x) Sketch the curve  z = 1 - (((x^2)/3) + ((y^2)/5)) by hand above (x,y) = (1,-2) with  y = -2  fixed  (or the change in  y  is zero) and  x  varies.

3.2x)  Compute the slope of that curve when  x = 1.

3.3x)  Plot the tangent line to your x-curve at (x,y) = (1,-2).

3.1y) Sketch the curve  z =1 - (((x^2)/3) + ((y^2)/5)) by hand above (x,y) = (1,-2) with  x = 1  fixed  (or the change in  x  is zero) and  y  varies.

3.2y)  Compute the slope of that curve when  y = -2.

3.3y)  Plot the tangent line to your x-curve at (x,y) = (1,-2).

FINALLY, compare your computations and sketchs to Mathematica's.

Clear[dx]; dy = 0; xCurve = 
      ParametricPlot3D[{dx, dy, f[x + dx, y] - z}, {dx, -scale, scale}, 
        AxesLabel -> {"dx", "dy", "dz"}, 
        PlotRange 
          -> {{-scale, scale}, {-scale, scale}, {-scale, 
              scale}}, PlotPoints -> 30, 
        DisplayFunction -> Identity]; m = fX[x, y]; xTan = 
      ParametricPlot3D[{dx, dy, m dx}, {dx, -scale, scale}, 
        AxesLabel -> {"dx", "dy", "dz"}, 
        PlotRange 
          -> {{-scale, scale}, {-scale, scale}, {-scale, 
              scale}}, PlotPoints -> 30, 
        DisplayFunction -> Identity]; Print["x-slope = ", m]; xSlice = 
      Show[xCurve, xTan, Graphics3D[{PointSize[0.02], Point[{0, 0, 0}]}], 
        DisplayFunction -> $DisplayFunction];

Clear[dy]; dx = 0; yCurve = 
      ParametricPlot3D[{dx, dy, f[x, y + dy] - z}, {dy, -scale, scale}, 
        AxesLabel -> {"dx", "dy", "dz"}, 
        PlotRange 
          -> {{-scale, scale}, {-scale, scale}, {-scale, 
              scale}}, PlotPoints -> 30, 
        DisplayFunction -> Identity]; n = fY[x, y]; yTan = 
      ParametricPlot3D[{dx, dy, n dy}, {dy, -scale, scale}, 
        AxesLabel -> {"dx", "dy", "dz"}, 
        PlotRange 
          -> {{-scale, scale}, {-scale, scale}, {-scale, 
              scale}}, PlotPoints -> 30, 
        DisplayFunction -> Identity]; Print["y-slope = ", n]; ySlice = 
      Show[yCurve, yTan, Graphics3D[{PointSize[0.02], Point[{0, 0, 0}]}], 
        DisplayFunction -> $DisplayFunction];

sliceS = Show[xSlice, ySlice];

Step (4): The Total Derivative

Calculate the partial derivatives of this function by hand, write out the total derivative and then <Enter> the Mathematica computation of them and compare:

m = fX[x, y]; n = fY[x, y]; Print["Specifically at (x,y) = (", x, ",", y, ")"]; 
    Print["dz = ", m, " dx + ", n, " dy"]; tanPlane = 
      Plot3D[m dx + n dy, {dx, -scale, scale}, {dy, -scale, scale}, 
        AxesLabel -> {"dx", "dy", "dz"}, 
        PlotRange -> {-scale, scale}, PlotPoints -> 3, 
        DisplayFunction -> Identity]; Show[sliceS, Graphics3D[tanPlane], 
      DisplayFunction -> $DisplayFunction];

Step (4): Both Graphs in (x,y,z) - Coordinates

Replace dx by (x - x1), dy by (y - y1) and dz by (z - f[x1,y1]) by hand and write out the specific equation z = z1 + a (x - x1) + b (y - y1).  Sketch both graphs together.  Compare results.

Show[tanPlane, surface, 
      Graphics3D[{PointSize[0.02], Point[{0, 0, 0}]}], 
      DisplayFunction -> $DisplayFunction];

Step (5): Magnification

Now plot the graph at the point (x,y,z) or (dx,dy,dz) = (0,0,0).  Start with a scale = 4, then plot for scale = 2, 1, 1/2, 1/4, 1/8

scale = (1/4); plane = 
      Plot3D[m dx + n dy, {dx, -scale, scale}, {dy, -scale, scale}, 
        PlotRange -> {-scale, scale}, PlotPoints -> 3]; surface = 
      Plot3D[f[x + dx, y + dy] - z, {dx, -scale, scale}, {dy, -scale, 
          scale}, PlotRange -> {-scale, scale}]; Show[surface, plane, Graphics3D[{PointSize[0.02], Point[{0, 0, 0}]}], 
      DisplayFunction -> $DisplayFunction];

Combined Computation for an Explicit Surface

Here are the steps:

(1) Define z = f[x,y]

(2) Compute the symbolic total differential (including both partial derivatives)

(3) Fix the point of tangency, (x,y), and compute z = f[x,y] and the specific  dz = m dx + n dy

(4) Plot the surface and tangent

(5) Zoom in to scale dU

Clear[x, y, dx, dy, f, fX, fY]; \(f[x_, y_] := 3\ Exp[\(-\(x\^2\/3\)\) - y\^2\/5]; 


    fX[x_, y_]\  := \ Evaluate[D[f[x, y], x]]; 

    fY[x_, y_]\  := \ Evaluate[D[f[x, y], y]]; 


    dz[dx_, dy_] := fX[x, y]\ dx + fY[x, y]\ dy; 

    \(Print["The function  z = f[x,y] = ", f[x, y]]; \)\)Print["has symbolic total differential"]; Print["dz = ", dz[dx, dy]]; x = 1.0; y = -1.0; z = f[x, y]; Print["At (x,y,f[x,y]) =", {x, y, z}, " the differential"]; 
    Print["dz = ", dz[dx, dy]]; surface = 
      Plot3D[f[x + dx, y + dy] - z, {dx, -3, 3}, {dy, -3, 3}, 
        PlotRange -> {-3, 3}, DisplayFunction -> Identity]; 
    tangent = 
      Plot3D[dz[dx, dy], {dx, -3, 3}, {dy, -3, 3}, 
        PlotRange -> {-3, 3}, DisplayFunction -> Identity]; 
    Show[GraphicsArray[{surface, tangent}], 
      DisplayFunction -> $DisplayFunction]; Show[{surface, tangent}, DisplayFunction -> $DisplayFunction];

dU = 0.1; zoom3D[f, x, y, dU, AxesLabel -> {"dx", "dy", "dz"}, 
      Axes -> True, 
      Ticks -> {{-1, 1}, {-1, 1}, {-1, 1}}, 
      Boxed -> True]

Combined Surface and Contour Magnification

The local approximation of a function by its total differential can also be seen on a Contour Plot of the function.  Here is a sample without a differential:

Clear[f, x, y]; f[x_, y_] := 9 x y Exp[-((x^2) + (y^2))]; f[x, y]xCnt = (4/3); yCnt = (5/6); scale = 2; plot3DContour[f, xCnt, yCnt, scale, 
      AxesLabel -> {"dx", "dy", "dz"}]; scale = (1/2); plot3DContour[f, xCnt, yCnt, scale]; scale = (1/8); plot3DContour[f, xCnt, yCnt, scale]; scale = (1/16); plot3DContour[f, xCnt, yCnt, scale];

The Contour Zoom

The local approximation of a function by its total differential can also be seen on a Contour Plot of the function and its differential.  This is done in the same seqence of steps:

(1) Define z = f[x,y]

(2) Compute the symbolic total differential (including both partial derivatives)

(3) Fix the point of tangency, (x,y), and compute z = f[x,y] and the specific  dz = m dx + n dy

(4) Plot the surface and tangent

(5) Zoom in to scale dU

Clear[x, y, dx, dy, f, fX, fY]; \(f[x_, y_] := 3\ Exp[\(-\(x\^2\/3\)\) - y\^2\/5]; 


    fX[x_, y_]\  := \ Evaluate[D[f[x, y], x]]; 

    fY[x_, y_]\  := \ Evaluate[D[f[x, y], y]]; 


    dz[dx_, dy_] := fX[x, y]\ dx + fY[x, y]\ dy; 

    \(Print["The function  z = f[x,y] = ", f[x, y]]; \)\)Print["has symbolic total differential"]; Print["dz = ", dz[dx, dy]]; x = 1.0; y = -1.0; z = f[x, y]; Print["At (x,y,f[x,y]) =", {x, y, z}, " the differnetial"]; 
    Print["dz = ", dz[dx, dy]]; curves = 
      ContourPlot[f[x + dx, y + dy] - z, {dx, -3, 3}, {dy, -3, 3}, 
        PlotRange -> {-3, 3}, DisplayFunction -> Identity]; 
    lines = 
      ContourPlot[dz[dx, dy], {dx, -3, 3}, {dy, -3, 3}, 
        PlotRange -> {-3, 3}, ContourShading -> False, 
        DisplayFunction -> Identity]; Show[GraphicsArray[{curves, lines}], 
      DisplayFunction -> $DisplayFunction]; Show[{curves, lines}, DisplayFunction -> $DisplayFunction];

dU = 0.1;
zoom2D[f,x,y,dU,AxesLabel->{"dx","dy","dz"}]

Exercises

The Micro3D NoteBook

These exercises can also be done with the Micro3D NoteBook.

Exercise 18.2.1

This exercise can be done with this NoteBook or the Zoom3D NoteBook.

Modify the function in this notebook to calculate the differentials and show microscopic views of some of the functions in  Exercise 18.2.1:

a)  z  = x (y^2) + (x^3) y

b)  z = Sin[x]^3 + Cos[y]^4

c)  z = Sin[x*y]*Cos[x*y]

d)  z = (Sqrt[1 - (x^2) - (y^2)]) Cos[2 π x y]

e)  z = (Sqrt[(x^2) + Sin[(y^2)]])

f) z = (1/(Sqrt[(x^2) + (y^2)]))

g)  z = (2 (x^2) + 3 (y^2)) Exp[-((x^2) + (y^2))]
	or  z = (2 (x^2) + 3 (y^2)) (e^(-((x^2) + (y^2))))

h)  z = 2 x y Exp[-(((x^2)/2) + ((y^2)/8))]

    or z = 2 x y (e^(-(((x^2)/2) + ((y^2)/8))))

i)  z = ArcTan[(x^2) (y^3)]

j)  z = Log[(x^2) + (y^4)]

Simply copy, paste and edit as needed.  Be careful to plot your functions over interesting domains of the independent variables.

Which (x,y)-points have both partials equal to zero?

NOTE:

We especially recommend that you magnify

z = (Sqrt[(x^2) + Sin (y^2)]) at (x,y)=(0,0)

and explain what you see.