Transpose of a symbolic 'real' results in conj()
2 views (last 30 days)
Show older comments
Chris B
on 11 Jul 2018
Answered: Yuichi Tadokoro
on 13 Jul 2018
Hello,
I'm facing an issue where I define a symbol as real, assign an expression to it (trigonometric in this case) and transpose it. Unfortunately, the result includes conjugate elements.
Minimal example:
a = sym('a', 'real');
b = sym('b', 'real');
c = sym('c', [3,1], 'real');
c(1) = sin(a)*cos(b);
assume(c,'real')
result = c'
Result:
[ cos(conj(b))*sin(conj(a)), c2, c3]
The issue does not occur with assume(c, 'real') removed. The reason why it would make sense to have it is that overwriting c with a term might remove the assumption of the former definition.
If I run "assumptions", for the case without assume(c,'real') it shows:
[ in(a, 'real'), in(b, 'real'), in(c1, 'real'), in(c2, 'real'), in(c3, 'real')]
and with assume(c,'real'):
[ in(cos(b)*sin(a), 'real'), in(c1, 'real'), in(c2, 'real'), in(c3, 'real')]
The only difference is that it now assumes the whole term c(1) = cos(b)*sin(a) to be real.
Of course, I could use the element-wise transpose:
result = c.'
This works and does not result in conjugate elements. But the overall issue I'm facing is that I depend on all functions that are used on c, would need to do element-wise transpose. I, for instance, calculate the rank of a matrix based on elements similar to c and it seems that there is one more linear dependent row than compared to other mathematical tools.
Thanks in advance.
0 Comments
Accepted Answer
Yuichi Tadokoro
on 13 Jul 2018
You need to use
assumeAlso(c, 'real')
instead of 'assume' to keep the assumptions on a and b.
>> assumptions
ans =
[ in(cos(b)*sin(a), 'real'), in(a, 'real'), in(b, 'real'), in(c1, 'real'), in(c2, 'real'), in(c3, 'real')]
0 Comments
More Answers (0)
See Also
Categories
Find more on Assumptions in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!