Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F91070928
matrix_pod.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
Thu, Nov 7, 13:55
Size
2 KB
Mime Type
text/x-python
Expires
Sat, Nov 9, 13:55 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
22190460
Attached To
R6746 RationalROMPy
matrix_pod.py
View Options
import
numpy
as
np
import
scipy.sparse
as
sp
from
matplotlib
import
pyplot
as
plt
from
rrompy.hfengines.base
import
LinearAffineEngine
,
NumpyEngineBase
from
rrompy.reduction_methods.standard
import
RationalInterpolant
as
RI
from
rrompy.reduction_methods.standard
import
ReducedBasis
as
RB
from
rrompy.parameter.parameter_sampling
import
QuadratureSampler
as
QS
test
=
2
method
=
"RationalInterpolant"
#method = "ReducedBasis"
verb
=
0
class
MatrixEngineBase
(
LinearAffineEngine
,
NumpyEngineBase
):
pass
N
=
100
solver
=
MatrixEngineBase
(
verbosity
=
verb
)
solver
.
npar
=
1
solver
.
nAs
=
2
if
test
==
1
:
solver
.
As
=
[
sp
.
spdiags
([
np
.
arange
(
1
,
1
+
N
)],
[
0
],
N
,
N
),
-
sp
.
eye
(
N
)]
elif
test
==
2
:
solver
.
setSolver
(
"SOLVE"
)
fftB
=
np
.
fft
.
fft
(
np
.
eye
(
N
))
*
N
**-.
5
solver
.
As
=
[
fftB
.
dot
(
np
.
multiply
(
np
.
arange
(
1
,
1
+
N
),
fftB
.
conj
())
.
T
),
-
np
.
eye
(
N
)]
np
.
random
.
seed
(
420
)
solver
.
nbs
=
1
solver
.
bs
=
[
np
.
random
.
randn
(
N
)
+
1.j
*
np
.
random
.
randn
(
N
)]
solver
.
_affinePoly
=
True
solver
.
thAs
=
solver
.
getMonomialWeights
(
solver
.
nAs
)
solver
.
thbs
=
solver
.
getMonomialWeights
(
solver
.
nbs
)
mu0
=
10.25
mutar
=
12.5
murange
=
[
5.25
,
15.25
]
if
method
==
"RationalInterpolant"
:
params
=
{
'N'
:
10
,
'M'
:
9
,
'S'
:
11
,
'POD'
:
True
,
'polybasis'
:
"CHEBYSHEV"
,
'sampler'
:
QS
(
murange
,
"CHEBYSHEV"
)}
approx
=
RI
(
solver
,
mu0
=
mu0
,
approxParameters
=
params
,
verbosity
=
verb
)
elif
method
==
"ReducedBasis"
:
params
=
{
'R'
:
10
,
'S'
:
11
,
'POD'
:
True
,
'sampler'
:
QS
(
murange
,
"CHEBYSHEV"
)}
approx
=
RB
(
solver
,
mu0
=
mu0
,
approxParameters
=
params
,
verbosity
=
verb
)
approx
.
setupApprox
()
approx
.
plotApprox
(
mutar
,
name
=
'u_app'
)
approx
.
plotHF
(
mutar
,
name
=
'u_HF'
)
approx
.
plotErr
(
mutar
,
name
=
'err'
)
approx
.
plotRes
(
mutar
,
name
=
'res'
)
appErr
,
solNorm
=
approx
.
normErr
(
mutar
),
approx
.
normHF
(
mutar
)
resNorm
,
RHSNorm
=
approx
.
normRes
(
mutar
),
approx
.
normRHS
(
mutar
)
print
((
'SolNorm:
\t
{}
\n
Err:
\t
{}
\n
ErrRel:
\t
{}'
)
.
format
(
solNorm
,
appErr
,
np
.
divide
(
appErr
,
solNorm
)))
print
((
'RHSNorm:
\t
{}
\n
Res:
\t
{}
\n
ResRel:
\t
{}'
)
.
format
(
RHSNorm
,
resNorm
,
np
.
divide
(
resNorm
,
RHSNorm
)))
polesTrue
=
np
.
arange
(
1
,
1
+
N
)
polesTrue
=
polesTrue
[
polesTrue
>=
murange
[
0
]]
polesTrue
=
polesTrue
[
polesTrue
<=
murange
[
1
]]
polesApp
=
approx
.
getPoles
()
mask
=
(
np
.
real
(
polesApp
)
<
murange
[
0
])
|
(
np
.
real
(
polesApp
)
>
murange
[
1
])
print
(
"Outliers:"
,
polesApp
[
mask
])
polesApp
=
polesApp
[
~
mask
]
plt
.
figure
()
plt
.
plot
(
np
.
real
(
polesApp
),
np
.
imag
(
polesApp
),
'kx'
)
plt
.
plot
(
polesTrue
,
np
.
zeros_like
(
polesTrue
),
'm.'
)
plt
.
axis
(
'equal'
)
plt
.
grid
()
plt
.
show
()
plt
.
close
()
Event Timeline
Log In to Comment