2017-07-02 2 views
2

記号パッケージを使用してOctaveで記号計算を試行していますが、単純化(なぜ私はそれを使用したいのですか)に関して問題が発生しているようです。たとえば、単純な式では動作しますが、より複雑な行列演算では失敗するようです。ここで間違っているもの: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)) 

私は、拡張せずに単純化してみました。しかし、私はitentity行列を取得する必要がありますが、式を取得する - 正しいが、単純化されません。私はこの仕事をすることができる方法はありますか?

答えて

1

少なくともMatlabでは、シンボリック変数はデフォルトでは複雑であるとみなされます。 abdtが実際のものである必要があるようです。もしそうなら、あなたはそのように定義する必要があり、あなたが期待するよう、あなたの表現を簡略化することができるので:

syms a b d t real 

その後simplifyからの結果は、(少なくともMatlabのR2017aで)シンボリック単位行列になります。

詳細については、symsおよび/またはsymのドキュメントを参照してください。シンボリック変数の仮定についての詳細は、sym/assumptionssym/assumeを参照してください。

関連する問題