Code covered by the BSD License

### Highlights fromChebfun

from Chebfun by Chebfun Team
Numerical computation with functions instead of numbers.

chebop_vs_linop
function pass = chebop_vs_linop
% Chebtest CHEBOP_VS_LINOP
%
% Solves linear BVPs, where problems are set up using both linops and
% chebops, and compares that the same solution is obtained

d = domain(0,2);
x = chebfun('x',d);
D = diff(d); D2 = diff(d,2); I = eye(d); Z = zeros(d);
%% Simple scalar example
% Solving
%   u'' + sin(x)*u = 2*x; u(0) = 1; u(2) = 2;
L = D2 + diag(sin(x));
L.lbc = 1; L.rbc = 2;
ulinop = L\(2*x);

C = chebop(@(x,u) diff(u,2) + sin(x).*u,d,1,2);
uchebop = C\(2*x);

% Those should be exactly the same
pass(1) = norm(ulinop-uchebop) == 0;

% If we include the affine part in the chebop, rather than on the RHS, the
% answers should match exactly again
C2 = chebop(@(x,u) diff(u,2) + sin(x).*u-2*x,d,1,2);
uchebop2 = C2\0;

pass(2) = norm(uchebop-uchebop2) == 0;

%% Coupled system
% Solving
%   u' + x.^2*u+v = 1
%   u+(x+1)*v'    = 2
%
% s.t.
%   u(0) = 1, v(2) = 3;

L = [D + diag(x.^2) I; I  diag(x+1)*D];
bc.left.op = [I Z]; bc.left.val = 1;
bc.right.op = [Z I]; bc.right.val = 3;
L = L & bc;
uvlinop = L\[1 2];

C = chebop(@(x,u,v) [diff(u)+x.^2.*u+v, u + (x+1).*diff(v)],d);
C.lbc = @(u,v) u-1;
C.rbc = @(u,v) v-3;
uvchebop = C\[1 2];

pass(3) = norm(uvlinop-uvchebop) == 0;