function [SOLS, err] = solve32( u, PP , select_polysolve) %function [SOLS, err] = solve32( u, PP , select_polysolve) % % WARNING! % This code depends heavily on the maple link being functional. Without % maple there will be failure. The code is also very far from being optimal. % % u is the matrix containing the observations. % row 1 is camera-id % row 2 is time-id % row 3 is also camera id. % row 4-6 is the observed image point. % % SOLS contains a1,b1,a2,b2 so that [ai,bi;-bi ai] gives rotation % matrix i. % % By setting the select_polysolve variable the strategy for solving the % polynomial is changed. % % It should not be very hard to build a better solver than this one. % % % % %%%% EXAMPLE CODE %clear all % %Create a random configuration of vehicle stations, space points and vehicle relative cameras. %[T,X,P] = planar_mov_randconf( 3,2 ); %a1 = T{2}(1,1); %b1 = T{2}(1,2); %a2 = T{3}(1,1); %b2 = T{3}(1,2); % %[l,u] = observe_plucker_as_cell( T,X,P ); % %for kk=0:1 % if not(kk ) % [SOLSold, err] = solve32( u , P ); % else % [SOLSold, err] = solve32( u , P ,1); % end % % Tar bort de l%G�%@ningar som %G�%@ f%G�%@ m%G�%@ga! % % % [dummy, I] = sortrows( abs( SOLSold') ); % %% % %% Must rotate the solutions so that we can check if they are correct. % %% [ a1;b1;c1;d1; a2;b2;c2;d2; a3;b3;c3;d3; z1;y2;z2]; % % for i=1:size(SOLSold,2) % R0=[SOLSold(1,i) SOLSold(2,i); -SOLSold(2,i) SOLSold(1,i) ] ; % R1=[SOLSold(5,i) SOLSold(6,i); -SOLSold(6,i) SOLSold(5,i) ] ; % R2=[SOLSold(9,i) SOLSold(10,i); -SOLSold(10,i) SOLSold(9,i) ] ; % R1 = R1*inv(R0); % R2 = R2*inv(R0); % S2(:,i) = [R1(1,1); R2(1,1); R1(1,2);R2(1,2)]; % end % SOLSold = S2; % terr = SOLSold - ([a1;a2;b1;b2]*ones(1,size(S2,2))); % % if not(kk ) % err_old = min(sum(abs(terr))); % else % err_new = min(sum(abs(terr))); % end % %end %disp( [err_old err_new]) % %If using this code, please refer to any of the two publications below. % %@PHDTHESIS{stewenius-pdh-2005, % AUTHOR = {H. Stew\'enius}, % TITLE = {Gr{\"o}bner Basis Methods for Minimal Problems in Computer Vision}, % SCHOOL = {Lund University}, % YEAR = 2005, % MONTH = APR, % PDF = {http://www.maths.lth.se/matematiklth/personal/stewe/THESIS/stewenius_phd_2005.pdf} %} % % %@INPROCEEDINGS{stewenius-astrom-eccv-2004, % AUTHOR = {H. Stew\'enius and K. {\AA}str{\"o}m}, % TITLE = {Structure and Motion Problems for Multiple Rigidly Moving Cameras}, % BOOKTITLE = {European Conference on Computer Vision (ECCV)}, % YEAR = 2004, % MONTH = MAY, % ADDRESS = {Prague , Czech Republic}, % PAGES = {238ff}, % NOTE = {An improved version of this in Chapter 9 of my thesis} %} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:2 for j=1:3 for k=1:4 eval( sprintf( 'p%i%i%i = PP{%i}(%i,%i);\n', i,j,k,i,j,k) ) ; end end end for uu =u trackid = uu(1); timeid = uu(2); camid = uu(3); uu = uu(4:end); eval( sprintf( 'u%i%i1 = uu(1);\n',trackid, timeid )); eval( sprintf( 'u%i%i2 = uu(2);\n',trackid, timeid )); end % Här kommer block som kommer från % create_buildAB_code.m % Maskingenererat! A=[[0,0,0,0,0,0];[0,0,0,0,0,0];[0,0,0,0,0,0];[p212,0,0,p211,0,0];[p222,0,0,p221,0,0];[p232,0,0,p231,0,0];[0,0,0,0,0,0];[0,0,0,0,0,0];[0,0,0,0,0,0];[0,p212,0,0,p211,0];[0,p222,0,0,p221,0];[0,p232,0,0,p231,0];[0,0,0,0,0,0];[0,0,0,0,0,0];[0,0,0,0,0,0];[0,0,p212,0,0,p211];[0,0,p222,0,0,p221];[0,0,p232,0,0,p231]]; B=[[p113,0,p111,0,0,p112,0,0,-1.*u111,0,0,0,0,0,p114];[p123,0,p121,0,0,p122,0,0,-1.*u112,0,0,0,0,0,p124];[p133,0,p131,0,0,p132,0,0,-1.,0,0,0,0,0,p134];[0,p213,p211,0,0,p212,0,0,0,0,0,-1.*u211,0,0,p214];[0,p223,p221,0,0,p222,0,0,0,0,0,-1.*u212,0,0,p224];[0,p233,p231,0,0,p232,0,0,0,0,0,-1.,0,0,p234];[p113,0,0,p111,0,0,p112,0,0,-1.*u121,0,0,0,0,p114];[p123,0,0,p121,0,0,p122,0,0,-1.*u122,0,0,0,0,p124];[p133,0,0,p131,0,0,p132,0,0,-1.,0,0,0,0,p134];[0,p213,0,p211,0,0,p212,0,0,0,0,0,-1.*u221,0,p214];[0,p223,0,p221,0,0,p222,0,0,0,0,0,-1.*u222,0,p224];[0,p233,0,p231,0,0,p232,0,0,0,0,0,-1.,0,p234];[p113,0,0,0,p111,0,0,p112,0,0,-1.*u131,0,0,0,p114];[p123,0,0,0,p121,0,0,p122,0,0,-1.*u132,0,0,0,p124];[p133,0,0,0,p131,0,0,p132,0,0,-1.,0,0,0,p134];[0,p213,0,0,p211,0,0,p212,0,0,0,0,0,-1.*u231,p214];[0,p223,0,0,p221,0,0,p222,0,0,0,0,0,-1.*u232,p224];[0,p233,0,0,p231,0,0,p232,0,0,0,0,0,-1.,p234]]; % slut block N = []; h1 = [1 2 1]; h2 = [2 7 7]; for var = 1:6 for i=1:3 hole1 = h1(i); hole2 = h2(i); I=[1:(hole1-1) (hole1+1):(hole2-1) (hole2+1):18]; N(i,var) = det( [B(I,1) A(I,var) B(I,2:end)]); end end vec = null(N); N = inv(N(1:3,1:3))*N; N(1:3,1:3) = eye(3); syms b1 b2 b3 bvec = [b1;b2;b3]; a1 = -N(1,4:end)*bvec; a2 = -N(2,4:end)*bvec; a3 = -N(3,4:end)*bvec; eq = [maple('expand', a1^2+b1^2-1 ); maple('expand', a2^2+b2^2-1 ); maple('expand', a3^2+b3^2-1 );]; MONS2 = [2 1 0 1 0 0 1 0 0 0 0 1 2 0 1 0 0 1 0 0 0 0 0 1 1 2 0 0 1 0]; mcoeff=inline(['maple(''coeff'', '... 'maple(''coeff'', '... 'maple(''coeff'', '... 'f,''b1'',n(1)),''b2'',n(2)),''b3'',n(3))'] ... ,'f','n'); M = zeros( 3,10); for i=1:3 for j=1:10 M(i,j) = eval( mcoeff( eq(i), MONS2(:,j))); end end M = inv(M(:,1:3))*M; M(:,1:3) = eye(3); MONS3 = [3 2 1 0 2 1 0 1 0 0 2 1 0 1 0 0 1 0 0 0 0 1 2 3 0 1 2 0 1 0 0 1 2 0 1 0 0 1 0 0 0 0 0 0 1 1 1 2 2 3 0 0 0 1 1 2 0 0 1 0]; MONS4 = [4 3 2 1 0 3 2 1 0 2 1 0 1 0 0 3 2 1 0 2 1 0 1 0 0 2 1 0 1 0 0 1 0 0 0 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0 0 1 2 3 0 1 2 0 1 0 0 1 2 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 1 2 2 2 3 3 4 0 0 0 0 1 1 1 2 2 3 0 0 0 1 1 2 0 0 1 0 ]; M23ett = build_multiplication_matrix( MONS2,MONS3, [0 0 0] ); M23b1 = build_multiplication_matrix( MONS2,MONS3, [1 0 0] ); M23b2 = build_multiplication_matrix( MONS2,MONS3, [0 1 0] ); M23b3 = build_multiplication_matrix( MONS2,MONS3, [0 0 1] ); M34ett = build_multiplication_matrix( MONS3,MONS4, [0 0 0] ); M34b1 = build_multiplication_matrix( MONS3,MONS4, [1 0 0] ); M34b2 = build_multiplication_matrix( MONS3,MONS4, [0 1 0] ); M34b3 = build_multiplication_matrix( MONS3,MONS4, [0 0 1] ); M2 = [M*M23ett M*M23b1 M*M23b2 M*M23b3 ]; % M2([4 5 6 9:end 1:3 7 8 ],: ) M2 = inv( M2(:,[1:9 11 12 13] ))*M2; M2(:,[1:9 11 12 13] )= eye(12); M4 = [M2*M34ett M2*M34b1 M2*M34b2 M2*M34b3 ]; M4 = (M4(:,[1:24 26:28] ))\M4; M4(:,[1:24 26:28] ) = eye(27); outher_points = MONS4(:,[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28]); inner_points = MONS4(:,[25 29 30 31 32 33 34 35]); M = []; for p=inner_points p = p+[0;0;1]; t= ismember( inner_points' , p', 'rows' )' ; if any( t ) % disp( t ) ; M= [M; t]; else t= ismember(outher_points' , p', 'rows' )' ; I = find( t ); % disp( I ); M = [M; -M4(I,[25 29 30 31 32 33 34 35])]; end end syms alpha1 alpha2 alpha3 r = vec*[alpha1;alpha2;alpha3]; r= maple('evalf', r ); p = [r(1)^2+r(4)^2-1; r(2)^2+r(5)^2-1; r(3)^2+r(6)^2-1;]; if exist( 'select_polysolve' ) alpha = polysolve222_2( p ); else alpha = polysolve222( p ); end %maple( 'solve', ['{' char( p(1)) ',' char(p(2)) ',' char(p(3)) '}' ] ) ab_sols = vec*alpha'; % ab_sols = ab_sols(:, find( not(imag(ab_sols(1,:))) )); err=[]; ab_sols; for i=1:size( ab_sols,2) AA = A*ab_sols(:,i); MMM = [B(:,1) AA B(:,2:end)]; rest_sols = null(MMM ); rest_sols = rest_sols/rest_sols(end); a1= ab_sols(1,i); a2= ab_sols(2,i); a3= ab_sols(3,i); b1= ab_sols(4,i); b2= ab_sols(5,i); b3= ab_sols(6,i); z1 = rest_sols(1 ); y2 = rest_sols(2 ); z2 = rest_sols(3 ); c1 = rest_sols(4 ); c2 = rest_sols(5 ); c3 = rest_sols(6 ); d1 = rest_sols(7 ); d2 = rest_sols(8 ); d3 = rest_sols(9 ); lambda11 = rest_sols(10 ); lambda12 = rest_sols(11 ); lambda13 = rest_sols(12 ); lambda21 = rest_sols(13 ); lambda22 = rest_sols(14); lambda23 = rest_sols(15 ); T1 = [a1 b1 0 c1;-b1 a1 0 d1 ; 0 0 1 0 ; 0 0 0 1]; T2 = [a2 b2 0 c2;-b2 a2 0 d2 ; 0 0 1 0 ; 0 0 0 1]; T3 = [a3 b3 0 c3;-b3 a3 0 d3 ; 0 0 1 0 ; 0 0 0 1]; T= {T1, T2,T3}; X1 = [0;0;z1;1]; X2 = [0;y2;z2;1]; lambda{1} = {lambda11, lambda12, lambda13 }; lambda{2} = {lambda21, lambda22, lambda23 }; X= {X1, X2}; M= []*b1; for uu =u trackid = uu(1); timeid = uu(2); camid = uu(3); uu = uu(4:end); t = PP{camid}*T{timeid}*X{trackid}- lambda{trackid}{timeid}*uu ; M= [M;t]; end err = [err norm(M ) ]; SOLS(:,i) = [ a1;b1;c1;d1; a2;b2;c2;d2; a3;b3;c3;d3; z1;y2;z2]; end if norm( err) > 1e-10 err warning('Very large residuals in solve32.m' ) end function alpha = polysolve222( p ) coeff = inline('maple(''coeff'',f,x)','f','x'); if 0 load vec.mat syms alpha1 alpha2 alpha3 r = vec*[alpha1;alpha2;alpha3]; r= maple('evalf', r ); p = [r(1)^2+r(4)^2-1; r(2)^2+r(5)^2-1; r(3)^2+r(6)^2-1;]; end for i=1:3 p(i) = maple('expand', p(i) ); end q11 = eval(coeff( p(1) , 'alpha1^2')); q12 = eval(coeff( p(1) , 'alpha2^2')); q13 = eval(coeff( p(1) , 'alpha3^2')); q14 = eval(coeff(coeff(p(1), 'alpha1'), 'alpha2')); q15 = eval(coeff(coeff(p(1), 'alpha1'), 'alpha3')); q16 = eval(coeff(coeff(p(1), 'alpha2'), 'alpha3')); q21 = eval(coeff( p(2) , 'alpha1^2')); q22 = eval(coeff( p(2) , 'alpha2^2')); q23 = eval(coeff( p(2) , 'alpha3^2')); q24 = eval(coeff(coeff(p(2), 'alpha1'), 'alpha2')); q25 = eval(coeff(coeff(p(2), 'alpha1'), 'alpha3')); q26 = eval(coeff(coeff(p(2), 'alpha2'), 'alpha3')); q31 = eval(coeff( p(3) , 'alpha1^2')); q32 = eval(coeff( p(3) , 'alpha2^2')); q33 = eval(coeff( p(3) , 'alpha3^2')); q34 = eval(coeff(coeff(p(3), 'alpha1'), 'alpha2')); q35 = eval(coeff(coeff(p(3), 'alpha1'), 'alpha3')); q36 = eval(coeff(coeff(p(3), 'alpha2'), 'alpha3')); M=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,q11,0,-1];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,q11,0,-1,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,q11,0,-1,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,q11,0,-1,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,-1,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,-1,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q13,q16,q12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q15,q14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q11,0,-1,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,q21,0,-1];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,q21,0,-1,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,q21,0,-1,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,q21,0,-1,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,-1,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,-1,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q23,q26,q22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q25,q24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q21,0,-1,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,q31,0,-1];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,q31,0,-1,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,q31,0,-1,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,q31,0,-1,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,-1,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,-1,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q33,q36,q32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q35,q34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,q31,0,-1,0,0,0,0,0,0]]; [l,u] = lu(M ) ; p1 = ( u(end-5, end-8:end) ); alpha1 = roots(p1); p2 = ( u(end-6, end-9:end) ); alpha2 = -polyval( p2(2:end), alpha1)/p2(1); p3 = ( u(end-7, end-10:end) ); alpha3 = -(p3(2)*alpha2 + polyval( p3(3:end), alpha1))/p3(1); alpha = [alpha1 alpha2 alpha3]; if 0 for i=1:8 alpha1 = alpha(i,1); alpha2 = alpha(i,2); alpha3 = alpha(i,3); disp( norm(eval(p)) ) end end function alpha = polysolve222_2( p ) MONS2 = [2 1 1 0 0 0 0 ; 0 1 0 2 1 0 0 ; 0 0 1 0 1 2 0 ; ]; mcoeff = inline( 'maple(''coeff'',maple(''coeff'',maple(''coeff'',f,''alpha1'',v(1)),''alpha2'',v(2)),''alpha3'',v(3))','f','v'); M = zeros(3,7); for i=1:3 for j=1:7 M(i,j) = eval( mcoeff( p(i), MONS2(:,j) )); end end MONS3 = [3 2 1 0 2 1 0 1 0 0 2 1 0 1 0 0 1 0 0 0 0 1 2 3 0 1 2 0 1 0 0 1 2 0 1 0 0 1 0 0 0 0 0 0 1 1 1 2 2 3 0 0 0 1 1 2 0 0 1 0]; MONS4 = [4 3 2 1 0 3 2 1 0 2 1 0 1 0 0 3 2 1 0 2 1 0 1 0 0 2 1 0 1 0 0 1 0 0 0 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0 0 1 2 3 0 1 2 0 1 0 0 1 2 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 1 2 2 2 3 3 4 0 0 0 0 1 1 1 2 2 3 0 0 0 1 1 2 0 0 1 0 ]; m24_ett = build_multiplication_matrix( MONS2, MONS4, [0;0;0] ); m24_11 = build_multiplication_matrix( MONS2, MONS4, [2;0;0] ); m24_12 = build_multiplication_matrix( MONS2, MONS4, [1;1;0] ); m24_13 = build_multiplication_matrix( MONS2, MONS4, [1;0;1] ); m24_22 = build_multiplication_matrix( MONS2, MONS4, [0;2;0] ); m24_23 = build_multiplication_matrix( MONS2, MONS4, [0;1;1] ); m24_33 = build_multiplication_matrix( MONS2, MONS4, [0;0;2] ); M4 = [M*m24_ett ; M*m24_11 ; M*m24_12 ; M*m24_13 ; M*m24_22 ; M*m24_23 ; M*m24_33 ;]; I = find( sum( abs( M4 ) )); M4 = M4(:,I(1:18))\M4 ; M4(:,I(1:18)) = eye(18); M4 = M4(:,I); MONS4 = MONS4(:,I); %%Nu vill jag betrakta action matrisen för alpha1^2 inner_points = MONS4(:,19:22); outher_points = MONS4(:,1:18); M = []; for pp=inner_points pp = pp+[0;0;2]; t= ismember( inner_points' , pp', 'rows' )' ; if any( t ) M= [M; t]; else t= ismember( outher_points' , pp', 'rows' )' ; I = find( t ) ; % disp( I ) M = [M; -M4(I,19:22)]; end end [V,D] = eig( M); alpha3 = sqrt( transpose(diag( D))); V = V./(ones(4,1)*V(end,:)); alpha1 = V(1,:)./alpha3; alpha2 = V(2,:)./alpha3; alpha = transpose( [alpha1;alpha2;alpha3] ) ; function M = build_multiplication_matrix( MONS_from, MONS_to, mult ) mult = mult(:)'; M =[]; for i=1:size(MONS_from,2) p = MONS_from(:,i)'; M=[M ismember( MONS_to', p+mult , 'rows' ) ]; end M = M';