leetschau 发表于 2008-7-14 14:54:31

如何进行三角函数的和差化积?

比如有一个式子:cos(a)-cos(b),想把它变成-2sin(a+b/2)sin(a-b/2)的形式,试了很多函数,如simplify,convert,combine等,都不行,这么简单的要求都不能满足,郁闷……

WangGaoteng 发表于 2011-4-11 11:47:35

从网上翻出来的方法:
> q1 := cos(a)-cos(b);
> q2 := {u = (a+b)*(1/2), v = (a-b)*(1/2)};
> q3 := solve(q2, {a, b});
> q4 := eval(q1, q3);
> q4 := expand(q4);
> eval(q4, q2);
或:
trigsubs(cos(a)-cos(b))

ton121212 发表于 2011-4-16 21:39:55

trigsubs这个命令没有用过,是不是有点类似algsubs,有没有一个表达式整体替换的意思?

WangGaoteng 发表于 2011-4-21 15:45:09

本帖最后由 WangGaoteng 于 2011-4-24 13:19 编辑

3# ton121212
我只是把别人的东西整理了一下:trigsubs这个命令比较弱,如trigsubs(sin(x y)),trigsubs(sin(x+y))等等都能得出结果。但是trigsubs(sin(-x y)), trigsubs(sin(-x-y)), trigsubs(-cos(x)-cos(y))等等会返回两类错误:Error, (in trigsubs) expecting a product of two functions but got -sin(x+y),或Error, (in trigsubs) expecting a sum or difference of two functions but got -cos(x)-cos(y)。

好像trigsubs在处理像 sin(x-y),cos(x y)这种类型的三角函数时,只要x前没有负常数,就可以返回结果。但是一旦x前有负系数,如-1,-4,-8等就会出错。
另一类情况是像sin(x)+cos(y),sin(x)-sin(y)等类型,当+号两端都是sin或cos,并且前面一个(即sin(x)+sin(y)中的sin(x))前没有非正数1的常数时,trigsubs才会得出结果,如trigsubs(sin(x)-sin(y)),trigsubs(cos(x)+cos(y))。一旦将x加个负号,或在第一个函数(如sin(x)+sin(y)中的sin(x))前加个常数,就会出错。另外,当加号两端不是同类型的函数时,即sin(x)+cos(y),cos(x)-sin(y)时,也会出错。

说的比较乱,抱歉。很多东西我搞不清楚,就把使用经验记了下来。
页: [1]
查看完整版本: 如何进行三角函数的和差化积?