Octave 中的符号简化似乎非常基本
Symbolic simplification in Octave seems very basic
我正在尝试使用符号包在 Octave 中进行一些符号计算,但我似乎 运行 在简化方面遇到了问题(我为什么要使用它)。例如,它适用于简单的表达式,但对于更复杂的矩阵运算,它似乎会失败。这里出了什么问题:
pkg load symbolic
syms a b d t
A = cos(t/2)*exp(i*(a - b/2 - d/2))
B = -sin(t/2)*exp(i*(a-b/2+d/2))
C = sin(t/2)*exp(i*(a + b/2 - d/2))
D = cos(t/2)*exp(i*(a+b/2+d/2))
U = [A, B; C, D]
simplify(expand(conj(U.')*U))
我试过只简化而不扩展。但是我应该得到实体矩阵而不是得到一个表达式 - 正确但不简化。有什么方法可以让我完成这项工作吗?
至少在 Matlab 中,默认情况下假定符号变量是复数。看起来您可能需要 a
、b
、d
和 t
是真实的。如果是这样,你需要这样定义它们,这样你的表达式就可以像你期望的那样被简化:
syms a b d t real
然后 simplify
的结果(至少在 Matlab R2017a 中)将是一个符号单位矩阵。
有关更多信息,请参阅 syms
and/or sym
的文档。您可能还希望阅读有关符号变量假设的更多信息:sym/assumptions
and sym/assume
.
我正在尝试使用符号包在 Octave 中进行一些符号计算,但我似乎 运行 在简化方面遇到了问题(我为什么要使用它)。例如,它适用于简单的表达式,但对于更复杂的矩阵运算,它似乎会失败。这里出了什么问题:
pkg load symbolic
syms a b d t
A = cos(t/2)*exp(i*(a - b/2 - d/2))
B = -sin(t/2)*exp(i*(a-b/2+d/2))
C = sin(t/2)*exp(i*(a + b/2 - d/2))
D = cos(t/2)*exp(i*(a+b/2+d/2))
U = [A, B; C, D]
simplify(expand(conj(U.')*U))
我试过只简化而不扩展。但是我应该得到实体矩阵而不是得到一个表达式 - 正确但不简化。有什么方法可以让我完成这项工作吗?
至少在 Matlab 中,默认情况下假定符号变量是复数。看起来您可能需要 a
、b
、d
和 t
是真实的。如果是这样,你需要这样定义它们,这样你的表达式就可以像你期望的那样被简化:
syms a b d t real
然后 simplify
的结果(至少在 Matlab R2017a 中)将是一个符号单位矩阵。
有关更多信息,请参阅 syms
and/or sym
的文档。您可能还希望阅读有关符号变量假设的更多信息:sym/assumptions
and sym/assume
.