No BSD License  

Highlights from
Clebsch Gordan Coefficient Solver GUI

image thumbnail
from Clebsch Gordan Coefficient Solver GUI by james jun
Easy to use Clebsch-Gordan coefficient solver for adding two angular momentums.

solveinitcoef( init_i )
function [ init_c ] = solveinitcoef( init_i )
%SOLVEINITCOEF initial indices and coefficients

[numtuple temp] = size(init_i); %there are as many numtuples as num var
if (numtuple == 1)
    init_c = sym(1);
    return;
end

init_c = sym(zeros([1 numtuple]));
for i = 1:numtuple
    init_c(i) = sym(['x' num2str(i)]);
end

curr_rhs_i = sym([]);
curr_rhs_c = sym([]);

for c=1:numtuple
    [children_i children_c] = op_jplus(init_i(c,:), init_c(c));
    for ichild=1:numel(children_c)
        achild_i = children_i(ichild,:);
        achild_c = children_c(ichild);
        iloc = locateindex(curr_rhs_i, achild_i);
        if (iloc == 0)
            curr_rhs_i(end+1,:) = achild_i;
            curr_rhs_c(end+1) = achild_c;
        else
            curr_rhs_c(iloc) = curr_rhs_c(iloc) + achild_c;
        end
    end
end

expr = 'solve(';
for i=1:numel(curr_rhs_c)
    expr = [expr 'curr_rhs_c(' num2str(i) '), '];    
end

%build x1^2 + x2^2 + x3^2 + x4^2 ... -1
ALLSQR = [];
for i=1:numtuple
    ALLSQR = [ALLSQR 'x' num2str(i) '^2'];
    if (i ~= numtuple);
        ALLSQR = [ALLSQR ' + '];
    end
end
ALLSQR = [ALLSQR ' -1'];

expr = [expr '''' ALLSQR '''' ];
expr = [expr ');'];

%solve
answer = eval(expr);
for i=1:numtuple
    temp = getfield(answer, ['x' num2str(i)]);
    init_c(i) = temp(1);
end

Contact us at files@mathworks.com