ta[x_] := Together[Apart[x]]; te[x_] := Together[Expand[x]]; fe[x_] := Factor[Expand[x]]; ce[x_] := ComplexExpand[x]; mp[A_,p_]:=MatrixPower[A,p]; mf[A_] := MatrixForm[A]; simp[x_]:= Simplify[x]; fs[x_]:= FullSimplify[x]; rat[x_]:=Rationalize[x]; eq0[x_] := Module[{y}, f[y_] := y == 0; Map[f, x]] minor[M_,i_,j_] := Table[M[[Drop[Table[k,{k,Length[M]}],{i}][[m]], Drop[Table[k,{k,Length[M]}],{j}][[n]]]] ,{m,Length[M]-1},{n,Length[M]-1}]; cofactor[M_] := Transpose[Table[(-1)^(i+j)*Det[minor[M,i,j]],{i,Length[M]},{j,Length[M]}]]; repose[M_] := Array[m,Dimensions[M]]/. Flatten[Table[m[i,j]->M[[Dimensions[M][[2]]-j+1,Dimensions[M][[1]]-i+1]] ,{i,Dimensions[M][[1]]},{j,Dimensions[M][[2]]}],1]; funcEval[F_,x_,y_] := Module[{z},z=x; F/.Table[z[[i]]->y[[i]],{i,Length[x]}]]; norm[x_,n_] := If[x[[n]]!=0,x/x[[n]],x,x/x[[n]]]; homPolyDeg[f_, x_] := Exponent[ Expand[f][[1]] /. Table[x[[i]] -> y, {i, Length[x]}] , y]; jacob[f_,x_] := Module[{y},y=x; Table[D[f[[i]],y[[j]]],{i,Length[f]},{j,Length[x]}]]; jacobEval[f_,x_,y_] := funcEval[jacob[f,x],x,y]; diff[F_,x_] := Module[{y},y=x;Table[D[F, y[[i]]],{i,Length[x]}]]; diffEval[F_,x_,y_] := funcEval[diff[F,x],x,y]; cross[f_, x_] := diff[ Det[Append[ jacob[f, x] , Table[U[i], {i, Length[x]}]]] , Table[U[i], {i, Length[x]}]]; reId[n_] := Table[IdentityMatrix[n][[n-i]],{i,0,n-1}] reDiff[F_,x_] :=reId[Length[x]].diff[F,x] wedge1form1form[f_,g_] := Cross3[A,B]/.{A->f,B->g}; wedge1form1formEval[f_,g_,x_,y_] := funcEval[Wedge1form1form[f,g],x,y]; numfunc[f_,x_,n_] := N[f[N[x,n]],n]; hPlaneOnDimpoints[a_,x_] := Collect[ta[ Det[Insert[a,x,1]] ] ,x]; pointOnDimHPlanes[l_,x_,normVar_] := ta[norm[x/.Solve[Table[l[[i]]==0,{i,Length[l]}],x][[1]],normVar]]//Quiet; eucNorm[x_] := Sum[x[[i]]^2,{i,Length[x]}]/Sqrt[Sum[x[[i]]^2,{i,Length[x]}]]; hermprod[x_,y_] := ta[ComplexExpand[Conjugate[x].y]]; hermform[P_] := ta[P.ComplexExpand[Conjugate[Transpose[P]]]]; linNorm[l_,x_,n_] := Module[{y},y=x; ta[(Collect[Apart[l],y]/Coefficient[Collect[Apart[l],y],y[[n]]])] ]; linParam[l_,n_,x_] := x/.Solve[l==0,x[[n]]][[1]]; ratDenom[a_, x_, y_] := a /. (x + Sqrt[y]) -> (x^2 - y)/(x - Sqrt[y]) crossRatio[a_,b_,c_,d_]:=((a-c)*(b-d))/((a-d)*(b-c)) mob3Pts[{a_,b_,c_}, {A_,B_,C_}]:= fs[w/.Solve[crossRatio[z,a,b,c]==crossRatio[w,A,B,C],w][[1]]] C2rect[z_] := {z//Re//ce,z//Im//ce} rect2C[x_] := x[[1]]+I*x[[2]] s2C[x_] := x[[1]]/(1-x[[3]]) + I*x[[2]]/(1-x[[3]]) C2s[z_] :={2 Re[z],2 Im[z],(Re[z]^2 + Im[z]^2 - 1)}/(Re[z]^2 + Im[z]^2 + 1) circCent3ptC[p_,q_,r_] := (Abs[p]^2 (r - q) + Abs[q]^2 (p - r) + Abs[r]^2 (q - p))/ (Conjugate[p] (r - q) + Conjugate[q] (p - r) + Conjugate[r] (q - p)) // ce; circParam3ptC[p_, q_, r_][t_] := (p - circCent3ptC[p, q, r]) E^(I*t) + circCent3ptC[p, q, r]//ce; circ3ptPlot[p_, q_, r_][T_] := ParametricPlot[C2rect[circParam3ptC[p, q, r][t]],{t, 0, T}] \!\(permAct[n_, v_] := Table[x\_i, {i, n}] /. \[IndentingNewLine]Flatten[ Table[\[IndentingNewLine]If[ i < Length[ v[\([j]\)]], \[IndentingNewLine]x\_\(v[\([j, i + 1]\)]\) -> x\_\(v[\([j, i]\)]\), \[IndentingNewLine]x\_\(v[\([j, 1]\)]\) \ -> x\_\(v[\([j, Length[v[\([j]\)]]]\)]\)\[IndentingNewLine]]\ \[IndentingNewLine], {j, Length[v]}, {i, Length[v[\([j]\)]]}]]\) permMap[n_,v_,x_] := Table[x[[i]],{i, n}] /. Flatten[Table[ If[i < Length[v[[j]]], x[[v[[j, i + 1]]]] -> x[[v[[j, i]]]], x[[v[[j, 1]]]] -> x[[v[[j, Length[v[[j]]]]]]] ] ,{j, Length[v]}, {i, Length[v[[j]]]}]] (* Invariant theoretic *) genExpress[f_,gen_,invar_,elimvar_] := GroebnerBasis[Union[{f},Table[invar[[i]] - gen[[i]], {i, Length[invar]}]],elimvar][[1]] hess[F_, x_] := Table[D[F, x[[i]], x[[j]]], {i, Length[x]}, {j, Length[x]}]; bordHess[F_, G_, x_] := Append[Transpose[ Append[ Transpose[hess[F, x]] , Table[D[G, x[[i]]], {i, Length[x]}] ]], Append[Table[D[G, x[[i]]], {i, Length[x]}], 0]]; cross3[{a1_,a2_,a3_},{b1_,b2_,b3_}]:= {a2 b3 - a3 b2, a3 b1 - a1 b3, a1 b2 - a2 b1}; sidehill3[f_,g_]:= Together[Cross3[D3[f],D3[g]]]; critical3[f_] := Jacobian3[f[[1]],f[[2]],f[[3]]]; equalityTest[x_,y_]:= ta[x]===ta[y]; invarianceTest[f_,g_]:= equalityTest[f,Transform3[f,g]]; equivarianceTest[f_,g_]:= equalityTest[Transform3[f,g],Transform3[g,f]];