我无法说服maple简化复杂的trig表达式。看来瓶颈的是,我不知道如何告诉枫可以简化表达式,如:
arccos(cos(x))
进入
x
相反,如果我发出:
simplify(arccos(cos(x)));
我得到了
arccos(cos(x));
我应该使用一组assume
吗?我的实际表达式要复杂得多,所以我更喜欢通用的解决方案,其中arccos和cos中的表达式可能都是复杂的表达式。
更新
这是更复杂的simplify
示例,其中出现了这个问题(至少在我认为这是问题的地方):
# Angles
hac := arccos( (lab^2 + lbc^2 - lca^2)/(2*lab*lbc) ):
hcd := arccos( (lbc^2 + lbd^2 - lcd^2)/(2*lbc*lbd) ):
had := hac+hcd:
# length of AD
lad := sqrt( lab^2 + lbd^2 - 2*lab*lbd*cos(had) ):
sin_hbd := lbd*sin(had)/lad:
sin_hbp := sin_hbd:
hbp := arcsin( sin_hbp ):
hap := hac:
hab := Pi - hbp - hap:
# length of BP
lbp := lab*sin_hbp/sin(hab):
# factor we're looking for
s := lbp/lbc:
simplify(s);
产生
lab lbd sin(%2)
-----------------------------------------------------------------------------------------------
2 2 1/2 lbd sin(%2)
(lab + lbd - 2 lab lbd cos(%2)) sin(arcsin(------------------------------------) + %1) lbc
2 2 1/2
(lab + lbd - 2 lab lbd cos(%2))
2 2 2
lab + lbc - lca
%1 := arccos(------------------)
2 lab lbc
2 2 2
lbc + lbd - lcd
%2 := %1 + arccos(------------------)
2 lbc lbd
符号lab
,lbc
,lca
是三角形的长度。同样地lab
,lbd
,lcd
。所以角度h*
应该都在0和Pi之间。我不确定先验 s
的表达式有多简单。但到目前为止我所有的假设尝试(例如,明确地添加三角形不等式,在下面添加像宏碁部分答案一样的界限)都没有产生影响。
答案 0 :(得分:1)
Maple遵循arccos principal value的通常惯例。
您可以根据arccos(cos(x))
假设x
的假设,将x
简化为[0,Pi]
。
simplify(arccos(cos(x))) assuming x>=0, x<=Pi;
x
plot(arccos(x),x=-1..1,tickmarks=[default,piticks]);