[max_:=10^10,m1_:=[],m2_:=[],m3_:=[],m4_:=[]] TR(a):=a` ID(n):=IDENTITY_MATRIX(n) E__(n,i):=(IDENTITY_MATRIX(n)) SUB i EE__(n,m,i,j):=[E__(n,i)]`*[E__(m,j)] UNO(n,m):=IF(n=0 OR m=0,[],[VECTOR(1,i,n)]`*[VECTOR(1,i,m)]) ZERO(n,m):=IF(n=0 OR m=0,[],0*EE__(n,m,1,1)) MINDIM(a):=MIN(DIMENSION(a),DIMENSION(a`)) RANGO(a):=IF(DIMENSION(a)=DIMENSION(a`),TRACE(ROW_REDUCE(ROW_REDUCE(a)`)),SUM~ ((ROW_REDUCE(ROW_REDUCE(a)`)) SUB i SUB i,i,1,MINDIM(a))) RANGOQ(a):=TRACE(ROW_REDUCE(ROW_REDUCE(a)`)) SUBMAT(a,v_ri,v_co):=VECTOR(VECTOR(a SUB (v_ri SUB i) SUB (v_co SUB j),j,DIME~ NSION(v_co)),i,DIMENSION(v_ri)) PR_SUBMAT(a,v):=SUBMAT(a,v,v) MINORE(a,v_ri,v_co):=DET(SUBMAT(a,v_ri,v_co)) RREF(a):=ROW_REDUCE(a) RREF_I(a):=ROW_REDUCE(a,ID(DIMENSION(a))) CREF(a):=RREF(a`)` PP_(a):=ROW_REDUCE(a,ID(DIMENSION(a)))*APPEND(0*a`,ID(DIMENSION(a))) QQ_(a):=(RREF_I(ROW_REDUCE(a)`)*APPEND(0*a,ID(DIMENSION(a`))))` SS(a):=QQ_(a)*CREF(RREF(a))`*PP_(a) APPENDI(v):=IF(DIMENSION(v)>1,APPEND(v),v SUB 1) BLOCCHI(m1_,m2_,m3_,m4_):=APPEND(APPEND(m1_,m3_)`,APPEND(m2_,m4_)`)` DIAG_1(v,d):=VECTOR(IF(i+d<1 OR i+MIN(0,d)>DIMENSION(v),0*(ID(DIMENSION(v)+AB~ S(d))) SUB 1,(ID(DIMENSION(v)+ABS(d))) SUB (i+d)*v SUB (i+MIN(0,d))),i,DIMENS~ ION(v)+ABS(d)) DIAG(v,d):=IF(d/=0,DIAG_1(v,d),DIAG_1(v,0),VECTOR(ELEMENT(ID(DIMENSION(v)),i)~ *ELEMENT(v,i),i,DIMENSION(v))) CO(a,i):=ELEMENT(a`,i) RIDUCI(a):=[ROW_REDUCE(a),PP_(a)] APPLICA(f,x,v):=VECTOR(SUBST(f,x,a),a,v) IMM(a):=VECTOR((RREF(a`)) SUB i,i,RANGO(a))` NUCLEO(a):=VECTOR((PP_(a`)) SUB i,i,RANGO(a)+1,DIMENSION(a`))` ANN(a):=VECTOR((PP_(a)) SUB i,i,RANGO(a)+1,DIMENSION(a)) GRADO(f,x):=DIMENSION(ITERATES(DIF(f_,x,1),f_:=,f))-3 VALUTA(f,x,a):=LIM(TAYLOR(f-LIM(f,x,0),x,GRADO(f,x)),x,a)+LIM(f,x,0)*ID(DIMEN~ SION(a)) VEC_POTENZE(a):=VECTOR(APPEND(a`^i),i,0,DIMENSION(a)) MINPOLY_2(a,r,x):=x^r-CO(a,r+1)*VECTOR(x^j,j,0,DIMENSION(a)-1) MINPOLY_1(a,x):=MINPOLY_2(a,SUM(a SUB i SUB i,i,1,MINDIM(a)),x) MINPOLY(a,x):=MINPOLY_1(RREF(VEC_POTENZE(a)`),x) COEF(f,i,x):=SUBST(DIF(f,x,i),x,0)/i! LEADING(f,x):=COEF(f,GRADO(f,x),x) R_CHARPOLY1(f,x):=SIGN(LEADING(f,x))*f/POLY_GCD(f,DIF(f,x)) R_CHARPOLY(a,x):=R_CHARPOLY1(CHARPOLY(a,x),x) R_MINPOLY1(f,x):=f/POLY_GCD(f,DIF(f,x)) R_MINPOLY(a,x):=R_MINPOLY1(MINPOLY(a,x),x) DIAGONALIZZABILE2(a,cra):=IF(cra=0,"si', sul campo complesso","no",[["condizi~ one necessaria",cra=0]]) DIAGONALIZZABILE1(a,cr):=IF(GRADO(cr,w)=DIMENSION(a),"si', sul campo compless~ o (autovalori distinti)",DIAGONALIZZABILE2(a,VALUTA(cr,w,a)),DIAGONALIZZABILE~ 2(a,VALUTA(cr,w,a))) DIAGONALIZZABILE(a):=DIAGONALIZZABILE1(a,R_MINPOLY(a,w)) JOR_1(v_r,j):=VECTOR([i,IF(i=1,IF(DIMENSION(v_r)=1,j-v_r SUB 1,v_r SUB 2+j-2*~ v_r SUB 1),IF(i=DIMENSION(v_r),v_r SUB (i-1)-v_r SUB i,v_r SUB (i-1)+v_r SUB ~ (i+1)-2*v_r SUB i))],i,DIMENSION(v_r))` JORDAN_0(a):=JOR_1(VECTOR(RANGOQ(a^i),i,RANGOQ(a)-RANGOQ(a^DIMENSION(a))+1),D~ IMENSION(a)) JORDAN(a,v_t):=IF(ABS(v_t)>0,JORDAN_0(a-v_t*ID(DIMENSION(a))),JORDAN_0(a),JOR~ DAN_0(a)) SIMIL(a,p):=p^(-1)*a*p RANGHI(a):=VECTOR(RANGOQ(a^i),i,0,DIMENSION(a)) RANGHI_NIL(a):=ITERATES([a*a_,RANGOQ(a_)],[a_:=,r_:=],[a,DIMENSION(a)])` SUB ~ 2 PPC_(a):=PP_(a`)` NUCLEI_1(a,n):=(ITERATE([a*a_*q_,PPC_(a*a_*q_),q__*q_],[a_:=,q_:=,q__:=],[a,P~ PC_(a),ID(DIMENSION(a))],n)) SUB 3 NUCLEI_2(vr,v):=VECTOR([VECTOR(vr SUB j,j,v SUB (i+1)+1,v SUB i)`,i],i,v SUB ~ 1)` NUCLEI_3(a,v):=NUCLEI_2(NUCLEI_1(a,IF(v SUB (v SUB 1)=0,@1,v SUB 2-v SUB (v S~ UB 1)+1))`,v) NUCLEI(a):=NUCLEI_3(a,RANGHI(a)) NUCLEI_NIL_1(a,v):=[p_:=NUCLEI_1(a,DIMENSION(v)-1),r_:=v] NUCLEI_NIL(a):=NUCLEI_NIL_1(a,RANGHI_NIL(a))