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

3 次查看(过去 30 天)
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 个评论
Govind KM
Govind KM 2024-12-10
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
Marek 2024-12-10
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

请先登录,再进行评论。

采纳的回答

Govind KM
Govind KM 2024-12-10
编辑:Walter Roberson 2024-12-10
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!

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Number Theory 的更多信息

产品


版本

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by