# SymbolicNumericIntegration -- definite integral?

**URL:** https://discourse.julialang.org/t/symbolicnumericintegration-definite-integral/100558
**Category:** Modelling & Simulations
**Created:** [June 19, 2023, 11:47am UTC](https://discourse.julialang.org/t/symbolicnumericintegration-definite-integral/100558 "2023-06-19T11:47:04Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![BLI](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bli/32/37206_2.png) [@BLI](https://discourse.julialang.org/u/BLI)
#### Post date: [June 19, 2023, 11:47am UTC](https://discourse.julialang.org/t/symbolicnumericintegration-definite-integral/100558/1 "2023-06-19T11:47:04Z")

</div>

Does `SymbolicNumericIntegration` support definite integration? [I don’t find this in the documentation… I tried with `integrate(f(x),x~x0…x1)` and also with `integrate(f(x), x=x0…x1)` without much success…]

If not, it is relatively straightforward to write my own function for this…

---

<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: [June 20, 2023, 1:02pm UTC](https://discourse.julialang.org/t/symbolicnumericintegration-definite-integral/100558/2 "2023-06-20T13:02:58Z")

</div>

I think you have to write your own function for this.

---

<div class="post-metadata">

### Author: ![BLI](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bli/32/37206_2.png) [@BLI](https://discourse.julialang.org/u/BLI)
#### Post date: [June 20, 2023, 1:24pm UTC](https://discourse.julialang.org/t/symbolicnumericintegration-definite-integral/100558/3 "2023-06-20T13:24:08Z")

</div>

I’ve played around with a function. A couple of “problems”:

- Is there a way to test whether a quantity is a (Symbolics) variable or not? Like `isvariable(x)` or `issymbol(x)` or something? I’d need that to test whether integral bounds are numeric values (so I can use `substitute`) or variables…
- Unfortunately, it seems like the `integrate` function does not work with integers/rational numbers – it would have been nice if functions with rational coefficients preserved the type after doing integration. [Or did I do something wrongly?]

---

<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: [June 20, 2023, 1:26pm UTC](https://discourse.julialang.org/t/symbolicnumericintegration-definite-integral/100558/4 "2023-06-20T13:26:28Z")

</div>

> [@BLI](#):
>
> Is there a way to test whether a quantity is a (Symbolics) variable or not? Like `isvariable(x)` or `issymbol(x)` or something? I’d need that to test whether integral bounds are numeric values (so I can use `substitute`) or variables…

`x isa SymbolicUtils.BasicSymbolic`.

> [@BLI](#):
>
> - Unfortunately, it seems like the `integrate` function does not work with integers/rational numbers – it would have been nice if functions with rational coefficients preserved the type after doing integration. [Or did I do something wrongly?]

There’s an open issue on that:

> <https://github.com/SciML/SymbolicNumericIntegration.jl/issues/27>
>
> SymbolicNumericIntegration can integrate ∫eˢsin(s) exactly:
> \`\`\`jl
> julia\> using… Symbolics, SymbolicNumericIntegration
> 
> julia\> @variables s
> 1-element Vector{Num}:
> s
> 
> julia\> integrate(exp(s) \* sin(s))
> ((1//2)\*exp(s)\*sin(s) - (1//2)\*cos(s)\*exp(s), 0, 0)
> \`\`\`
> but for some reason it switches to floating-point approximations if \`sin(s)\` is changed to \`sin(10\*s)\`:
> \`\`\`jl
> julia\> integrate(exp(s) \* sin(10s))
> (0.009900990099009925exp(s)\*sin(10s) - 0.09900990099009901exp(s)\*cos(10s), 0, 6.878113617473781e-16)
> \`\`\`
> even though the exact integral has rational coefficients:
> \<img width="548" alt="image" src="https://user-images.githubusercontent.com/2913679/198837674-0f7bbe73-47b0-4a48-8932-031f9a04b097.png"\>

---

<div class="post-metadata">

### Author: ![BLI](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bli/32/37206_2.png) [@BLI](https://discourse.julialang.org/u/BLI)
#### Post date: [June 21, 2023, 11:25am UTC](https://discourse.julialang.org/t/symbolicnumericintegration-definite-integral/100558/5 "2023-06-21T11:25:23Z")

</div>

> [@ChrisRackauckas](#):
>
> x isa SymbolicUtils.BasicSymbolic

Hm…

```julia
> using Symbolics
> @syms t
> t isa SymbolicUtils.BasicSymbolic
true

> @variables u
> u isa SymbolicUtils.BasicSymbolic
false

```

I could probably use `@syms`, but it seems like a `@syms` generated variable does not support plotting. In other words: if I create a function of the variable, `Plots` command `plot` works if I have defined the variable via `@variables`, but not if I define it via `@syms`.

If I stick with `@variables`, the following may work…

```julia
> Symbolics.get_variables(t) |> length ==1
true
> Symbolics.get_variables(pi) |> length ==1
false

```

Perhaps not elegant?
