Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F91928093
poly_fitting.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Nov 15, 19:49
Size
5 KB
Mime Type
text/x-python
Expires
Sun, Nov 17, 19:49 (2 d)
Engine
blob
Format
Raw Data
Handle
22348942
Attached To
R6746 RationalROMPy
poly_fitting.py
View Options
# Copyright (C) 2018 by the RROMPy authors
#
# This file is part of RROMPy.
#
# RROMPy is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RROMPy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with RROMPy. If not, see <http://www.gnu.org/licenses/>.
#
import
numpy
as
np
from
rrompy.utilities.poly_fitting
import
customFit
from
rrompy.utilities.poly_fitting.polynomial
import
(
polybases
,
polyfitname
,
polydomcoeff
,
polyval
,
polyroots
,
polyvander
,
nextDerivativeIndices
)
from
rrompy.parameter
import
checkParameterList
def
test_chebyshev
():
assert
"CHEBYSHEV"
in
polybases
fitname
=
polyfitname
(
"CHEBYSHEV"
)
domcoeff
=
polydomcoeff
(
5
,
"CHEBYSHEV"
)
assert
fitname
==
"chebfit"
assert
np
.
isclose
(
domcoeff
,
16
,
rtol
=
1e-5
)
assert
np
.
allclose
(
polyroots
((
-
1
,
1
,
-
1
,
1
),
"CHEBYSHEV"
),
np
.
array
([
-.
5
,
0.
,
1.
]),
rtol
=
1e-5
)
Phi
=
polyvander
(
np
.
arange
(
5
),
4
,
"CHEBYSHEV"
)
y
=
2.
*
np
.
arange
(
5
)
cFit
=
customFit
(
Phi
,
y
)
assert
np
.
allclose
(
cFit
,
[
0
,
2
,
0
,
0
,
0
],
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
np
.
arange
(
5
),
cFit
,
"CHEBYSHEV"
),
y
,
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
np
.
arange
(
5
),
cFit
,
"CHEBYSHEV"
,
m
=
1
),
2.
*
np
.
ones
(
5
),
rtol
=
1e-5
)
def
test_legendre
():
assert
"LEGENDRE"
in
polybases
fitname
=
polyfitname
(
"LEGENDRE"
)
domcoeff
=
polydomcoeff
([
0
,
5
],
"LEGENDRE"
)
assert
fitname
==
"legfit"
assert
np
.
allclose
(
domcoeff
,
[
1.
,
63.
/
8
],
rtol
=
1e-5
)
assert
np
.
allclose
(
polyroots
((
1
,
2
,
3
,
4
),
"LEGENDRE"
),
np
.
array
([
-
0.85099543
,
-
0.11407192
,
0.51506735
]),
rtol
=
1e-5
)
Phi
=
polyvander
(
np
.
arange
(
5
),
4
,
"LEGENDRE"
)
y
=
2.
*
np
.
arange
(
5
)
cFit
=
customFit
(
Phi
,
y
)
assert
np
.
allclose
(
cFit
,
[
0
,
2
,
0
,
0
,
0
],
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
np
.
arange
(
5
),
cFit
,
"LEGENDRE"
),
y
,
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
np
.
arange
(
5
),
cFit
,
"LEGENDRE"
,
m
=
1
),
2.
*
np
.
ones
(
5
),
rtol
=
1e-5
)
def
test_monomial
():
assert
"MONOMIAL"
in
polybases
fitname
=
polyfitname
(
"MONOMIAL"
)
domcoeff
=
polydomcoeff
(
5
,
"MONOMIAL"
)
assert
fitname
==
"polyfit"
assert
np
.
isclose
(
domcoeff
,
1.
,
rtol
=
1e-5
)
assert
np
.
allclose
(
polyroots
([
0.
+
0.j
,
1.
+
0.j
,
0.
+
0.j
,
1.
+
0.j
],
"MONOMIAL"
),
np
.
array
([
0.
,
1.j
,
-
1.j
]),
rtol
=
1e-5
)
Phi
=
polyvander
(
np
.
arange
(
5
),
4
,
"MONOMIAL"
)
y
=
2.
*
np
.
arange
(
5
)
cFit
=
customFit
(
Phi
,
y
)
assert
np
.
allclose
(
cFit
,
[
0
,
2
,
0
,
0
,
0
],
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
np
.
arange
(
5
),
cFit
,
"MONOMIAL"
),
y
,
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
np
.
arange
(
5
),
cFit
,
"MONOMIAL"
,
m
=
1
),
2.
*
np
.
ones
(
5
),
rtol
=
1e-5
)
def
test_cheb_confluence
():
x
=
np
.
arange
(
5
)
x
=
np
.
delete
(
x
,
3
)
Phi
=
polyvander
(
x
,
4
,
"CHEBYSHEV"
,
[[
0
,
1
]]
+
[[
0
]]
*
3
,
reorder
=
[
0
,
2
,
3
,
1
,
4
])
y
=
2.
*
np
.
arange
(
5
)
y
[
3
]
=
2.
cFit
=
customFit
(
Phi
,
y
)
mask
=
np
.
arange
(
len
(
y
))
!=
3
assert
np
.
allclose
(
cFit
,
[
0
,
2
,
0
,
0
,
0
],
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
x
,
cFit
,
"CHEBYSHEV"
),
y
[
mask
],
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
x
[
0
],
cFit
,
"CHEBYSHEV"
,
m
=
1
),
y
[
~
mask
],
rtol
=
1e-5
)
def
test_mon_confluence_2d
():
x
,
_
=
checkParameterList
([[
0
,
0
],
[
1
,
1
],
[
-
1
,
-
1
]])
y
=
np
.
array
([
3.
,
5.
,
1.
,
2.
,
12.
,
-
2.
])
.
reshape
((
-
1
,
1
))
# 3+y+5x+2xy+x2y
Phi
=
polyvander
(
x
,
[
2
,
1
],
"MONOMIAL"
,
[[[
0
,
0
],
[
1
,
0
],
[
0
,
1
],
[
1
,
1
]]]
+
[[[
0
,
0
]]]
*
2
)
cFit
=
customFit
(
Phi
,
y
)
.
reshape
((
3
,
2
))
mask
=
np
.
array
([
0
,
4
,
5
])
assert
np
.
allclose
(
cFit
.
flatten
(),
[
3
,
1
,
5
,
2
,
0
,
1
],
atol
=
1e-5
)
assert
np
.
allclose
(
polyval
(
x
,
cFit
,
"MONOMIAL"
)
.
flatten
(),
y
[
mask
]
.
flatten
(),
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
([
x
[
0
]],
cFit
,
"MONOMIAL"
,
m
=
[
1
,
0
]),
y
[
1
],
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
([
x
[
0
]],
cFit
,
"MONOMIAL"
,
m
=
[
0
,
1
]),
y
[
2
],
rtol
=
1e-5
)
assert
np
.
allclose
(
polyval
([
x
[
0
]],
cFit
,
"MONOMIAL"
,
m
=
[
1
,
1
]),
y
[
3
],
rtol
=
1e-5
)
def
test_derivative_indices_4d
():
idxs
=
nextDerivativeIndices
([],
4
,
70
)
idxMag
=
[
np
.
sum
(
idx
)
for
idx
in
idxs
]
idxMagUnique
,
idxMagCount
=
np
.
unique
(
idxMag
,
return_counts
=
True
)
idxMagCount
=
np
.
cumsum
(
idxMagCount
)
assert
np
.
allclose
(
idxMagUnique
,
np
.
arange
(
5
),
atol
=
1e-10
)
assert
np
.
allclose
(
idxMagCount
,
[
1
,
5
,
15
,
35
,
70
],
atol
=
1e-10
)
Event Timeline
Log In to Comment