5 votos

¿Cuál es el número de composiciones del entero n tal que ninguna parte es única?

Quiero encontrar a la generación de función para el número de composiciones (ordenado particiones) de n tal que ninguna parte es única ( lo que es equivalente, cada parte aparece al menos dos veces). Por ejemplo: hay 9 tales composiciones del entero 6: 3+3, 2+2+2, 2+2+1+1, 2+1+2+1, 2+1+1+2, 1+2+2+1, 1+2+1+2, 1+1+2+2, 1+1+1+1+1+1.

Esta pregunta es el ejercicio 3.4 de la página 84 del texto: la Combinatoria de las obras y Palabras, Sylvia Heubach y Toufik Mansour.

La pregunta en realidad pide un bivariante de generación de función en la que el número de partes en tales composiciones se indica.

2voto

Mike Powell Puntos 2913

Podemos encontrar un bivariante de generación de función exponencial en $m$ (el número de piezas), y de ordinario en $n$. Otras variantes son más difíciles preguntas, así que sospecho que esto es lo que el ejercicio de la intención. Utilizamos $z$ a mark tamaño ($n$), y $u$ a marcar el número de piezas ($m$).

Fix $m$, el número de partes. Para cualquier entero positivo $k$, si denotamos por a $c_k(n,m)$ el número de composiciones de $n$ a $m$ sin piezas únicas, todos iguales a $k$ (lo $c_k(n,m) = 1$ al$n = mk$$m \neq 1$, e $0$ lo contrario), entonces la función de la generación de $$C_k(z, u) = \sum_{m,n \ge 0} c_k(n,m) z^n \frac{u^m}{m!} = \sum_{m \ge 0, m \neq 1} z^{mk} \frac{u^m}{m!} = e^{uz^k} - uz^k$$

Cuando permitimos que las composiciones utilizando dos enteros $k$$l$, el correspondiente número de composiciones $c_{k, l}(n, m)$ forma un binomio de convolución, correspondiente a cual de las $m$ partes son elegidos para ser igual a $k$, y que igual a $l$: $$c_{k, l}(n, m) = \sum_{a \ge 0} \binom{m}{a} c_k(ak, a) c_l(n - ak, m - a)$$ que corresponde a un producto de la generación de funciones: $$C_{k,l}(z, u) = \sum_{m,n \ge 0} c_{k,l}(n,m) z^n \frac{u^m}{m!} = (\exp(uz^k) - uz^k)\cdot (\exp(uz^l) - uz^l)$$

Por lo tanto la clase de todos los restringida composiciones ha de generación de función $$C(z, u) = \prod_{k=1}^{\infty}\left(\exp(uz^k) - uz^k\right)$$

Una mayor simplificación no parece ser posible.

1voto

Marko Riedel Puntos 19255

Me gustaría contribuir con una generación de función a esta discusión que tiene algunos inusuales y nuevas características, es decir, que permite la presentación y aplicación de un conjunto múltiple de ciclo de índices.

La especie $$\mathfrak{M}_\mathbf{p}$$ es una combinatoria de operador en sin etiquetar estructuras como el conjunto de operador $\mathfrak{P}$ o de la ciclo de operador $\mathfrak{C}.$ a Diferencia de estos dos no cuentan conjuntos o ciclos pero multisets que corresponden a la partición de $\mathbf{p}$. E. g. la especie $$\mathfrak{M}_{1,2,2}$$ aplicado a la ordinaria de la generación de la función de algunas repertorio $P(z)$ cuenta todas las configuraciones que puede ser obtenido por la selección de tres elementos distintos de $\mathcal{P}$ dos de los cuales se producen dos veces en las especies descritas por este operador.

Conjunto múltiple operadores han ciclo de índices al igual que otros operadores, el característica sobresaliente es que estas no contienen sólo términos positivos. Conjunto múltiple ciclo de índices puede ser calculado mediante la observación de lo que el peso de un en particular permutación forma (en discontinuo ciclo de notación) asigna a un ciertos conjunto múltiple bajo las reglas de sustitución para el ciclo de índices y tomando un promedio ponderado de combinación lineal de todas las permutaciones de los tipos que produce un peso para el que desee conjunto múltiple y cero en caso contrario. Es puede demostrar que todo conjunto múltiple ciclo de índices se puede obtener esta manera. Más detalles disponibles bajo petición.

Aquí son el conjunto múltiple de los operadores para $n=5$ y su ciclo de índices $$\begin{array}{ll} \mathfrak{M}_{1,1,1,1,1} & {\frac {1}{120}}\,{a_{{1}}}^{5}-1/12\,{a_{{1}}}^{3}a_{{2}}+1/8\,a_{{1}}{a_{{2} }}^{2}+1/6\,{a_{{1}}}^{2}a_{{3}}-1/6\,a_{{2}}a_{{3}}-1/4\,a_{{1}}a_{{4}}+1/5\, a_{{5}} \\ \mathfrak{M}_{1,1,1,2} & 1/6\,{a_{{1}}}^{3}a_{{2}}-1/2\,a_{{1}}{a_{{2}}}^{2}-1/2\,{a_{{1}}}^{2}a_{{3}}+ 5/6\,a_{{2}}a_{{3}}+a_{{1}}a_{{4}}-a_{{5}}\\ \mathfrak{M}_{1,1,3} & 1/2\,{a_{{1}}}^{2}a_{{3}}-1/2\,a_{{2}}a_{{3}}-a_{{1}}a_{{4}}+a_{{5}}\\ \mathfrak{M}_{1,2,2} & 1/2\,a_{{1}}{a_{{2}}}^{2}-a_{{2}}a_{{3}}-1/2\,a_{{1}}a_{{4}}+a_{{5}}\\ \mathfrak{M}_{2,3} & a_{{2}}a_{{3}}-a_{{5}}\\ \mathfrak{M}_{1,4} & a_{{1}}a_{{4}}-a_{{5}}\\ \mathfrak{M}_{5} & a_{{5}}.\end{array}$$

Ahora vamos a $\mathbf{P}(n)$ ser el conjunto de particiones de $n$, entonces se sigue de la definición del conjunto múltiple operador que la la generación de la función de la especie de las composiciones de $n$ está dado por $$\sum_{m=1}^n \sum_{\mathbf{p}\in\mathbf{P}(m)} {m\elegir \mathbf{p}}\mathfrak{M}_\mathbf{p} \left(\frac{z}{1-z}\right).$$ Algunos pensaron que muestra que $$\sum_{\mathbf{p}\in\mathbf{P}(m)} {m\elegir \mathbf{p}}\mathfrak{M}_\mathbf{p} = \mathfrak{S}_m,$$ la secuencia del operador. (El lector lo desea, puede probar esto.) Este colapso del interior de la suma produce la generación de la función $$\sum_{m=1}^n \left(\frac{z}{1-z}\right)^m.$$ Tenga en cuenta que $$[z^n] \sum_{m=1}^n \left(\frac{z}{1-z}\right)^m = [z^n] \sum_{m=0}^\infty \left(\frac{z}{1-z}\right)^m \\= [z^n] \frac{1}{1-z/(1-z)} = [z^n] \frac{1-z}{1-2z} = 2^{n-1}.$$

Ahora tenemos todo en su lugar para presentar una fórmula que responde a la problema de conteo de composiciones que no los únicos. Introducir $\mathbf{P}_{\ge 2}(n)$ el conjunto de particiones de $n$ más pequeño cuyo elemento de, al menos, dos. (No debe confundirse con las particiones en menos dos elementos.) A continuación, la generación de la función de la especie de $\mathcal{Q}$ composiciones de $n$ donde ningún elemento es único es dado por

$$\sum_{m=1}^n \sum_{\mathbf{p}\in\mathbf{P_{\ge 2}}(m)} {m\elegir \mathbf{p}}\mathfrak{M}_\mathbf{p} \left(\frac{z}{1-z}\right).$$

Esta fórmula hace que sea posible calcular los primeros términos de la la generación de la función$Q(z)$$\mathcal{Q}$$n=10,$, lo que da la secuencia (advertencia-esto necesita al menos de Arce 17) $$0, 1, 1, 2, 1, 9, 11, 34, 53, 108, \ldots $$ que es OEIS A240085.

El Arce código para calcular conjunto múltiple ciclo de índices y la inicial segmento de $Q(z)$ se incluye a continuación.


con(planta):
with(linalg):

pet_varinto_cind :=
proc(poli, ind)
local subs1, subs2, polyvars, indvars, v, bote, res;

 res := ind;

 polyvars := indets(poli);
 indvars := indets(ind);

 para v en indvars ¿
 bote := op(1, v);

 subs1 :=
[seq(polyvars[k]=polyvars[k]^olla,
k=1..nops(polyvars))];

 subs2 := [v=subs(subs1, poli)];

 res := subs(subs2, res);
od;

res;
end;


ms_varp2par :=
proc(p)
local r, v;

 r := [];

 para v en indets(p) ¿
 r := [op(r), el grado(p, v)];
od;

sort(r);
end;

ms_allchars :=
proc(n)
opción de recordar;
local p, q, mat, k, res, ind, subsind, allvars,
 plazo, cvec, ctab;

 res := [];
 allvars := añadir(sigma[k], k=1..n);

 para p en la partición(n) hacer
 ind := mul(a[p[k]], k=1..nops(p));

 subsind := pet_varinto_cind(allvars, ind);

 cvec := [];
 durante el plazo en ampliar(subsind) ¿
 cvec :=
 [op(cvec), ms_varp2par(término) = lcoeff(plazo)];
od;

 ctab := tabla(cvec); cvec := [];

 por q en la partición(n) hacer
 si el tipo(ctab[q], entero), a continuación,
 cvec := [op(cvec), ctab[q]];
otra cosa
 cvec := [op(cvec), 0];
fi;
od;

 res := [op(res), cvec];
od;

 mat := transponer(matriz(res));
end;

ms_allinds :=
proc(n)
opción de recordar;
local de res, idmat, dim, p, col, k, tabinit, idx;

 dim := numbpart(n);
 idmat := diag(seq(1, k=1..dim));

 res := multiplicar(inverso(ms_allchars(n)), idmat);

 col := [];
 para p en la partición(n) hacer
 col :=
 [op(col), mul(a[p[k]], k=1..nops(p))];
od;

 res := multiplicar(matrix([col]), res);

 idx := 1; tabinit := [];
 para p en la partición(n) hacer
 tabinit := [op(tabinit), p = res[1, idx]];

 idx := idx+1;
od;

tabla(tabinit);
end;

ms_index :=
proc(parte)
local n, k, de búsqueda;
 n := añadir(parte[k], k=1..nops(parte));
 si n=1 y nops(en parte) a = 1, a continuación, volver a[1] fi;

 búsqueda := ms_allinds(n);
búsqueda[ordenar(parte a)];
end;

comps_all :=
proc(n)
opción de recordar;
local m, p, res, gf, subsgf, k;

 res := 0;

 gf := añadir(z^k, k=1..n);

 para m a n hacer
 para p en la partición(m) 
 subsgf := pet_varinto_cind(gf, ms_index(p));

 res := res +
 multinomial(m, seq(p[k], k=1..nops(p))) *
 coef(expand(subsgf), z, n);
od;
od;

res;
end;

comps_no_uniq :=
proc(n)
opción de recordar;
local m, p, res, gf, subsgf, k;

 res := 0;

 gf := añadir(z^k, k=1..n);

 para m a n hacer
 para p en la partición(m) 
 si p[1]>1, entonces
 subsgf := pet_varinto_cind(gf, ms_index(p));

 res := res +
 multinomial(m, seq(p[k], k=1..nops(p))) *
 coef(expand(subsgf), z, n);
fi;
od;
od;

res;
end;

Adición de Miércoles 30 de abril de 2014. Por alguna razón superflua la multiplicación por la matriz identidad hecho su camino en el código anterior (ver ms_allinds). Segura puede ser eliminado.

1voto

Marko Riedel Puntos 19255

Desde la primera versión del conjunto múltiple ciclo calculadora del índice es bastante ingenuo en algunos aspectos y no en todos optimizado estoy enviando otra versión que amplía el rango de las particiones de $n=14$ frente al $n=10$ en la primera versión. Una mejora más significativa, probablemente se necesitará una reescritura completa.

Por medio de un certificado, aquí es el conjunto múltiple ciclo de índice $\mathfrak{M}_{1,2,3,5}:$ $$a_{{1}}a_{{2}}a_{{3}}a_{{5}}-a_{{1}}a_{{2}}a_{{8}}-a_{{1}}a_{{3}}a_{{7}}-a_{{1 }}{a_{{5}}}^{2}-a_{{2}}a_{{3}}a_{{6}}-a_{{2}}a_{{4}}a_{{5}}-{a_{{3}}}^{2}a_{{5 }}+2\,a_{{1}}a_{{10}}\\+2\,a_{{2}}a_{{9}}+3\,a_{{3}}a_{{8}}+a_{{4}}a_{{7}}+3\,a_ {{5}}a_{{6}}-6\,a_{{11}}.$$ Y esto es $\mathfrak{M}_{2,2,3,6}:$ $$1/2\,{a_{{2}}}^{2}a_{{3}}a_{{6}}-1/2\,a_{{3}}a_{{4}}a_{{6}}-a_{{2}}a_{{5}}a_{{ 6}}-a_{{2}}a_{{3}}a_{{8}}-1/2\,{a_{{2}}}^{2}a_{{9}}+a_{{6}}a_{{7}}+a_{{5}}a_{{ 8}}\\+1/2\,a_{{4}}a_{{9}}+a_{{3}}a_{{10}}+2\,a_{{2}}a_{{11}}-3\,a_{{13}}.$$ Finalmente tenemos a $\mathfrak{M}_{1,2,2,3,6}:$ $$-a_{{2}}{a_{{3}}}^{2}a_{{6}}-1/2\,{a_{{2}}}^{2}a_{{4}}a_{{6}}-1/2\,{a_{{2}}}^{ 2}a_{{3}}a_{{7}}-1/2\,a_{{1}}a_{{3}}a_{{4}}a_{{6}}-a_{{1}}a_{{2}}a_{{5}}a_{{6} }-a_{{1}}a_{{2}}a_{{3}}a_{{8}}\\+12\,a_{{14}}-1/2\,a_{{1}}{a_{{2}}}^{2}a_{{9}}+1 /2\,a_{{1}}{a_{{2}}}^{2}a_{{3}}a_{{6}}-{a_{{7}}}^{2}-5\,a_{{6}}a_{{8}}-3\,a_{{ 5}}a_{{9}}+1/2\,{a_{{4}}}^{2}a_{{6}}\\+2\,a_{{3}}a_{{5}}a_{{6}}+1/2\,a_{{3}}a_{{ 4}}a_{{7}}+{a_{{3}}}^{2}a_{{8}}+2\,a_{{2}}{a_{{6}}}^{2}+a_{{2}}a_{{5}}a_{{7}}+ a_{{2}}a_{{4}}a_{{8}}+3\,a_{{2}}a_{{3}}a_{{9}}\\+{a_{{2}}}^{2}a_{{10}}+a_{{1}}a_ {{6}}a_{{7}}+a_{{1}}a_{{5}}a_{{8}}+1/2\,a_{{1}}a_{{4}}a_{{9}}+a_{{1}}a_{{3}}a_ {{10}}+2\,a_{{1}}a_{{2}}a_{{11}}\\-2\,a_{{4}}a_{{10}}-5\,a_{{3}}a_{{11}}-6\,a_{{ 2}}a_{{12}}-3\,a_{{1}}a_{{13}}.$$

Y este es el código. Comentarios y mejoras son bienvenidas.


with(LinearAlgebra):
con(planta):

ms_varinto_cind :=
proc(n, ind)
local allsubs, m, k;

 allsubs := [];

 por k a n do
 allsubs :=
 [op(allsubs), a[k] = añadir(sigma[m]^k, m=1..n)];
od;

 subs(allsubs, ind);
end;


ms_varp2par :=
proc(p)
local r, v;

 r := [];

 para v en indets(p) ¿
 r := [op(r), el grado(p, v)];
od;

sort(r);
end;

ms_cmp :=
proc(pa, pb)
 local k;

 si nops(pa) > nops(pb), a continuación, devolver true fi;
 si nops(pa) < nops(pb) entonces devolver falso fi;

 por k a nops(pa) ¿
 si pa[k] > pb[k], a continuación, devolver true; fi;
 si pa[k] < pb[k] then return false; fi;
od;

 return true;
end;

ms_desc :=
proc(parte)
 opción de recordar;
 local spart, sprob, sdesc, sp, m, n, k, q, visto;

 si nops(en parte) a = 1, a continuación, volver [parte] fi;

 sprob := tabla(); sprob[parte] := 1; visto := tabla();
 para m a nops(parte) ¿
 para n de m+1 a nops(parte) ¿
 q : = [[m]+[n],
 seq(parte[k], k=1..m-1),
 seq(parte[k], k=m+1..n-1),
 seq(parte[k], k=n+1..nops(parte))];
 q := sort(q);

 si no tipo(ver[q], entero), a continuación,
 para la sp en ms_desc(p) ¿
 sprob[sp] := 1;
od;
 visto[p] := 1;
fi;
od;
od;

 sort([índices(sprob, 'nolist')], ms_cmp);
end;

ms_allchars_opt :=
proc(parte)
opción de recordar;
local de n, p, q, mat, k, res, ind, subsind, allvars,
 plazo, cvec, visto, spar, cnt;

 n := convert(parte, `+`);
 res := [];
 allvars := añadir(sigma[k], k=1..n);

 para p en ms_desc(parte) ¿
 ind := mul(a[p[k]], k=1..nops(p));

 subsind := ms_varinto_cind(n, ind);

 cnt := 0; visto := tabla(); 
 durante el plazo en ampliar(subsind) ¿
 spar := ms_varp2par(plazo);

 si no tipo(ver[spar], entero), a continuación,
 visto[spar] := lcoeff(plazo);
 cnt := cnt + 1;

 si la cnt = nops(ms_desc(p)) entonces
break;
fi;
fi;
od;

 cvec := [];

 por q en la ms_desc(parte) ¿
 si el tipo(ver[q], entero), a continuación,
 cvec := [op(cvec), visto[q]];
otra cosa
 cvec := [op(cvec), 0];
fi;
od;

 res := [op(res), cvec];
od;

 mat := Matrix(res);
end;

ms_allinds_opt :=
proc(parte)
opción de recordar;
local de res, dim, p, col, k, tabinit, idx;

 dim := nops(ms_desc(parte));

 res := MatrixInverse(ms_allchars_opt(parte), method='submarinos');

 col := [];
 para p en ms_desc(parte) ¿
 col :=
 [op(col), mul(a[p[k]], k=1..nops(p))];
od;

 res := MatrixVectorMultiply(res, Vector['columna'](col));

 idx := 1; tabinit := [];
 para p en ms_desc(parte) ¿
 tabinit := [op(tabinit), p = res[idx]];

 idx := idx+1;
od;

tabla(tabinit);
end;

ms_index_opt :=
proc(parte)
opción de recordar;
local n, k, búsqueda, spart, p;

 n := añadir(parte[k], k=1..nops(parte));
 si n=1 y nops(en parte) a = 1, a continuación, volver a[1] fi;

 spart := sort(parte);
 búsqueda := ms_allinds_opt(spart);

 para p en los índices(de búsqueda, 'nolist') 
 ms_index_opt(p) := búsqueda[p];
od;

búsqueda[spart];
end;

ms_verify_vs_opt :=
proc(n)
parte local, res;

 res := [];
 para la parte en la partición(n) hacer
 res := [op(res), ms_index(parte)-ms_index_opt(parte a)];
od;

 convertir(res, conjunto);
end;

ms_allparts_opt :=
proc(n)
 local de s, p;

 s := 0;

 para p en la partición(n) hacer
 s := s + ms_index_opt(p);
od;

s;
end;

ms_seqop_opt :=
proc(n)
 local de s, p;

 s := 0;

 para p en la partición(n) hacer
 s := s +
 multinomial(n, seq(p[k], k=1..nops(p)))*
ms_index_opt(p);
od;

s;
end;

pet_cycleind_symm :=
proc(n)
 local p, s;
 opción de recordar;

 si n=0 entonces devolver 1; fi;

 ampliar(1/n*añadir(a[l]*pet_cycleind_symm(n-l), l=1..n));
end;

Las rutinas ms_verify_vs_opt, ms_allparts_opt y ms_seqop_opt forma de un paquete de prueba que pueden ser utilizados para comparar la nueva versión del antiguo, para comprobar que todo el conjunto múltiple ciclo de índices de suma para el conjunto múltiple operador y que la suma ponderada de identidad ("algunos pensaron ...") desde el primer post, aún se mantiene. La rutina ms_index_opt calcula un conjunto múltiple ciclo de índice para una determinada partición.

1voto

Marko Riedel Puntos 19255

Por medio de la representación de esta discusión en un aceptable y útil estatal estoy enviando un altamente optimizado conjunto múltiple ciclo de la calculadora que se puede calcular el ciclo de los índices del total de tamaño de la partición a a $21$ con un buen equilibrio entre mantener bajo el uso de memoria y proporcionar un rápido y eficiente algoritmo (el comercio de algunos de velocidad para reducir el uso de memoria). Este hecho es posible calcular el extremadamente desafiante ciclo de índice de $\mathfrak{M}_{1,2,3,4,5,6}$ (consultar este MSE enlace para que la motivación por qué querríamos para calcular este ciclo de índice), que es $$-{a_{{3}}}^{2}a_{{4}}a_{{5}}a_{{6}} -a_{{2}}{a_{{4}}}^{2}a_{{5}}a_{{6}} -a_{{2}}a_{{3}}a_{{4}}a_{{5}}a_{{7}} -a_{{2}}a_{{3}}a_{{4}}{a_{{6}}}^{2}\\ -a_{{2}}a_{{3}}{a_{{5}}}^{2}a_{{6}} -a_{{1}}a_{{2}}a_{{3}}a_{{5}}a_{{10}} -a_{{1}}a_{{2}}a_{{3}}a_{{6}}a_{{9}} -a_{{1}}a_{{2}}a_{{4}}a_{{5}}a_{{9}}\\ -a_{{1}}a_{{2}}a_{{4}}a_{{6}}a_{{8}} -a_{{1}}a_{{2}}a_{{5}}a_{{6}}a_{{7}} -a_{{1}}a_{{3}}a_{{4}}a_{{5}}a_{{8}} -a_{{1}}a_{{3}}a_{{4}}a_{{6}}a_{{7}}\\ -a_{{1}}a_{{3}}a_{{5}}{a_{{6}}}^{2} -a_{{1}}a_{{4}}{a_{{5}}}^{2}a_{{6}} -a_{{1}}a_{{2}}a_{{3}}a_{{4}}a_{{11}} +4\,a_{{4}}a_{{5}}{a_{{6}}}^{2}\\ -{a_{{7}}}^{3} -8\,a_{{6}}a_{{7}}a_{{8}} -7\,{a_{{6}}}^{2}a_{{9}} -3\,a_{{5}}{a_{{8}}}^{2}\\ -8\,a_{{5}}a_{{7}}a_{{9}} -15\,a_{{5}}a_{{6}}a_{{10}} -5\,{a_{{5}}}^{2}a_{{11}} -7\,a_{{4}}a_{{8}}a_{{9}}\\ -5\,a_{{4}}a_{{7}}a_{{10}} -13\,a_{{4}}a_{{6}}a_{{11}} -10\,a_{{4}}a_{{5}}a_{{12}} -2\,{a_{{4}}}^{2}a_{{13}}\\ -3\,a_{{3}}{a_{{9}}}^{2} -5\,a_{{3}}a_{{8}}a_{{10}} -7\,a_{{3}}a_{{7}}a_{{11}} -12\,a_{{3}}a_{{6}}a_{{12}}\\ -10\,a_{{3}}a_{{5}}a_{{13}} -8\,a_{{3}}a_{{4}}a_{{14}} -2\,{a_{{3}}}^{2}a_{{15}} -6\,a_{{2}}a_{{9}}a_{{10}}\\ -4\,a_{{2}}a_{{8}}a_{{11}} -4\,a_{{2}}a_{{7}}a_{{12}} -8\,a_{{2}}a_{{6}}a_{{13}} -8\,a_{{2}}a_{{5}}a_{{14}}\\ -8\,a_{{2}}a_{{4}}a_{{15}} -6\,a_{{2}}a_{{3}}a_{{16}} -2\,a_{{1}}{a_{{10}}}^{2} -6\,a_{{1}}a_{{9}}a_{{11}}\\ -4\,a_{{1}}a_{{8}}a_{{12}} -4\,a_{{1}}a_{{7}}a_{{13}} -8\,a_{{1}}a_{{6}}a_{{14}} -8\,a_{{1}}a_{{5}}a_{{15}}\\ -6\,a_{{1}}a_{{4}}a_{{16}} -6\,a_{{1}}a_{{3}}a_{{17}} -6\,a_{{1}}a_{{2}}a_{{18}} +3\,a_{{2}}a_{{4}}a_{{5}}a_{{10}}\\ +a_{{2}}{a_{{4}}}^{2}a_{{11}} +a_{{2}}a_{{3}}a_{{7}}a_{{9}} +3\,a_{{2}}a_{{3}}a_{{6}}a_{{10}} +3\,a_{{2}}a_{{3}}a_{{5}}a_{{11}}\\ +2\,a_{{2}}a_{{3}}a_{{4}}a_{{12}} +a_{{1}}a_{{6}}{a_{{7}}}^{2} +a_{{1}}{a_{{6}}}^{2}a_{{8}} +a_{{1}}a_{{5}}a_{{7}}a_{{8}}\\ +4\,a_{{1}}a_{{5}}a_{{6}}a_{{9}} +a_{{1}}{a_{{5}}}^{2}a_{{10}} +a_{{1}}a_{{4}}{a_{{8}}}^{2} +a_{{1}}a_{{4}}a_{{7}}a_{{9}}\\ +2\,a_{{1}}a_{{4}}a_{{6}}a_{{10}} +3\,a_{{1}}a_{{4}}a_{{5}}a_{{11}} +a_{{1}}a_{{3}}a_{{8}}a_{{9}} +a_{{1}}a_{{3}}a_{{7}}a_{{10}}\\ +3\,a_{{1}}a_{{3}}a_{{6}}a_{{11}} +2\,a_{{1}}a_{{3}}a_{{5}}a_{{12}} +2\,a_{{1}}a_{{3}}a_{{4}}a_{{13}} +a_{{1}}a_{{2}}{a_{{9}}}^{2}\\ +a_{{1}}a_{{2}}a_{{8}}a_{{10}} +a_{{1}}a_{{2}}a_{{7}}a_{{11}} +2\,a_{{1}}a_{{2}}a_{{6}}a_{{12}} +2\,a_{{1}}a_{{2}}a_{{5}}a_{{13}}\\ +2\,a_{{1}}a_{{2}}a_{{4}}a_{{14}} +2\,a_{{1}}a_{{2}}a_{{3}}a_{{15}} +5\,a_{{3}}a_{{5}}a_{{6}}a_{{7}} +a_{{3}}{a_{{6}}}^{3}\\ +{a_{{4}}}^{2}a_{{5}}a_{{8}} +{a_{{4}}}^{2}a_{{6}}a_{{7}} +a_{{4}}{a_{{5}}}^{2}a_{{7}} +a_{{3}}{a_{{5}}}^{2}a_{{8}}\\ +24\,a_{{10}}a_{{11}} +24\,a_{{9}}a_{{12}} +20\,a_{{8}}a_{{13}} +22\,a_{{7}}a_{{14}}\\ +40\,a_{{6}}a_{{15}} +36\,a_{{5}}a_{{16}} +30\,a_{{4}}a_{{17}} +30\,a_{{3}}a_{{18}}\\ +24\,a_{{2}}a_{{19}} +24\,a_{{1}}a_{{20}} +a_{{3}}a_{{4}}{a_{{7}}}^{2} +{a_{{3}}}^{2}a_{{6}}a_{{9}}\\ +3\,a_{{3}}a_{{4}}a_{{5}}a_{{9}} +4\,a_{{3}}a_{{4}}a_{{6}}a_{{8}} +{a_{{3}}}^{2}a_{{5}}a_{{10}} +a_{{2}}{a_{{6}}}^{2}a_{{7}}\\ +{a_{{3}}}^{2}a_{{4}}a_{{11}} +a_{{2}}a_{{5}}{a_{{7}}}^{2} +3\,a_{{2}}a_{{5}}a_{{6}}a_{{8}} -120\,a_{{21}}\\ +a_{{2}}{a_{{5}}}^{2}a_{{9}} +{a_{{5}}}^{3}a_{{6}} +4\,a_{{2}}a_{{4}}a_{{6}}a_{{9}} +a_{{2}}a_{{4}}a_{{7}}a_{{8}}\\ +a_{{1}}a_{{2}}a_{{3}}a_{{4}}a_{{5}}a_{{6}}.$$ Otra interesante ciclo del índice es la de $\mathfrak{M}_{2,2,2,4,7}$ que es $$1/6\,{a_{{2}}}^{3}a_{{4}}a_{{7}}-1/2\,a_{{2}}{a_{{4}}}^{2}a_{{7}}-1/2\,{a_{{2}} }^{2}a_{{6}}a_{{7}}-1/2\,{a_{{2}}}^{2}a_{{4}}a_{{9}}-1/6\,{a_{{2}}}^{3}a_{{11}} \\+5/6\,a_{{4}}a_{{6}}a_{{7}}+1/2\,{a_{{4}}}^{2}a_{{9}}+a_{{2}}a_{{7}}a_{{8}}+a_{ {2}}a_{{6}}a_{{9}}+3/2\,a_{{2}}a_{{4}}a_{{11}}\\+{a_{{2}}}^{2}a_{{13}}-a_{{8}}a_{ {9}}-a_{{7}}a_{{10}}-4/3\,a_{{6}}a_{{11}}-2\,a_{{4}}a_{{13}}-3\,a_{{2}}a_{{15}} +4\,a_{{17}}.$$ Este es el código.


with(LinearAlgebra):
con(planta):

ms_varp2par :=
proc(p)
local r, v;

 r := [];

 para v en indets(p) ¿
 r := [op(r), el grado(p, v)];
od;

sort(r);
end;

ms_cmp :=
proc(pa, pb)
 local k;

 si nops(pa) > nops(pb), a continuación, devolver true fi;
 si nops(pa) < nops(pb) entonces devolver falso fi;

 por k a nops(pa) ¿
 si pa[k] > pb[k], a continuación, devolver true; fi;
 si pa[k] < pb[k] then return false; fi;
od;

 return true;
end;

ms_desc :=
proc(parte)
 opción de recordar;
 local spart, sprob, sdesc, sp, m, n, k, q, visto;

 si nops(en parte) a = 1, a continuación, volver [parte] fi;

 sprob := tabla(); sprob[parte] := 1; visto := tabla();
 para m a nops(parte) ¿
 para n de m+1 a nops(parte) ¿
 q : = [[m]+[n],
 seq(parte[k], k=1..m-1),
 seq(parte[k], k=m+1..n-1),
 seq(parte[k], k=n+1..nops(parte))];
 q := sort(q);

 si no tipo(ver[q], entero), a continuación,
 para la sp en ms_desc(p) ¿
 sprob[sp] := 1;
od;
 visto[p] := 1;
fi;
od;
od;

 sort([índices(sprob, 'nolist')], ms_cmp);
end;



ms_recexpand :=
proc(res, p, idx, parte, n)
 local del pp, s;

 si idx > nops(parte), a continuación,
 pp := ms_varp2par(p);

 si el tipo(res[pp], en la lista), luego
 si res[pp][1] = p entonces
 res[pp] := [p, res[pp][2]+1];
fi;
otra cosa
 res[pp] := [p, 1];
fi;

 return res;
fi;

 de s a n do
 ms_recexpand(res, p*sigma[s]^[idx],
 idx+1, parte a, n);
od;

res;
end;

ms_coeffs :=
proc(p, n)
 opción de recordar;
 local visto;

 visto := tabla();
 ms_recexpand(visto, 1, 1, p, n);

visto;
end;

ms_allchars_opt :=
proc(parte)
opción de recordar;
local de n, p, mat, k, res, cvec, visto, q;

 n := convert(parte, `+`);
 res := [];

 para p en ms_desc(parte) ¿
 visto := ms_coeffs(p, n);

 cvec := [];

 por q en la ms_desc(parte) ¿
 si el tipo(ver[q], en la lista), luego
 cvec := [op(cvec), visto[q][2]];
otra cosa
 cvec := [op(cvec), 0];
fi;
od;

 res := [op(res), cvec];
od;

 mat := Matrix(res);
end;

ms_allinds_opt :=
proc(parte)
opción de recordar;
local de res, dim, p, col, k, tabinit, idx, cfmat;

 dim := nops(ms_desc(parte));

 cfmat := ms_allchars_opt(parte);
 res := MatrixInverse(cfmat, method='submarinos');

 col := [];
 para p en ms_desc(parte) ¿
 col :=
 [op(col), mul(a[p[k]], k=1..nops(p))];
od;

 res := MatrixVectorMultiply(res, Vector['columna'](col));

 idx := 1; tabinit := [];
 para p en ms_desc(parte) ¿
 tabinit := [op(tabinit), p = res[idx]];

 idx := idx+1;
od;

tabla(tabinit);
end;

ms_index_opt :=
proc(parte)
opción de recordar;
local n, k, búsqueda, spart, p;

 n := añadir(parte[k], k=1..nops(parte));
 si n=1 y nops(en parte) a = 1, a continuación, volver a[1] fi;

 spart := sort(parte);
 búsqueda := ms_allinds_opt(spart);

 para p en los índices(de búsqueda, 'nolist') 
 ms_index_opt(p) := búsqueda[p];
od;

búsqueda[spart];
end;

ms_verify_vs_opt :=
proc(n)
parte local, res;

 res := [];
 para la parte en la partición(n) hacer
 res := [op(res), ms_index(parte)-ms_index_opt(parte a)];
od;

 convertir(res, conjunto);
end;

ms_allparts_opt :=
proc(n)
 local de s, p;

 s := 0;

 para p en la partición(n) hacer
 s := s + ms_index_opt(p);
od;

s;
end;

ms_seqop_opt :=
proc(n)
 local de s, p;

 s := 0;

 para p en la partición(n) hacer
 s := s +
 multinomial(n, seq(p[k], k=1..nops(p)))*
ms_index_opt(p);
od;

s;
end;

pet_cycleind_symm :=
proc(n)
 local p, s;
 opción de recordar;

 si n=0 entonces devolver 1; fi;

 ampliar(1/n*añadir(a[l]*pet_cycleind_symm(n-l), l=1..n));
end;

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X