Matlab - 类似产品的三角函数简化

时间:2016-06-22 20:53:38

标签: matlab trigonometry symbolic-math

请考虑以下事项:

syms T fi t real
fun = symfun(sin(T+fi)+cos(T+fi),[T fi]);
fun = expand(fun);

产生:

cos(T)*cos(fi) - sin(T)*sin(fi) + cos(T)*sin(fi) + sin(T)*cos(fi)

现在,如果我使用simplifycombine,我会:

2^(1/2)*sin(pi/4 + T + fi)

请告诉我哪个功能可以让我获得产品表格,即:

cos(fi)*(cos(T)+sin(T)) + sin(fi)*(cos(T)-sin(T))

2 个答案:

答案 0 :(得分:2)

我想我可能已经找到了使用collect做到这一点的方法 - 它适用于R2016a:

syms T fi t real
fun = symfun(sin(T+fi)+cos(T+fi),[T fi]);
fun = expand(fun);

fun2 = collect(fun,[cos(fi) sin(fi)])

返回(cos(T) + sin(T))*cos(fi) + (cos(T) - sin(T))*sin(fi)

collect(收集函数的函数)的这种用法并未真正记录。我在阅读了collect可能基于或相关的MuPAD's collect示例后,尝试了这一点。

答案 1 :(得分:0)

在R2012b simplify给了我

cos(T + fi) + sin(T + fi)

所以你可能有一个更新的版本。仍然:很难想出符号表达式的特定简化,特别是如果涉及三角函数。

如果您专门针对正弦值寻找表达式,可以尝试rewrite

>> rewrite(fun,'sin')

ans(T, fi) =

sin(T + fi) - 2*sin(T/2 + fi/2)^2 + 1

以上输出再次来自R2012b,您的新版本很可能会做得更好。

我最初建议您尝试simple,默认情况下(带有0个输出变量)将尝试一系列各种简化尝试,并告诉您结果。但是,作为@horchler pointed out,此函数已被弃用,并且在2015a之后不再可用。无论如何,这里是来自R2012b的这个已经消失的函数的输出,这可能会给你提示更多低级函数的尝试:

>> syms T fi t real
>> fun = symfun(sin(T+fi)+cos(T+fi),[T fi]);
>> simple(fun)

simplify:

cos(T + fi) + sin(T + fi)


radsimp:

cos(T + fi) + sin(T + fi)


simplify(100):

cos(T + fi) + sin(T + fi)


combine(sincos):

cos(T + fi) + sin(T + fi)


combine(sinhcosh):

cos(T + fi) + sin(T + fi)


combine(ln):

cos(T + fi) + sin(T + fi)


factor:

cos(T + fi) + sin(T + fi)


expand:

cos(T)*cos(fi) - sin(T)*sin(fi) + cos(T)*sin(fi) + sin(T)*cos(fi)


combine:

cos(T + fi) + sin(T + fi)


rewrite(exp):

exp(- T*i - fi*i)*(1/2 + i/2) + exp(T*i + fi*i)*(1/2 - i/2)


rewrite(sincos):

cos(T + fi) + sin(T + fi)


rewrite(sinhcosh):

cosh(T*i + fi*i) - sinh(T*i + fi*i)*i


rewrite(tan):

(2*tan(T/2 + fi/2))/(tan(T/2 + fi/2)^2 + 1) - (tan(T/2 + fi/2)^2 - 1)/(tan(T/2 + fi/2)^2 + 1)


mwcos2sin:

sin(T + fi) - 2*sin(T/2 + fi/2)^2 + 1


collect(T):

cos(T + fi) + sin(T + fi)


ans(T, fi) =

cos(T + fi) + sin(T + fi)

其中最后一行是从前一个列表中找到的最短表示,这将是您的单个返回值。您可以从列表中选择。您的版本可能会产生更多样化的输出。