Hi Kurt, Thanks for the detailed response and references.
I have indicated some comments and suggestions below. ----- Original Message ----- From: "Kurt Pagani" <[email protected]> To: [email protected] Sent: Wednesday, January 25, 2017 7:38:22 PM Subject: Re: [fricas-devel] fricas: trigonometric simplification. Hi Constantine see below ... Am 25.01.2017 um 17:56 schrieb Constantine Frangos: > > Hi Kurt, > > Thanks for the fast and very detailed response - much > appreciated. > > (1) Can the re-write rules be expressed in a "generic" way > so that they will work for: Yes. See e.g. https://kfp.bitbucket.io/fricas_book/section-6.21.xhtml how it works in detail ... > > (a) any symbolic arguments appearing in the trigonometric > functions, for example, > cos(x1)*sin(y)-sin(x1)*cos(y), > cos(x3)*sin(z)-sin(x3)*cos(z), etc rs:=rule cos(x)*sin(y)-sin(x)*cos(y) == sin(y-x) rs (cos(x1)*sin(y)-sin(x1)*cos(y)) --> sin(y - x1) > > (b) any order of appearance of the terms, > -sin(x1)*cos(y) + sin(y)*cos(x1), > -sin(x2)*sin(x3) + cos(x3)*cos(x2), etc rs (-sin(x1)*cos(y) + sin(y)*cos(x1)) --> sin(y - x1) > > (2) In your example below, you used "equations" for t1, t2, etc. > > In my question I was simply using t1 and t2 as auxiliary > variables and assigning the rhs to t1, t2, etc, in order to > construct the expression expr. That's the point. If you're using t1,t2 this way, look what happens: (1) -> t1 := cos(x)*sin(y) - cos(y)*sin(x) (1) cos(x)sin(y) - cos(y)sin(x) Type: Expression(Integer) (2) -> t2 := - sin(x)*sin(y) + cos(x)*cos(y) (2) - sin(x)sin(y) + cos(x)cos(y) Type: Expression(Integer) (3) -> expr := tan(q)*tan(w) + t1*cos(x3) + t2*w*cos(a) + r3*t1*t2 + 5 (3) 2 tan(q)tan(w) - r3 cos(x)sin(x)sin(y) + 2 2 (r3 cos(y)sin(x) - w cos(a)sin(x) + r3 cos(x) cos(y) + cos(x)cos(x3)) * sin(y) + 2 (- r3 cos(x)cos(y) - cos(x3)cos(y))sin(x) + w cos(a)cos(x)cos(y) + 5 Type: Expression(Integer) (4) -> %I was not aware of this behaviour. However, I believe that fricas should not %automatically expand expressions that the user inputs. If this can be %modified then it would be very helpful. %Note that another public domain CAS called Maxima does not expand the above %expression. In addition, the user can perform the above simplification %by using a built-in Maxima function called trigreduce(). %Maybe fricas should consider having such a built-in function. This will %only add to the strong points that it has. As you can see there already is some automated simplification so that the simple rules rs,rc usually won't have any effect. Although FriCAS has a function "simplify", it's probably not what you want: (4) -> simplify expr (4) - w cos(a)cos(q)cos(w)sin(x) + r3 cos(q)cos(w)cos(y) + cos(q)cos(w)cos(x)cos(x3) * sin(y) + (- cos(q)cos(w)cos(x3)cos(y) - r3 cos(q)cos(w)cos(x))sin(x) + sin(q)sin(w) + w cos(a)cos(q)cos(w)cos(x)cos(y) + 5cos(q)cos(w) / cos(q)cos(w) Type: Expression(Integer) > > The idea is that the simplifying function I am looking for, > lets call it my_simplify(), be applied to any expression expr > containing trigonometric terms, as follows: > > expr_s := my_simplify(expr); > > Is this possible? Yes, at least theoretically ;) There are some packages that might help: http://fricas.github.io/api/search.html?q=trigonometric Take for example TranscendentalManipulations(R, F): click on the link "manip.spad line 434" and you will see the source code, where you'll get an idea how to start with. I would start by normalizing first: (5) -> normalize(expr) (5) a 2 a 2 x 4 ((tan(-) + 1)tan(q)tan(w) + (- w + 5)tan(-) + w + 5)tan(-) 2 2 2 + many many terms ... Type: Expression(Integer) Then you can apply rules/formulas which transform the tan(*/2) functions to any (valid) expression you like. It's not trivial but feasible if you exactly know how to specify the final form. > > > Thanks very much. > > Regards, > Constantine Frangos. > > > ----- Original Message ----- > From: "Kurt Pagani" <[email protected]> > To: "FriCAS - computer algebra system" <[email protected]> > Cc: [email protected] > Sent: Wednesday, January 25, 2017 3:51:54 AM > Subject: Re: fricas: trigonometric simplification. > > > Usually, this kind of task is not a CAS' strength because simplification > mostly relies on a normal form/representation. Even with rewrite rules I > cannot see a general pattern. However, waht you can do is sketched below, > namely using equations, rules and substitutions. Admittedly, it's more the > way theorem prover assistants works than automated simplifaction. If you have > well defined normal form this method may be turned into an algorithm as well, > of course. > > I don't know if you deliberatly used " = " (equations in Fricas) or it simpy > was a typo (:= means assignment), anyway, it was the inspiration for the > lines below: > > rs:=rule cos(x)*sin(y)-sin(x)*cos(y) == sin(y-x) > rc:=rule cos(x)*cos(y)-sin(x)*sin(y) == cos(x+y) > > eq1:= t1 = cos(x)*sin(y)-sin(x)*cos(y) > eq2:= t2 = cos(x)*cos(y)-sin(x)*sin(y) > eq3:= expr = t1*cos(x3) + 5 + tan(q)*tan(w) + t2*w*cos(a)+ t1*t2*r3 > > eq4:=expr = subst(rhs eq3,t1=rs rhs eq1) > eq5:=expr_s = subst(rhs eq4,t2=rc rhs eq2) > > > > > FriCAS Computer Algebra System > Version: FriCAS 1.3.0 > Timestamp: Wed Aug 31 20:31:31 GMT 2016 > ----------------------------------------------------------------------------- > Issue )copyright to view copyright notices. > Issue )summary for a summary of useful system commands. > Issue )quit to leave FriCAS and return to shell. > ----------------------------------------------------------------------------- > > (2) -> rs:=rule cos(x)*sin(y)-sin(x)*cos(y) == sin(y-x) > > (2) cos(x)sin(y) - cos(y)sin(x) + %B == sin(y - x) + %B > Type: RewriteRule(Integer,Integer,Expression(Integer)) > (3) -> rc:=rule cos(x)*cos(y)-sin(x)*sin(y) == cos(x+y) > > (3) - sin(x)sin(y) + cos(x)cos(y) + %C == cos(y + x) + %C > Type: RewriteRule(Integer,Integer,Expression(Integer)) > (4) -> > (4) -> eq1:= t1 = cos(x)*sin(y)-sin(x)*cos(y) > > (4) t1 = cos(x)sin(y) - cos(y)sin(x) > Type: Equation(Expression(Integer)) > (5) -> eq2:= t2 = cos(x)*cos(y)-sin(x)*sin(y) > > (5) t2 = - sin(x)sin(y) + cos(x)cos(y) > Type: Equation(Expression(Integer)) > (6) -> eq3:= expr = t1*cos(x3) + 5 + tan(q)*tan(w) + t2*w*cos(a)+ t1*t2*r3 > > (6) expr = tan(q)tan(w) + t1 cos(x3) + t2 w cos(a) + r3 t1 t2 + 5 > Type: Equation(Expression(Integer)) > (7) -> > (7) -> eq4:=expr = subst(rhs eq3,t1=rs rhs eq1) > > (7) expr = tan(q)tan(w) + (cos(x3) + r3 t2)sin(y - x) + t2 w cos(a) + 5 > Type: Equation(Expression(Integer)) > (8) -> eq5:=expr_s = subst(rhs eq4,t2=rc rhs eq2) > > (8) > expr_s > = > tan(q)tan(w) + (r3 cos(y + x) + cos(x3))sin(y - x) + w cos(a)cos(y + x) + 5 > > Type: Equation(Expression(Integer)) > (9) -> > > > Reagrding "rules", there is an excellent tutorial by Franz Lehner where you > will find more examples (Section 4.5, though it's in German, but that's not a > problem to undersrand the examples): > https://www.math.tugraz.at/mathc/compmath2/Demo/fricas-tutorium-0.6.pdf > > On Tuesday, 24 January 2017 23:38:52 UTC+1, Constantine Frangos wrote: > > > I wanted to ask for some assistance in using fricas to > perform some specific trigonometric simplifications. > > (1) The relevant fricas commands or re-write rules to perform > the following simplifications. > > t1 = cos(x)*sin(y)-sin(x)*cos(y) to sin(y-x), > > t2 = cos(x)*cos(y)-sin(x)*sin(y) to cos(x+y). > > (2) I have expressions which are sums of products of the > above-mentioned terms. For example, > > expr = t1*cos(x3) + 5 + tan(q)*tan(w) + t2*w*cos(a) > + t1*t2*r3 > > How can fricas commands be applied in order to simplify > expr to > > expr_s = sin(y-x)*cos(x3) + 5 + tan(q)*tan(w) + > cos(x+y)*w*cos(a) + sin(y-x)*cos(x+y)*r3 ? > > > Thanks very much. > > Regards, > Constantine Frangos. > -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/fricas-devel. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/fricas-devel. For more options, visit https://groups.google.com/d/optout.
