kill(all);

some (possibly) useful assumptions

assume(a>0,r>0);

some auxiliary function definitions

rowvec( l ) := matrix( l )$
colvec( l ) := transpose( rowvec( l ) )$

norm( v ) := sqrt( sum((v[i])^2,i,1,3) );

length of a PQ segment

l(P,Q) := norm( P - Q );

stiffness of a truss element (interpreted as a spring)

k(P,Q) := E*area / l(P,Q);

a first, reference geometry

case1:[  
    A=[-a, 0, 0],
    B=[ a, 0, 0],    
    C=[ 0, a, 0],    
    D=[ 0, 0, a]
];

a parametrically varied, alternative geometry

case2:[  
    A=[-a*r, 0, 0],
    B=[ a*r, 0, 0],    
    C=[ 0  , a, 0],    
    D=[ 0  , 0, a]
];

stiffness matrix for case 1

 K1: 
  k(D,A)* (colvec( (D-A)/norm(D-A) ).rowvec( (D-A)/norm(D-A) ))
+ k(D,B)* (colvec( (D-B)/norm(D-B) ).rowvec( (D-B)/norm(D-B) )) 
+ k(D,C)* (colvec( (D-C)/norm(D-C) ).rowvec( (D-C)/norm(D-C) ))
,case1$

stiffness matrix for case 2

 K2: 
  k(D,A)* (colvec( (D-A)/norm(D-A) ).rowvec( (D-A)/norm(D-A) ))
+ k(D,B)* (colvec( (D-B)/norm(D-B) ).rowvec( (D-B)/norm(D-B) )) 
+ k(D,C)* (colvec( (D-C)/norm(D-C) ).rowvec( (D-C)/norm(D-C) ))
,case2$

reduction to a standard (vs. generalized eigenvalue problem)

for a given 
"d"=[u,v,w], search for
"F"=[U, V, W]=[Fu, Fv, Fw] = K * d
K is the stiffness of the structure

F1 = K1*d for case 1, r=1
F2 = K2*d for case 2, free "r"

In order to directly compare the two elastic responses, 
we search for proportional F1, F2, 
and consider the relative "λ" factor, namely

F2   = λ*F1 for the same "d", i.e.
K2*d = λ*K1*d,
(K2 - λ*K1)*d=0 , "generalized" eigenproblem
(K1^(-1)*K2-λ*I)*d=0
 \___  ___/
     \/
(     A    -λ*I)*x=0 ,  standard eigenproblem,m with A= K1^(-1)*K2

A : ratsimp( invert(K1).K2 );

symbolic eigenproblem solution

[[vals,mults], vecs] : eigenvectors(A);

normalization of the eigenvectors

vecs : makelist(
    ivec[1]/norm(ivec[1]), /* template for the generic element of the new list, based on a placeholder */
    ivec, /* the placeholder for each element in the 3rd argument list */
    vecs /* previous list containing the elements used to derive the new list */
)$

some numerical examples

[vals,vecs],r=0.75,numer;

[vals,vecs],r=1.25,numer;