Matlab - 三角函数的乘积简化
Matlab - product-like simplification of trigonometric function
考虑以下因素:
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)
现在如果我使用 simplify
或 combine
我得到:
2^(1/2)*sin(pi/4 + T + fi)
请问哪个函数可以让我获取产品表格,即:
cos(fi)*(cos(T)+sin(T)) + sin(fi)*(cos(T)-sin(T))
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)将尝试一系列各种简化尝试,并告诉您结果。但是,由于 ,此功能已被弃用,并且在 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)
最后一行是从上一个列表中找到的最短表示,这将是您的单个 return 值。您可以从列表中选择。您的版本可能会产生更多样化的输出集。
我想我可能已经找到了一种使用 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)])
其中 returns (cos(T) + sin(T))*cos(fi) + (cos(T) - sin(T))*sin(fi)
.
collect
的这种用法(收集变量的函数)并没有真正的记录。在阅读 MuPAD's collect
的示例后,我尝试了这一点,collect
可能基于或与之相关。
考虑以下因素:
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)
现在如果我使用 simplify
或 combine
我得到:
2^(1/2)*sin(pi/4 + T + fi)
请问哪个函数可以让我获取产品表格,即:
cos(fi)*(cos(T)+sin(T)) + sin(fi)*(cos(T)-sin(T))
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)将尝试一系列各种简化尝试,并告诉您结果。但是,由于
>> 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)
最后一行是从上一个列表中找到的最短表示,这将是您的单个 return 值。您可以从列表中选择。您的版本可能会产生更多样化的输出集。
我想我可能已经找到了一种使用 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)])
其中 returns (cos(T) + sin(T))*cos(fi) + (cos(T) - sin(T))*sin(fi)
.
collect
的这种用法(收集变量的函数)并没有真正的记录。在阅读 MuPAD's collect
的示例后,我尝试了这一点,collect
可能基于或与之相关。