Skip to content

Commit 5e166f5

Browse files
Merge pull request #86 from ArnoStrouwen/formatter
reapply formatter
2 parents fbb63df + dad6a6b commit 5e166f5

File tree

6 files changed

+220
-209
lines changed

6 files changed

+220
-209
lines changed

.JuliaFormatter.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
style = "sciml"
2-
format_markdown = true
2+
format_markdown = true
3+
format_docstrings = true

docs/pages.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
pages = [
44
"Home" => "index.md",
5-
"symbolicnumericintegration.md",
5+
"symbolicnumericintegration.md"
66
]

src/homotopy.jl

Lines changed: 75 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -117,73 +117,81 @@ end
117117
@syms 𝛷(x, u)
118118

119119
partial_int_rules = [
120-
# trigonometric functions
121-
@rule 𝛷(~x, sin(~u)) => (cos(~u) + si(~u), ~u)
122-
@rule 𝛷(~x, cos(~u)) => (sin(~u) + ci(~u), ~u)
123-
@rule 𝛷(~x, tan(~u)) => (log(cos(~u)), ~u)
124-
@rule 𝛷(~x, csc(~u)) => (log(csc(~u) + cot(~u)) + log(sin(~u)), ~u)
125-
@rule 𝛷(~x, sec(~u)) => (log(sec(~u) + tan(~u)) + log(cos(~u)), ~u)
126-
@rule 𝛷(~x, cot(~u)) => (log(sin(~u)), ~u)
127-
# hyperbolic functions
128-
@rule 𝛷(~x, sinh(~u)) => (cosh(~u), ~u)
129-
@rule 𝛷(~x, cosh(~u)) => (sinh(~u), ~u)
130-
@rule 𝛷(~x, tanh(~u)) => (log(cosh(~u)), ~u)
131-
@rule 𝛷(~x, csch(~u)) => (log(tanh(~u / 2)), ~u)
132-
@rule 𝛷(~x, sech(~u)) => (atan(sinh(~u)), ~u)
133-
@rule 𝛷(~x, coth(~u)) => (log(sinh(~u)), ~u)
134-
# 1/trigonometric functions
135-
@rule 𝛷(~x, 1 / sin(~u)) => (log(csc(~u) + cot(~u)) + log(sin(~u)), ~u)
136-
@rule 𝛷(~x, 1 / cos(~u)) => (log(sec(~u) + tan(~u)) + log(cos(~u)), ~u)
137-
@rule 𝛷(~x, 1 / tan(~u)) => (log(sin(~u)) + log(tan(~u)), ~u)
138-
@rule 𝛷(~x, 1 / csc(~u)) => (cos(~u) + log(csc(~u)), ~u)
139-
@rule 𝛷(~x, 1 / sec(~u)) => (sin(~u) + log(sec(~u)), ~u)
140-
@rule 𝛷(~x, 1 / cot(~u)) => (log(cos(~u)) + log(cot(~u)), ~u)
141-
# 1/hyperbolic functions
142-
@rule 𝛷(~x, 1 / sinh(~u)) => (log(tanh(~u / 2)) + log(sinh(~u)), ~u)
143-
@rule 𝛷(~x, 1 / cosh(~u)) => (atan(sinh(~u)) + log(cosh(~u)), ~u)
144-
@rule 𝛷(~x, 1 / tanh(~u)) => (log(sinh(~u)) + log(tanh(~u)), ~u)
145-
@rule 𝛷(~x, 1 / csch(~u)) => (cosh(~u) + log(csch(~u)), ~u)
146-
@rule 𝛷(~x, 1 / sech(~u)) => (sinh(~u) + log(sech(~u)), ~u)
147-
@rule 𝛷(~x, 1 / coth(~u)) => (log(cosh(~u)) + log(coth(~u)), ~u)
148-
# inverse trigonometric functions
149-
@rule 𝛷(~x, asin(~u)) => (~u * asin(~u) + sqrt(1 - ~u * ~u), ~u)
150-
@rule 𝛷(~x, acos(~u)) => (~u * acos(~u) + sqrt(1 - ~u * ~u), ~u)
151-
@rule 𝛷(~x, atan(~u)) => (~u * atan(~u) + log(~u * ~u + 1), ~u)
152-
@rule 𝛷(~x, acsc(~u)) => (~u * acsc(~u) + atanh(1 - ^(~u, -2)), ~u)
153-
@rule 𝛷(~x, asec(~u)) => (~u * asec(~u) + acosh(~u), ~u)
154-
@rule 𝛷(~x, acot(~u)) => (~u * acot(~u) + log(~u * ~u + 1), ~u)
155-
# inverse hyperbolic functions
156-
@rule 𝛷(~x, asinh(~u)) => (~u * asinh(~u) + sqrt(~u * ~u + 1), ~u)
157-
@rule 𝛷(~x, acosh(~u)) => (~u * acosh(~u) + sqrt(~u * ~u - 1), ~u)
158-
@rule 𝛷(~x, atanh(~u)) => (~u * atanh(~u) + log(~u + 1), ~u)
159-
@rule 𝛷(~x, acsch(~u)) => (acsch(~u), ~u)
160-
@rule 𝛷(~x, asech(~u)) => (asech(~u), ~u)
161-
@rule 𝛷(~x, acoth(~u)) => (~u * acot(~u) + log(~u + 1), ~u)
162-
# logarithmic and exponential functions
163-
@rule 𝛷(~x, log(~u)) => (~u + ~u * log(~u) +
164-
sum(pow_minus_rule(~u, ~x, -1); init = one(~u)),
165-
~u)
166-
@rule 𝛷(~x, 1 / log(~u)) => (log(log(~u)) + li(~u), ~u)
167-
@rule 𝛷(~x, exp(~u)) => (exp(~u) + ei(~u) + erfi_(~x), ~u)
168-
@rule 𝛷(~x, ^(exp(~u), ~k::is_neg)) => (^(exp(-~u), -~k), ~u)
169-
# square-root functions
170-
@rule 𝛷(~x, ^(~u, ~k::is_abs_half)) => (sum(sqrt_rule(~u, ~x, ~k); init = one(~u)), ~u);
171-
@rule 𝛷(~x, sqrt(~u)) => (sum(sqrt_rule(~u, ~x, 0.5); init = one(~u)), ~u);
172-
@rule 𝛷(~x, 1 / sqrt(~u)) => (sum(sqrt_rule(~u, ~x, -0.5); init = one(~u)), ~u);
173-
# rational functions
174-
@rule 𝛷(~x, 1 / ^(~u::is_univar_poly, ~k::is_pos_int)) => (sum(pow_minus_rule(~u,
175-
~x,
176-
-~k);
177-
init = one(~u)),
178-
~u)
179-
@rule 𝛷(~x, 1 / ~u::is_univar_poly) => (sum(pow_minus_rule(~u, ~x, -1); init = one(~u)),
180-
~u);
181-
@rule 𝛷(~x, ^(~u, -1)) => (log(~u) + ~u * log(~u), ~u)
182-
@rule 𝛷(~x, ^(~u, ~k::is_neg_int)) => (sum(^(~u, i) for i in (~k + 1):-1), ~u)
183-
@rule 𝛷(~x, 1 / ~u) => (log(~u), ~u)
184-
@rule 𝛷(~x, ^(~u, ~k::is_pos_int)) => (sum(^(~u, i + 1) for i in 1:(~k + 1)), ~u)
185-
@rule 𝛷(~x, 1) => (𝑥, 1)
186-
@rule 𝛷(~x, ~u) => ((~u + ^(~u, 2)), ~u)]
120+
# trigonometric functions
121+
@rule 𝛷(~x, sin(~u)) => (cos(~u) + si(~u), ~u)
122+
@rule 𝛷(~x, cos(~u)) => (sin(~u) + ci(~u), ~u)
123+
@rule 𝛷(~x, tan(~u)) => (log(cos(~u)), ~u)
124+
@rule 𝛷(~x, csc(~u)) => (log(csc(~u) + cot(~u)) + log(sin(~u)), ~u)
125+
@rule 𝛷(~x, sec(~u)) => (log(sec(~u) + tan(~u)) + log(cos(~u)), ~u)
126+
@rule 𝛷(~x, cot(~u)) => (log(sin(~u)), ~u)
127+
# hyperbolic functions
128+
@rule 𝛷(~x, sinh(~u)) => (cosh(~u), ~u)
129+
@rule 𝛷(~x, cosh(~u)) => (sinh(~u), ~u)
130+
@rule 𝛷(~x, tanh(~u)) => (log(cosh(~u)), ~u)
131+
@rule 𝛷(~x, csch(~u)) => (log(tanh(~u / 2)), ~u)
132+
@rule 𝛷(~x, sech(~u)) => (atan(sinh(~u)), ~u)
133+
@rule 𝛷(~x, coth(~u)) => (log(sinh(~u)), ~u)
134+
# 1/trigonometric functions
135+
@rule 𝛷(~x, 1 / sin(~u)) => (log(csc(~u) + cot(~u)) + log(sin(~u)), ~u)
136+
@rule 𝛷(~x, 1 / cos(~u)) => (log(sec(~u) + tan(~u)) + log(cos(~u)), ~u)
137+
@rule 𝛷(~x, 1 / tan(~u)) => (log(sin(~u)) + log(tan(~u)), ~u)
138+
@rule 𝛷(~x, 1 / csc(~u)) => (cos(~u) + log(csc(~u)), ~u)
139+
@rule 𝛷(~x, 1 / sec(~u)) => (sin(~u) + log(sec(~u)), ~u)
140+
@rule 𝛷(~x, 1 / cot(~u)) => (log(cos(~u)) + log(cot(~u)), ~u)
141+
# 1/hyperbolic functions
142+
@rule 𝛷(~x, 1 / sinh(~u)) => (log(tanh(~u / 2)) + log(sinh(~u)), ~u)
143+
@rule 𝛷(~x, 1 / cosh(~u)) => (atan(sinh(~u)) + log(cosh(~u)), ~u)
144+
@rule 𝛷(~x, 1 / tanh(~u)) => (log(sinh(~u)) + log(tanh(~u)), ~u)
145+
@rule 𝛷(~x, 1 / csch(~u)) => (cosh(~u) + log(csch(~u)), ~u)
146+
@rule 𝛷(~x, 1 / sech(~u)) => (sinh(~u) + log(sech(~u)), ~u)
147+
@rule 𝛷(~x, 1 / coth(~u)) => (log(cosh(~u)) + log(coth(~u)), ~u)
148+
# inverse trigonometric functions
149+
@rule 𝛷(~x, asin(~u)) => (~u * asin(~u) + sqrt(1 - ~u * ~u), ~u)
150+
@rule 𝛷(~x, acos(~u)) => (~u * acos(~u) + sqrt(1 - ~u * ~u), ~u)
151+
@rule 𝛷(~x, atan(~u)) => (~u * atan(~u) + log(~u * ~u + 1), ~u)
152+
@rule 𝛷(~x, acsc(~u)) => (~u * acsc(~u) + atanh(1 - ^(~u, -2)), ~u)
153+
@rule 𝛷(~x, asec(~u)) => (~u * asec(~u) + acosh(~u), ~u)
154+
@rule 𝛷(~x, acot(~u)) => (~u * acot(~u) + log(~u * ~u + 1), ~u)
155+
# inverse hyperbolic functions
156+
@rule 𝛷(~x, asinh(~u)) => (~u * asinh(~u) + sqrt(~u * ~u + 1), ~u)
157+
@rule 𝛷(~x, acosh(~u)) => (~u * acosh(~u) + sqrt(~u * ~u - 1), ~u)
158+
@rule 𝛷(~x, atanh(~u)) => (~u * atanh(~u) + log(~u + 1), ~u)
159+
@rule 𝛷(~x, acsch(~u)) => (acsch(~u), ~u)
160+
@rule 𝛷(~x, asech(~u)) => (asech(~u), ~u)
161+
@rule 𝛷(~x, acoth(~u)) => (~u * acot(~u) + log(~u + 1), ~u)
162+
# logarithmic and exponential functions
163+
@rule 𝛷(~x, log(~u)) => (
164+
~u + ~u * log(~u) +
165+
sum(pow_minus_rule(~u, ~x, -1); init = one(~u)),
166+
~u)
167+
@rule 𝛷(~x, 1 / log(~u)) => (log(log(~u)) + li(~u), ~u)
168+
@rule 𝛷(~x, exp(~u)) => (exp(~u) + ei(~u) + erfi_(~x), ~u)
169+
@rule 𝛷(~x, ^(exp(~u), ~k::is_neg)) => (^(exp(-~u), -~k), ~u)
170+
# square-root functions
171+
@rule 𝛷(~x, ^(~u, ~k::is_abs_half)) => (
172+
sum(sqrt_rule(~u, ~x, ~k); init = one(~u)), ~u)
173+
@rule 𝛷(~x, sqrt(~u)) => (
174+
sum(sqrt_rule(~u, ~x, 0.5); init = one(~u)), ~u)
175+
@rule 𝛷(~x, 1 / sqrt(~u)) => (
176+
sum(sqrt_rule(~u, ~x, -0.5); init = one(~u)), ~u)
177+
# rational functions
178+
@rule 𝛷(~x, 1 / ^(~u::is_univar_poly, ~k::is_pos_int)) => (
179+
sum(pow_minus_rule(~u,
180+
~x,
181+
-~k);
182+
init = one(~u)),
183+
~u)
184+
@rule 𝛷(~x, 1 / ~u::is_univar_poly) => (
185+
sum(pow_minus_rule(~u, ~x, -1); init = one(~u)),
186+
~u)
187+
@rule 𝛷(~x, ^(~u, -1)) => (log(~u) + ~u * log(~u), ~u)
188+
@rule 𝛷(~x, ^(~u, ~k::is_neg_int)) => (
189+
sum(^(~u, i) for i in (~k + 1):-1), ~u)
190+
@rule 𝛷(~x, 1 / ~u) => (log(~u), ~u)
191+
@rule 𝛷(~x, ^(~u, ~k::is_pos_int)) => (
192+
sum(^(~u, i + 1) for i in 1:(~k + 1)), ~u)
193+
@rule 𝛷(~x, 1) => (𝑥, 1)
194+
@rule 𝛷(~x, ~u) => ((~u + ^(~u, 2)), ~u)]
187195

188196
function apply_partial_int_rules(eq, x)
189197
y, dy = Chain(partial_int_rules)(𝛷(x, value(eq)))

src/integral.jl

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Base.signbit(x::SymbolicUtils.Sym{Number}) = false
66

77
"""
88
integrate(eq, x; kwargs...)
9-
10-
is the main entry point to integrate a univariate expression `eq` with respect to `x' (optional).
9+
10+
is the main entry point to integrate a univariate expression `eq` with respect to `x' (optional).
1111
1212
```julia
1313
julia> using Symbolics, SymbolNumericIntegration
@@ -17,35 +17,35 @@ julia> @variables x a
1717
julia> integrate(x * sin(2x))
1818
((1//4)*sin(2x) - (1//2)*x*cos(2x), 0, 0)
1919
20-
julia> integrate(x * sin(a*x), x; symbolic=true, detailed=false)
20+
julia> integrate(x * sin(a * x), x; symbolic = true, detailed = false)
2121
(sin(a*x) - a*x*cos(a*x)) / (a^2)
2222
23-
julia> integrate(x * sin(a*x), (x, 0, 1); symbolic=true, detailed=false)
23+
julia> integrate(x * sin(a * x), (x, 0, 1); symbolic = true, detailed = false)
2424
(sin(a) - a*cos(a)) / (a^2)
2525
```
2626
27-
Arguments:
28-
----------
29-
- `eq`: a univariate expression
30-
- `x`: independent variable (optional if `eq` is univariate) or a tuple
31-
of (independent variable, lower bound, upper bound) for definite integration.
32-
33-
Keyword Arguments:
34-
------------------
35-
- `abstol` (default: `1e-6`): the desired tolerance
36-
- `num_steps` (default: `2`): the number of different steps with expanding basis to be tried
37-
- `num_trials` (default: `10`): the number of trials in each step (no changes to the basis)
38-
- `show_basis` (default: `false`): if true, the basis (list of candidate terms) is printed
39-
- `bypass` (default: `false`): if true do not integrate terms separately but consider all at once
40-
- `symbolic` (default: `false`): try symbolic integration first (will be forced if `eq` has symbolic constants)
41-
- `max_basis` (default: `100`): the maximum number of candidate terms to consider
42-
- `verbose` (default: `false`): print a detailed report
43-
- `complex_plane` (default: `true`): generate random test points on the complex plane (if false, the points will be on real axis)
44-
- `radius` (default: `1.0`): the radius of the disk in the complex plane to generate random test points
45-
- `opt` (default: `STLSQ(exp.(-10:1:0))`): the sparse regression optimizer (from DataDrivenSparse)
46-
- `homotopy` (default: `true`): *deprecated*, will be removed in a future version
47-
- `use_optim` (default: `false`): *deprecated*, will be removed in a future version
48-
- `detailed` (default: `true`): `(solved, unsolved, err)` output format. If `detailed=false`, only the final integral is returned.
27+
## Arguments:
28+
29+
- `eq`: a univariate expression
30+
- `x`: independent variable (optional if `eq` is univariate) or a tuple
31+
of (independent variable, lower bound, upper bound) for definite integration.
32+
33+
## Keyword Arguments:
34+
35+
- `abstol` (default: `1e-6`): the desired tolerance
36+
- `num_steps` (default: `2`): the number of different steps with expanding basis to be tried
37+
- `num_trials` (default: `10`): the number of trials in each step (no changes to the basis)
38+
- `show_basis` (default: `false`): if true, the basis (list of candidate terms) is printed
39+
- `bypass` (default: `false`): if true do not integrate terms separately but consider all at once
40+
- `symbolic` (default: `false`): try symbolic integration first (will be forced if `eq` has symbolic constants)
41+
- `max_basis` (default: `100`): the maximum number of candidate terms to consider
42+
- `verbose` (default: `false`): print a detailed report
43+
- `complex_plane` (default: `true`): generate random test points on the complex plane (if false, the points will be on real axis)
44+
- `radius` (default: `1.0`): the radius of the disk in the complex plane to generate random test points
45+
- `opt` (default: `STLSQ(exp.(-10:1:0))`): the sparse regression optimizer (from DataDrivenSparse)
46+
- `homotopy` (default: `true`): *deprecated*, will be removed in a future version
47+
- `use_optim` (default: `false`): *deprecated*, will be removed in a future version
48+
- `detailed` (default: `true`): `(solved, unsolved, err)` output format. If `detailed=false`, only the final integral is returned.
4949
5050
Returns a tuple of (solved, unsolved, err) if `detailed == true`, where
5151

0 commit comments

Comments
 (0)