Calculation of abs() and angle() of a symbolic expression - strange behaviour

9 views (last 30 days)
Hi.
I have come across some strange behaviour of the abs() and angle() function in symbolic calculations:
The first result is as expected. The second should be calculated with equal ease as
but matlab just rewrites the expression using the | | sign.
Similar behaviour applies to the angle function
Why is this happening and how to force matlab to do the calculation also in the second case?
Marek
  2 Comments
Govind KM
Govind KM on 10 Dec 2024
Hi Marek,
I am able to reproduce this in MATLAB R2024b for abs but not for angle. Do you have a similiar example for the same behaviour using angle?
Marek Golebiowski
Marek Golebiowski on 10 Dec 2024
Hi,
thanks for your interest in the topic.
Here is an example:
The correct result should be -atan2(LR,R+1), yet matlab again rewrites the expression
best
Marek

Sign in to comment.

Accepted Answer

Govind KM
Govind KM on 10 Dec 2024
Edited: Walter Roberson on 10 Dec 2024
Hi Marek,
When a symbolic expression is defined, it undergoes some internal simplification before being displayed. For some cases, additional simplification steps can be required to get a simpler result. The simplify method can be used to perform further simplication on a symbolic expression. Here is sample code for the provided example:
syms R real positive
syms L real positive
%Specify the number of simplification steps using the 'Steps' option
%Use the 'All' option to return all equivalent results
exp1=simplify(abs(R+1i*L*R+1),'All',true,'Steps',10), disp(char(exp1))
[((R + 1)^2 + L^2*R^2)^(1/2); (2*R + R^2 + L^2*R^2 + 1)^(1/2)]
exp2=simplify(abs(R+1i*L*R+L),'All',true,'Steps',10), disp(char(exp2))
[abs(L + R + L*R*1i); ((L + R)^2 + L^2*R^2)^(1/2); (L^2 + R^2 + L^2*R^2 + 2*L*R)^(1/2)]
The desired result can be selected as needed:
desiredExp=exp2(2), disp(char(desiredExp))
((L + R)^2 + L^2*R^2)^(1/2)
The PreferReal option can be used to favor the selection of expressions containing real values over the ones containing complex values:
simplify(abs(R+1i*L*R+L),'Steps',10,'Criterion','PreferReal'), disp(char(ans))
((L + R)^2 + L^2*R^2)^(1/2)
A similar approach can be followed for the angle function.
More details on the simplify method and its options can be found in the following documentation:
Hope this is helpful!

More Answers (0)

Products


Release

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!