Kala
Kala

Reputation: 43

Stop evaluating an built-in Mathematica function

I am trying to simplify some formulas like

F[a,b,c]*F[a,c,b]+F[c,a,b] /. {a->1,b->2,c->3}

where

F[a,b,c] := LegendreP[a,x]+LegendreP[b,x]*LegendreP[c,x]

And Mathematica can give a polynomial of x.

But I would like to keep all LegendreP instead of expanding it. By setting the HoldAll attribute of LegendreP, I can stop this, but the arguments are also kept, which is not intended.

Could anyone give some advice to solve this problem? Thanks.

Edited: I would like to have a result like this for the above formula (where L=LegendreP)

L[3,x]+L[1,x]*L[2,x]+L[1,x]*L[1,x]+L[3,x]*L[2,x]*L[1,x]+L[1,x]*L[2,x]*L[3,x]+L[‌​3,x]*L[2,x]*L[2,x]*L[3,x]

Upvotes: 1

Views: 174

Answers (2)

Nasser
Nasser

Reputation: 13141

But I would like to keep all LegendreP instead of expanded it.

Can't you use HoldForm?

F[a_, b_, c_] := HoldForm[LegendreP[a, x] + LegendreP[b, x]*LegendreP[c, x]];
F[a, b, c]*F[a, c, b] + F[c, a, b] /. {a -> 1, b -> 2, c -> 3}

Mathematica graphics

ReleaseHold[%]

Mathematica graphics

Simplify[%]

Mathematica graphics

Upvotes: 2

agentp
agentp

Reputation: 6999

without knowing fully what you are trying to accomplish, one approach is to simply use some other symbol, eg:

 F[a,b,c] := legendreP[a,x]+legendreP[b,x]*legendreP[c,x]

(note the lower case "l" )

When you get to the stage where you want evaluation apply a pattern substitution:

 expr /. legendreP->LegendreP

Upvotes: 1

Related Questions