|
From: serge de m. <sde...@gm...> - 2016-10-10 08:10:55
|
Merci à tous et particulièrement a Stavros pour sa petite bidouille très
intéressante, qui semble en effet résoudre mes problèmes.
Justement, j'ai la chance que les %zi ont déjà eu un declare(integer), ce
qui facilite les choses.
serge
2016-10-10 0:47 GMT+02:00 Stavros Macrakis (Σταῦρος Μακράκης) <
mac...@al...>:
> Voici une petite bidouille qui semble résoudre tes exemples. Dis-moi si tu
> encontre des problèmes.
>
> expcontract(ex) :=
> block([inflag:true,inner],
> if mapatom(ex) then ex
> elseif op(ex)="*" then
> (inner:map('expcontract,ex),
> if mapatom(inner) or (op(inner) # "*")
> then expcontract(inner)
> else expcontract_merge(inner))
> else map('expcontract,ex))$
>
> expcontract_merge(ex) :=
> block([prod:1, exx, inner],
> exx: makelist( if mapatom(i) or op(i)#"^" then [i,1] else args(i), i,
> args(ex)),
> for i in group_by_key(exx) do (
> inner: product(i[j][1],j,1,length(i)),
> prod: prod * (if i[1][2]=1 then inner else ratsimp(inner)^i[1][2])
> ),
> prod)$
>
> group_by_key(keylist) :=
> maplist('listify,equiv_classes(setify(keylist),
> lambda([m,n],m[2]=n[2])))$
>
> ------------------
>
> expcontract(x*(x-1)^k*(x+1)^k*(x+2)) => x*(x+2)*(x^2-1)^k
>
> Pour tes exemples, il faudra un radcan par la suite:
>
> ex: ((1-sqrt(5))^(12*%z8)*(sqrt(5)+1)^(12*%z8)*2^((-24*%z8)-1))/5-1/10$
>
> eex: expcontract(ex) => (2^((-24*%z8)-1)*(-4)^(12*%z8))/5-1/10
>
> reex: radcan(eex) => ((-1)^(12*%z8)-1)/10
>
> ... et aussi ...
>
> declare(%z8,integer)$
>
> radcan(eex) == expand(reex,0,0) == ratsimp(reex) == 0
>
> 2016-10-09 17:20 GMT-04:00 serge de marre <sde...@gm...>:
>
>> Voici quelques examples un peu plus concrets.
>> Les exposants sont en effet toujours identiques
>>
>> ((1-sqrt(5))^(12*%z8)*(sqrt(5)+1)^(12*%z8)*2^((-24*%z8)-1))/5-1/10;
>> (2^(2*%z8+2)-4*(6-2^(5/2))^%z8*(2^(5/2)+6)^%z8)/2^(2*%z8);
>> (1263*(2143295-221064*sqrt(94))^%z8*(221064*sqrt(94)+2143295
>> )^%z8-1263)/188;
>>
>> Je ne parviens pas a faire fonctionner la suggestion de Jean-Marc, mais
>> merci beaucoup pour l'aide quand-meme.
>>
>> serge
>>
>> 2016-10-09 20:25 GMT+02:00 <ji...@fr...>:
>>
>>> Bon jour ,
>>>
>>> et quelque chose comme ça :
>>>
>>> matchdeclare([u,v,w],true);
>>>
>>> tellsimp((u^w*v^w),(u*v)^w);
>>>
>>> E:(a-b*sqrt(q))^k*(a+b*sqrt(q))^k;
>>>
>>> expand(%);
>>>
>>> Jean-Marc
>>>
>>> ----- Mail original -----
>>> De: "serge de marre" <sde...@gm...>
>>> À: max...@li...
>>> Envoyé: Samedi 8 Octobre 2016 23:18:31
>>> Objet: [Maxima-lang-fr] Fwd: Simplification d'exposants
>>>
>>>
>>>
>>> Bonjour a tous,
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> J'ai une expression comme celle-ci:
>>> k k
>>> (%o168) (a - b sqrt(q)) (b sqrt(q) + a)
>>>
>>> Comment puis-je transformer cette expression pour obtenir:
>>> 2 2 k
>>> (%o177) (a - b q)
>>>
>>> Merci d'avance
>>>
>>> serge
>>>
>>>
>>>
>>> ------------------------------------------------------------
>>> ------------------
>>> Check out the vibrant tech community on one of the world's most
>>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
>>> _______________________________________________
>>> Maxima-lang-fr mailing list
>>> Max...@li...
>>> https://lists.sourceforge.net/lists/listinfo/maxima-lang-fr
>>>
>>
>>
>> ------------------------------------------------------------
>> ------------------
>> Check out the vibrant tech community on one of the world's most
>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
>> _______________________________________________
>> Maxima-lang-fr mailing list
>> Max...@li...
>> https://lists.sourceforge.net/lists/listinfo/maxima-lang-fr
>>
>>
>
|