mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 05:40:38 +01:00
[poincare] In Polar complex format, avoid displaying real expression as
sqrt of square when possible
This commit is contained in:
committed by
EmilieNumworks
parent
e8046ddb9a
commit
0736a3f55a
@@ -127,14 +127,11 @@ Expression ComplexCartesian::norm(ExpressionNode::ReductionContext reductionCont
|
||||
a = imag();
|
||||
}
|
||||
if (!a.isUninitialized()) {
|
||||
ExpressionNode::Sign s = a.sign(reductionContext.context());
|
||||
if (s == ExpressionNode::Sign::Positive) {
|
||||
// Case 1: the expression is positive real
|
||||
return a;
|
||||
} else if (s == ExpressionNode::Sign::Negative) {
|
||||
// Case 2: the argument is negative real
|
||||
return a.setSign(ExpressionNode::Sign::Positive, reductionContext);
|
||||
}
|
||||
// norm = sign(a) * a
|
||||
Expression signa = SignFunction::Builder(a.clone());
|
||||
Expression norm = Multiplication::Builder(a, signa);
|
||||
signa.shallowReduce(reductionContext);
|
||||
return norm;
|
||||
}
|
||||
Expression n2 = squareNorm(reductionContext);
|
||||
Expression n = SquareRoot::Builder(n2);
|
||||
|
||||
@@ -801,6 +801,8 @@ QUIZ_CASE(poincare_simplification_complex_format) {
|
||||
assert_parsed_expression_simplify_to("(-8)^(1/4)", "unreal", User, Radian, Real);
|
||||
assert_parsed_expression_simplify_to("(-8)^(1/3)", "-2", User, Radian, Real);
|
||||
assert_parsed_expression_simplify_to("[[1,2+√(-1)]]", "unreal", User, Radian, Real);
|
||||
assert_parsed_expression_simplify_to("atan(2)", "atan(2)", User, Radian, Real);
|
||||
assert_parsed_expression_simplify_to("atan(-2)", "-atan(2)", User, Radian, Real);
|
||||
|
||||
// User defined variable
|
||||
assert_parsed_expression_simplify_to("a", "a", User, Radian, Real);
|
||||
@@ -844,6 +846,8 @@ QUIZ_CASE(poincare_simplification_complex_format) {
|
||||
assert_parsed_expression_simplify_to("π", "π", User, Radian, Cartesian);
|
||||
assert_parsed_expression_simplify_to("𝐢", "𝐢", User, Radian, Cartesian);
|
||||
|
||||
assert_parsed_expression_simplify_to("atan(2)", "atan(2)", User, Radian, Cartesian);
|
||||
assert_parsed_expression_simplify_to("atan(-2)", "-atan(2)", User, Radian, Cartesian);
|
||||
assert_parsed_expression_simplify_to("abs(-3)", "3", User, Radian, Cartesian);
|
||||
assert_parsed_expression_simplify_to("abs(-3+𝐢)", "√(10)", User, Radian, Cartesian);
|
||||
assert_parsed_expression_simplify_to("atan(2)", "atan(2)", User, Radian, Cartesian);
|
||||
@@ -934,6 +938,8 @@ QUIZ_CASE(poincare_simplification_complex_format) {
|
||||
assert_parsed_expression_simplify_to("conj(2×ℯ^(𝐢×π/2))", "2×ℯ^\u0012-π/2×𝐢\u0013", User, Radian, Polar);
|
||||
assert_parsed_expression_simplify_to("-2×ℯ^(𝐢×π/2)", "2×ℯ^\u0012-π/2×𝐢\u0013", User, Radian, Polar);
|
||||
assert_parsed_expression_simplify_to("[[1,√(-1)]]", "[[1,ℯ^\u0012π/2×𝐢\u0013]]", User, Radian, Polar);
|
||||
assert_parsed_expression_simplify_to("atan(2)", "atan(2)", User, Radian, Polar);
|
||||
assert_parsed_expression_simplify_to("atan(-2)", "atan(2)×ℯ^\u0012π×𝐢\u0013", User, Radian, Polar);
|
||||
|
||||
// User defined variable
|
||||
assert_parsed_expression_simplify_to("a", "a", User, Radian, Polar);
|
||||
|
||||
Reference in New Issue
Block a user