Introduction
Chebfun2 is designed to work with vector valued functions defined on rectangles, as well as scalar valued ones. Our convention is to use a lower case letter for a scalar function, $f$, and an upper case letter for a vector function, $F = \left(f_1,f_2\right)^T$. Vector valued functions can be approximated by objects of type chebfun2v. There are two standard ways to make a chebfun2v:
F = chebfun2v(@(x,y) sin(x), @(x,y) sin(y)); % direct construction f = chebfun2(@(x,y) sin(x)); g = chebfun2(@(x,y) sin(y)); G = [f;g]; % Concatenation of two chebfun2 objects
The parallelogram Law
Vector addition, denoted $F + G$, yields another chebfun2v and is computed by adding the two scalar components together. It satisfies the parallelogram law, which can be verified numerically, as in this example:
F = chebfun2v(@(x,y)cos(x.*y),@(x,y)sin(x.*y)); G = chebfun2v(@(x,y)x+y,@(x,y)1+x+y); abs((2*norm(F)^2 + 2*norm(G)^2) - (norm(F+G)^2 + norm(F-G)^2))
ans = 1.065814103640150e-14
The gradient theorem
The gradient of a chebfun2 is represented by a chebfun2v and is a vector that points in the direction of steepest ascent of $f$. The gradient theorem says that the integral of $\mathrm{grad}(f)$ over a curve only depends on the values of $f$ at the endpoints of that curve. We can check this numerically by using the Chebfun2v command integral
. This command computes the line integral of a vector valued function. Here we check one example to confirm that the gradient theorem holds:
f = chebfun2(@(x,y)sin(2*x)+x.*y.^2); % chebfun2 object F = grad(f); % gradient (chebfun2v) C = chebfun(@(t) t.*exp(100i*t),[0 pi/10]); % spiral curve v = integral(F,C); ends = f(pi/10,0)-f(0,0); % line integral abs(v-ends) % gradient theorem
ans = 3.330669073875470e-16
Another consequence of the gradient theorem is that the integral of $\mathrm{grad}(f)$ over any closed curve is zero. For example, here is an exotic closed curve, which we plot superimposed on the vector field $\mathrm{grad}(f)$.
circ = @(p) chebfun(@(x) exp(2i*p*pi*x + 0.8i)); C = (circ(1) + circ(3)/1.5 + circ(8)/3.5) / 2; figure('position', [0 0 600 400]) quiver(F,0.5,'numpts',12), hold on plot(C, 'r'), axis equal off
Its integral should be zero.
v = integral(F,C)
v = -2.685583934679247e-15
Curl of the gradient
If the chebfun2v $F$ describes a vector velocity field of fluid flow, then $\mathrm{curl}(F)$ is a scalar function equal to twice the angular speed of a particle in the flow at each point. A particle moving in a gradient field has zero angular speed and hence, $\mathrm{curl}(\mathrm{grad}(f))=0$, a well known identity that can also be checked numerically. For example,
norm(curl(grad(f)))
ans = 1.502979114793980e-15
More information
The code found in this Example can also be found in [1] along with additional information about vector calculus in Chebfun2.
References
- A. Townsend and L. N. Trefethen, An extension of Chebfun to two dimensions, SIAM Journal on Scientific Computing, 35 (2013), C495-C518.