# Filtering syntactically positive non constant symbolic terms from a matrix in Symbolics.jl fails in 2×2 test case

**URL:** <https://discourse.julialang.org/t/filtering-syntactically-positive-non-constant-symbolic-terms-from-a-matrix-in-symbolics-jl-fails-in-2x2-test-case/128151>\
**Category:** New to Julia\
**Created:** [April 17, 2025, 7:24am UTC](https://discourse.julialang.org/t/filtering-syntactically-positive-non-constant-symbolic-terms-from-a-matrix-in-symbolics-jl-fails-in-2x2-test-case/128151 "2025-04-17T07:24:13Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![florinav](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/florinav/32/216381_2.png) [@florinav](https://discourse.julialang.org/u/florinav)\
**Post date:** [April 17, 2025, 7:24am UTC](https://discourse.julialang.org/t/filtering-syntactically-positive-non-constant-symbolic-terms-from-a-matrix-in-symbolics-jl-fails-in-2x2-test-case/128151/1 "2025-04-17T07:24:13Z")

</div>

Here is a minimal test in Julia using Symbolics.jl:

```julia
using Symbolics
using LinearAlgebra

function NGM(M, var)
    M = simplify.(M) # normalize all expressions
    F = map(e -> begin
        expr = string(e)
        depends = any(v -> occursin(string(v), expr), var)
        positive = !occursin("-", expr)
        depends && positive ? e : 0
    end, M)
    A = simplify.(M .- F)
    return F, A
end

@variables β γ μ N s r
var = [s, r]

M = [
    β*s/N - γ - μ - 1 β*r/N - 2
    -γ - 3 β*s/N - γ - μ - 4
]

F, A = NGM(M, var)

display(F)
display(A)
```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [April 17, 2025, 8:47pm UTC](https://discourse.julialang.org/t/filtering-syntactically-positive-non-constant-symbolic-terms-from-a-matrix-in-symbolics-jl-fails-in-2x2-test-case/128151/2 "2025-04-17T20:47:23Z")

</div>

I don’t understand what you mean. “Syntactically positive non-constant symbolic terms” isn’t really well defined? Since `x - y == x + (-y)`, is the second term positive?

---

<div class="post-metadata">

**Author:** ![florinav](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/florinav/32/216381_2.png) [@florinav](https://discourse.julialang.org/u/florinav)\
**Post date:** [April 19, 2025, 7:17am UTC](https://discourse.julialang.org/t/filtering-syntactically-positive-non-constant-symbolic-terms-from-a-matrix-in-symbolics-jl-fails-in-2x2-test-case/128151/3 "2025-04-19T07:17:38Z")

</div>

I should have added “after a use of simplify” (so, use the “simplest” form a human would use).

---

<div class="post-metadata">

**Author:** ![florinav](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/florinav/32/216381_2.png) [@florinav](https://discourse.julialang.org/u/florinav)\
**Post date:** [April 19, 2025, 7:29am UTC](https://discourse.julialang.org/t/filtering-syntactically-positive-non-constant-symbolic-terms-from-a-matrix-in-symbolics-jl-fails-in-2x2-test-case/128151/4 "2025-04-19T07:29:27Z")

</div>

In Mathematica, F=Replace[F1, \_. \_?Negative → 0, {2}] works reasonably well, after having used Simplify, which seems to have standardized answers. For info, it seems also that Together produces syntactically positive denominators whenever possible . Do also Julia simplifications standardize answers?

---

<div class="post-metadata">

**Author:** ![florinav](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/florinav/32/216381_2.png) [@florinav](https://discourse.julialang.org/u/florinav)\
**Post date:** [April 19, 2025, 7:52am UTC](https://discourse.julialang.org/t/filtering-syntactically-positive-non-constant-symbolic-terms-from-a-matrix-in-symbolics-jl-fails-in-2x2-test-case/128151/7 "2025-04-19T07:52:08Z")

</div>

The desired answer for the test is:

```julia
F = [
    β*s/N β*r/N
    0 β*s/N
]

```
