Open main menu

Changes

3,934 bytes added ,  21:29, 8 December 2015
no edit summary
'''''combinat[multinomial](11, 1, 4, 4, 2);'''''
 
Observe que o primeiro argumento deve ser a soma dos argumentos restantes; caso contrário um erro é indicado.
 
'''''combinat[multinomial](11, 1, 4, 4, 3);'''''
 
O coeficiente multinomial exibido acima é chamado coeficiente porque ele é o coeficiente do multinomial <math>x_1^{n_1}x_2^{n_2}\cdots x_k^{n_k}</math> na expansão do polinomial <math>(x_1+x_2+\cdots +x_k)^n</math>. Nós podemos ver alguns exemplos disso usando Maple. (Usaremos as variáveis a, b, c, e assim por diante, já que são mais fáceis de se ler que x1, x2, x3, etc.)
 
'''''p := (a + b + c)^5;'''''<br />
'''''p := expand(p);'''''
 
Existe uma função “coeff” que extrai o coeficiente de uma variável num polinomial.
 
'''''coeff(x^3 - 5*x^2 + 2, x^2);'''''<br />
'''''coeff(x^3 - 5*x^2 + 2, x);'''''
 
Entretanto, isso apenas funciona com polinomiais invariáveis. Você pode, todavia, acessar os multinomiais individuais em um polinomial multivariado, usando o comando “op”.
 
'''''op(3, p);'''''<br />
'''''op(p);'''''
 
Isso, infelizmente, depende da ordenação dos multinomiais no polinomial '''p''' fazendo isso impossível de prever qual dentro dos multinomiais em '''p''' será extraída. Para contornar este problema, use o comando ''sort'' primeiro.
'''''p := sort(p);'''''<br />
'''''op(3, p);'''''<br />
'''''terms := [op(p)];'''''
 
Os multinomiais são ordenados lexicograficamente . Para reparar a deficiência em ''coeff'' que o impede de manusear polinomiais multivariados, nós podemos escrever nossa própria rotina, ''mcoeff'' que faz esse trabalho para nós. Já que ''coeff'' é implementada no kernel Maple, não é possível para um usuário redefinir seu comportamento, então é necessária uma rotina separada. Para simplicidade, nosso procedimento ''mcoeff'' vai apenas lidar com polinomiais com coeficientes numéricos. O algoritmo usado aqui é o seguinte:
 
#insira um polinomial “p” e um termo multinomial ''term''.
#processe '''p''' da seguinte:
##ordene p em q
##crie uma lista r de termos multinomiais em q.
##crie um multiset m consistido de multinomiais em q com multiplicidade igual ao coeficiente. (Note que isso não é um multiset verdade, como o coeficiente pode ser negativo ou não integral.)
#procure a lista m para uma entrada combinando term e, se encontrada, retorne o coeficiente. Caso contrário, retorne 0.
 
 
 
Aqui, então, está o código Maple para “mcoeff”.
 
'''''mcoeff := proc(p::polynom, term::polynom)'''''
'''''local m, # list of multinomials'''''
'''''t, # index into m'''''
'''''x, # dummy variable'''''
'''''q, # sorted input'''''
'''''r; # multiset of multinomials and coefficients'''''
'''''q := sort(p); r := [op(q)];'''''
'''''m := map(x -> [coeffs(x), x / coeffs(x)], r);'''''
'''''for t in m do'''''
'''''if term = op(2, t) then RETURN(op(1, t)); fi;'''''
'''''od;'''''
'''''RETURN(0);'''''
'''''end:'''''
 
Por exemplo, para alocar o coeficiente de no polinomial multivariado , podemos usar ''mcoeff'' da seguinte maneira:
 
'''''p := (a + b + c)^5;'''''<br />
'''''p := expand(p);'''''<br />
'''''mcoeff(p, a^2 * b^3);'''''
 
Solicitar o coeficiente de um multinomial que não esteja no polinomial resulta em zero.
 
'''''mcoeff(p, x^5);'''''
 
Se a entrada polinomial '''p''' é um polinomial em uma única variável, então a chamada ''mcoeff(p, x^n)'' é equivalente à chama ''coeff(p, x^n)'' ou ''coeff(p, x, n)''. (A sintaxe da chamada no último estilo não é suportada por ''mcoeff''.)
 
'''''mcoeff(x^3 - 2*x^2 + 1, x^2);'''''<br />
'''''coeff(x^3 - 2*x^2 + 1, x^2);'''''<br />
'''''coeff(x^3 - 2*x^2 + 1, x, 2);'''''
 
A rotina ''mcoeff'' fornece outros meios em que nós podemos determinar coeficientes multinomiais. Por exemplo:
 
'''''with(combinat):'''''<br />
'''''multinomial(6, 1, 2, 3);'''''<br />
'''''p := expand((a + b + c)^6);'''''<br />
'''''mcoeff(p, a * b^2 * c^3);'''''
90

edits