I understand your point;
thanks for the help;
just one question about collectterms:
consider
f:
16*a_z^4*nu*(nu+1)*(nu+2)*(nu+3)*(z2-z1)^4/z^4-48*a_z^3*nu*(nu+1)*(nu+2)*(z2-z1)^2/z^3;
I thought
collectterms(f,nu,(nu+1),(nu+2));
would return
nu*(nu+1)*(nu+2) ( 16... - 48 ...);
but it does not;
I presume, I do not properly use collectterms;
could you help, please ?
thanks in advance;
Laurent
On 11/04/12 17:34, Stavros Macrakis wrote:
> In general, there is no well-defined solution to your problem. What
> would you want to do with, e.g.
>
> a*b + b*c + c*d ?
>
> It could be rewritten as
>
> (a+c)*b + c*d
>
> or as
>
> (b+d)*c + a*b
>
> It is easy enough to do get /all /factorizations of all partitions,
> like this:
>
> partition_factor(s):=
> if mapatom(s) or inpart(s,0) # "+" then {s}
> else map(
> lambda([t],
> apply("+",
> listify(map(lambda([u],factor(apply("+",listify(u)))),
> t)))),
> set_partitions(setify(args(s))))$
>
> partition_factor( a^2+b*a+b^2);
> =>
> {
> b*(b+a)+a^2,
> b^2+a*b+a^2,
> b^2+a*(b+a)
> }
>
> partition_factor( a*b*c*x + a*b*c^2*y + b*y + a*x)
> =>
> {
> a*b*c^2*y+b*y+a*b*c*x+a*x,
> a*b*c^2*y+b*y+a*(b*c+1)*x,
> b*(a*c^2+1)*y+a*b*c*x+a*x,
> b*(a*c^2+1)*y+a*(b*c+1)*x,
> b*(y+a*c*x)+a*b*c^2*y+a*x,
> a*b*c*(c*y+x)+b*y+a*x,
> b*(a*c^2*y+y+a*c*x)+a*x,
> a*(b*c^2*y+x)+b*y+a*b*c*x,
> a*(b*c^2*y+x)+b*(y+a*c*x),
> a*(b*c^2*y+b*c*x+x)+b*y
> }
>
> That said, that still doesn't get you everything you might want,
> because it only uses existing terms. For example:
>
> partition_factor(b^2+a*b+a^2)
> =>
> {
> b*(b+a)+a^2,
> b^2+a*b+a^2,
> b^2+a*(b+a)
> }
>
> but that doesn't include
>
> (a+b)^2-a*b
>
> which is just as short, and could be considered a 'better'
> factorization in some cases....
>
> -s
>
> On Sun, Nov 4, 2012 at 3:35 AM, lo <james.smith1 at freenet.de
> <mailto:james.smith1 at freenet.de>> wrote:
>
> On 11/04/12 04:56, Raymond Toy wrote:
>
> "lo" == lo <james.smith1 at freenet.de
> <mailto:james.smith1 at freenet.de>> writes:
>
> lo> hello Maxima users,
> lo> a question from a newby:
> lo> I define a function and take the derivative of it
> lo> wrt some variables. The result is horribly long
> lo> but it is the sum of many terms. If I examine those
> terms,
> lo> for each, some factorization could be done, but are not.
> lo> To simplify the problem, consider for instance:
> lo> f: y1*exp(x1)+y1*cos(x1)+(x1-x2)^2;
> lo> How come that Maxima do not put y1 as a common factor
> for exp(x1) and
> lo> cos(x1) ?
>
> Because sometimes that's not what you want. Maxima can't read
> your
> mind. :-)
>
> lo> How to tell Maxima to factorize as much as possible
> (assuming I do not
> lo> know myself that
> lo> y1 is a common factor for the first two terms) ?
>
> collectterms(f, y1) will do what you want in this case.
>
> lo> If I use radcan, I get the result I want, but
> (x1-x2)^2 gets expanded,
> lo> something I would like to avoid.
>
> Be careful with radcan. It can change expressions in
> unexpected ways
> that you might not want. Use ratsimp instead.
>
> Ray
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu <mailto:Maxima at math.utexas.edu>
> http://www.math.utexas.edu/mailman/listinfo/maxima
>
>
> thanks for the info;
>
> collectterms would do the work, except that my expression is often
> of the type:
>
> f: a*b*c*x1+a*b*c^2*x2;
> collectterms(f,a,b,c) does not return a*b*c*(x1+c*x2);
> how to force it ?
>
> moreover, as said, I do know what terms to collect
> only by visual inspection; is there a way to force Maxima
> to do this kind of simplification without specification ?
>
> thanks in advance;
>
> Laurent
>
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu <mailto:Maxima at math.utexas.edu>
> http://www.math.utexas.edu/mailman/listinfo/maxima
>
>