Code covered by the BSD License

Chebfun V4

30 Apr 2009 (Updated )

Numerical computation with functions instead of numbers.

Editor's Notes:

This file was selected as MATLAB Central Pick of the Week

Jump Conditions in BVPS

Jump Conditions in BVPS

Nick Hale, 25th November 2011

(Chebfun Example ode/JumpConditions.m)

Chebfun has recently added support for jump conditions in solutions to differential equations. Here we'll demonstrate this on a few toy examples.

N = chebop(@(x,u) 1e-2*diff(u,2) + sin(x).*u);


and add some dirichlet boundary conditions

N.lbc = 1; N.rbc = 1;


Now let's solve this as it is (i.e., without jumps) for reference.

u1 = N\0
plot(u1)

u1 =
chebfun column (1 smooth piece)
interval       length   endpoint values
[      -1,       1]       47        1        1
vertical scale = 1.7


Suppose we want to add a jump condition at the origin. To do this we'd use the .bc field as follows

N.bc = @(x,u) feval(u,0,'right') - feval(u,0,'left') - 1;
u2 = N\0
plot(u2)

u2 =
chebfun column (2 smooth pieces)
interval       length   endpoint values
[      -1,       0]       25        1     0.39
[       0,       1]       27      1.4        1
Total length = 52   vertical scale =   1


The above notation is a bit clunky, and the syntax 'jump' can be used instead. For example, we get the same result as above with

N.bc = @(x,u) jump(u,0) - 1;
u3 = N\0
norm(u3-u2)

u3 =
chebfun column (2 smooth pieces)
interval       length   endpoint values
[      -1,       0]       25        1     0.39
[       0,       1]       27      1.4        1
Total length = 52   vertical scale =   1
ans =
0


We can quickly around and make a jump appear instead in the derivative

N.bc = @(x,u) jump(diff(u),0) + 2*pi;
u4 = N\0
plot(u4)

u4 =
chebfun column (2 smooth pieces)
interval       length   endpoint values
[      -1,       0]       30        1      1.6
[       0,       1]       26      1.6        1
Total length = 56   vertical scale = 1.6


Or go crazy and introduce multiple jumps!

N.bc = @(x,u) [jump(u,-.8:.2:.8) - (-.8:.2:.8),...
jump(diff(u),-.8:.2:.8) + (-.8:.2:.8)];
u5 = N\0
plot(u5)

u5 =
chebfun column (10 smooth pieces)
interval       length   endpoint values
[      -1,    -0.8]       14        1     0.57
[    -0.8,    -0.6]       14    -0.23     0.27
[    -0.6,    -0.4]       14    -0.33     0.27
[    -0.4,    -0.2]       13    -0.13     0.65
[    -0.2,       0]       19     0.45      1.6
[       0,     0.2]       14      1.6      2.7
[     0.2,     0.4]       14      2.9      1.8
[     0.4,     0.6]       14      2.2     -1.4
[     0.6,     0.8]       14    -0.82     -2.1
[     0.8,       1]       14     -1.3        1
Total length = 144   vertical scale =   1


I'd be very interested to hear if you have any practical problems which require these kinds of conditions!