This is interesting and I wanted to try an algorithm I developed with Behnam Hashemi in this paper
https://epubs.siam.org/doi/pdf/10.1137/21M1445934I'm attaching the code LSeig.m, which is needed to run the snippet below.
clear, clc
dom = [0, 1];
x = chebfun('x', dom);
op = @(x,u) diff(u,4);
n = 50; % degree of polynomial basis
T = chebpoly(0:n-1,dom);
dT2 = diff(T,2);
dT3 = diff(T,3);
A = op(x,T); B = T;
u0 = dT2(dom(1),:); u1 = dT3(dom(1),:);
u2 = dT2(dom(2),:); u3 = dT3(dom(2),:);
BC = [u0;u1;u2;u3]; BClam = zeros(size(BC));
tol = 1e-10; % accept solns with <tol residual
[V,D,res] = LSeig(A,B, BC, BClam, tol,'IM');
%[V,D,res] = LSeig(A,B, BC, BClam, tol,'qr'); % this works too
for ii = 1:size(V,2), V(:,ii) = V(:,ii)/norm(B*V(:,ii)); end % rescale soln to unit norm
RES = A*V-B*V*D; % (some of) this should be small
disp('eigvals')
disp(diag(D).')
disp('residuals')
for ii = 1:size(RES,2), resnorms(ii) = norm(RES(:,ii)); end
disp(resnorms)
disp('boundary conditions') % some may not satisfy them
disp(vecnorm([u0*V(:,:);u1*V(:,:);u2*V(:,:);u3*V(:,:)]))
disp('ensure orthogonality of eigenvectors')
disp((T*V(:,1))'*(T*V(:,2)))
Output:
eigvals
0 0
residuals
0 0
boundary conditions
0 0
ensure orthogonality of eigenvectors
1.5450e-18
It seems to work alright here, returning the constant and linear functions as solutions. The algorithm doesn't find any other solutions though.
Yuji