---
title: 9-2. Chebyshev approximations - boundary bordering for BVP
tags: Spectral method
---
**Reference**
1. [Spectral method in Matlab](https://people.maths.ox.ac.uk/trefethen/spectral.html) by *Lloyd N. Trefethen*
---
```Matlab
% p13.m - solve linear BVP u_xx = exp(4x), u(-1)=u(1)=0
N = 16;
[D,x] = cheb(N);
D2 = D^2;
D2 = D2(2:N,2:N); % boundary conditions
f = exp(4*x(2:N));
u = D2\f; % Poisson eq. solved here
u = [0;u;0];
clf, subplot('position',[.1 .4 .8 .5])
plot(x,u,'.-','markersize',16)
exact = ( exp(4*x) - sinh(4)*x - cosh(4) )/16;
title(['max err = ' num2str(norm(u-exact,inf))],'fontsize',12)
```
---
```Matlab
% p32.m - solve u_xx = exp(4x), u(-1)=0, u(1)=1 (compare p13.m)
N = 16;
[D,x] = cheb(N);
D2 = D^2;
D2 = D2(2:N,2:N);
f = exp(4*x(2:N));
u = D2\f;
u = [0;u;0] + (x+1)/2;
clf
subplot('position',[.1 .4 .8 .5])
plot(x,u,'.-','markersize',16)
xx = -1:.01:1;
exact = (exp(4*x) - sinh(4)*x - cosh(4))/16 + (x+1)/2;
title(['max err = ' num2str(norm(u-exact,inf))],'fontsize',12)
```
---
```Matlab
% p33.m - solve linear BVP u_xx = exp(4x), u'(-1)=u(1)=0
N = 16;
[D,x] = cheb(N); D2 = D^2;
D2(N+1,:) = D(N+1,:); % Neumann condition at x = -1
D2 = D2(2:N+1,2:N+1);
f = exp(4*x(2:N));
u = D2\[f;0];
u = [0;u];
clf, subplot('position',[.1 .4 .8 .5])
plot(x,u,'.-','markersize',16)
axis([-1 1 -4 0])
exact = (exp(4*x) - 4*exp(-4)*(x-1) - exp(4))/16;
title(['max err = ' num2str(norm(u-exact,inf))],'fontsize',12)
```
---
```Matlab
% p34.m - Allen-Cahn eq. u_t = eps*u_xx+u-u^3, u(-1)=-1, u(1)=1
% (compare p6.m and p32.m)
% Differentiation matrix and initial data:
N = 20; [D,x] = cheb(N); D2 = D^2; % use full-size matrix
D2([1 N+1],:) = zeros(2,N+1); % for convenience
eps = 0.01; dt = min([.01,50*N^(-4)/eps]);
t = 0; v = .53*x + .47*sin(-1.5*pi*x);
% Solve PDE by Euler formula and plot results:
tmax = 100; tplot = 2; nplots = round(tmax/tplot);
plotgap = round(tplot/dt); dt = tplot/plotgap;
plotdata = [v'; zeros(nplots,length(x))]; tdata = t;
for i = 1:nplots
for n = 1:plotgap
t = t+dt; v = v + dt*(eps*D2*(v-x) + v - v.^3); % Euler
end
plotdata(i+1,:) = v; tdata = [tdata; t];
end
clf, subplot('position',[.1 .4 .8 .5])
mesh(x,tdata,plotdata), grid on, axis([-1 1 0 tmax -1 1]),
view(-60,55), colormap(1e-6*[1 1 1]); xlabel x, ylabel t, zlabel u
```
---
```Matlab
% p35.m - Allen-Cahn eq. as in p34.m, but with boundary condition
% imposed explicitly ("method (II)")
% Differentiation matrix and initial data:
N = 20; [D,x] = cheb(N); D2 = D^2;
eps = 0.01; dt = min([.01,50*N^(-4)/eps]);
t = 0; v = .53*x + .47*sin(-1.5*pi*x);
% Solve PDE by Euler formula and plot results:
tmax = 100; tplot = 2; nplots = round(tmax/tplot);
plotgap = round(tplot/dt); dt = tplot/plotgap;
plotdata = [v'; zeros(nplots,length(x))]; tdata = t;
for i = 1:nplots
for n = 1:plotgap
t = t+dt; v = v + dt*(eps*D2*v + v - v.^3); % Euler
v(1) = 1 + sin(t/5)^2; v(end) = -1; % BC
end
plotdata(i+1,:) = v; tdata = [tdata; t];
end
clf, subplot('position',[.1 .4 .8 .5])
mesh(x,tdata,plotdata), grid on, axis([-1 1 0 tmax -1 2]),
view(-60,55), colormap(1e-6*[1 1 1]); xlabel x, ylabel t, zlabel u
```
---
```Matlab
% p38.m - solve u_xxxx = exp(x), u(-1)=u(1)=u'(-1)=u'(1)=0
% (compare p13.m)
% Construct discrete biharmonic operator:
N = 15; [D,x] = cheb(N);
S = diag([0; 1 ./(1-x(2:N).^2); 0]);
D4 = (diag(1-x.^2)*D^4 - 8*diag(x)*D^3 - 12*D^2)*S;
D4 = D4(2:N,2:N);
% Solve boundary-value problem and plot result:
f = exp(x(2:N)); u = D4\f; u = [0;u;0];
clf, subplot('position',[.1 .4 .8 .5])
plot(x,u,'.','markersize',16)
axis([-1 1 -.01 .06]), grid on
line(x,u)
% Determine exact solution and print maximum error:
A = [1 -1 1 -1; 0 1 -2 3; 1 1 1 1; 0 1 2 3];
V = vander(x); V = V(:,end:-1:end-3);
c = A\exp([-1 -1 1 1]'); exact = exp(x) - V*c;
title(['max err = ' num2str(norm(u-exact,inf))],'fontsize',12)
```
---