Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F62087044
AL_Fct.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, May 10, 20:10
Size
8 KB
Mime Type
text/x-python
Expires
Sun, May 12, 20:10 (2 d)
Engine
blob
Format
Raw Data
Handle
17601100
Attached To
rJNAL Jupyter notebooks for Linear Algebra
AL_Fct.py
View Options
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 13 16:42:29 2019
@author: jecker
"""
from
__future__
import
division
import
numpy
as
np
from
IPython.display
import
display
,
Latex
import
matplotlib.pyplot
as
plt
import
math
import
plotly
import
plotly.plotly
as
py
import
plotly.graph_objs
as
go
plotly
.
offline
.
init_notebook_mode
(
connected
=
True
)
from
IPython.core.magic
import
register_cell_magic
from
IPython.display
import
HTML
,
display
@register_cell_magic
def
bgc
(
color
,
cell
=
None
):
script
=
(
"var cell = this.closest('.jp-CodeCell');"
"var editor = cell.querySelector('.jp-Editor');"
"editor.style.background='{}';"
"this.parentNode.removeChild(this)"
)
.
format
(
color
)
display
(
HTML
(
'<img src onerror="{}">'
.
format
(
script
)))
#PRINTS Equations, systems, matrix
def
strEq
(
n
,
coeff
):
# Latex str of one equation in format a1x1+ ...+anxn or with coefficients.
Eq
=
''
if
str
(
coeff
)
==
''
or
coeff
==
[]:
if
n
==
1
:
Eq
=
Eq
+
'a_1x_1 = b'
elif
n
==
2
:
Eq
=
Eq
+
'a_1x_1 + a_2x_2 = b'
else
:
Eq
=
Eq
+
'a_1x_1 + \ldots + '
+
'a_'
+
str
(
n
)
+
'x_'
+
str
(
n
)
+
'=b'
else
:
if
n
==
1
:
Eq
=
Eq
+
str
(
round
(
coeff
[
0
],
3
)
if
coeff
[
0
]
%
1
else
int
(
coeff
[
0
]))
+
'x_'
+
str
(
1
)
+
\
'='
+
str
(
round
(
coeff
[
len
(
coeff
)
-
1
],
3
)
if
coeff
[
len
(
coeff
)
-
1
]
%
1
else
int
(
coeff
[
len
(
coeff
)
-
1
]))
else
:
Eq
=
Eq
+
str
(
round
(
coeff
[
0
],
3
)
if
coeff
[
0
]
%
1
else
int
(
coeff
[
0
]))
+
'x_'
+
str
(
1
)
for
i
in
range
(
1
,
n
-
1
):
Eq
=
Eq
+
' + '
+
str
(
round
(
coeff
[
i
],
3
)
if
coeff
[
i
]
%
1
else
int
(
coeff
[
i
]))
+
'x_'
+
str
(
i
+
1
)
Eq
=
Eq
+
' + '
+
str
(
round
(
coeff
[
len
(
coeff
)
-
2
],
3
)
if
coeff
[
len
(
coeff
)
-
2
]
%
1
else
int
(
coeff
[
len
(
coeff
)
-
2
]))
\
+
'x_'
+
str
(
n
)
+
'='
+
str
(
round
(
coeff
[
len
(
coeff
)
-
1
],
3
)
if
coeff
[
len
(
coeff
)
-
1
]
%
1
else
int
(
coeff
[
len
(
coeff
)
-
1
]))
return
Eq
def
printEq
(
n
,
coeff
):
# Latex Print of one equation in format a1x1+ ...+anxn or with coefficients.
texEq
=
'$'
texEq
=
texEq
+
strEq
(
n
,
coeff
)
texEq
=
texEq
+
'$'
display
(
Latex
(
texEq
))
def
printSyst
(
m
,
n
,
MatCoeff
):
# Latex Print of one system of m equation in format ai1x1+ ...+ainxn=bi or with coeff in MatCoeff.
texSyst
=
'$
\\
begin{cases}'
Eq_list
=
[]
MatCoeff
=
np
.
array
(
MatCoeff
)
#just in case it's not
for
i
in
range
(
m
):
if
str
(
MatCoeff
)
==
''
:
Eq_i
=
''
if
n
==
1
:
Eq_i
=
Eq_i
+
'a_{'
+
str
(
i
+
1
)
+
'1}'
+
'x_1 = b_'
+
str
(
i
+
1
)
elif
n
==
2
:
Eq_i
=
Eq_i
+
'a_{'
+
str
(
i
+
1
)
+
'1}'
+
'x_1 + '
+
'a_{'
+
str
(
i
+
1
)
+
'2}'
+
'x_2 = b_'
+
str
(
i
+
1
)
else
:
Eq_i
=
Eq_i
+
'a_{'
+
str
(
i
+
1
)
+
'1}'
+
'x_1 + \ldots +'
+
'a_{'
+
str
(
i
+
1
)
+
str
(
n
)
+
'}'
+
'x_'
+
str
(
n
)
+
'=b_'
+
str
(
i
+
1
)
else
:
Eq_i
=
strEq
(
n
,
MatCoeff
[
i
,:])
Eq_list
.
append
(
Eq_i
)
texSyst
=
texSyst
+
Eq_list
[
i
]
+
'
\\\\
'
texSyst
=
texSyst
+
'
\\
end{cases}$'
display
(
Latex
(
texSyst
))
def
texMatrix
(
A
):
#return tex expression of one matrix
texApre
=
'
\\
left(
\\
begin{array}{'
texA
=
''
for
i
in
np
.
asarray
(
A
)
:
texALigne
=
''
texALigne
=
texALigne
+
str
(
round
(
i
[
0
],
3
)
if
i
[
0
]
%
1
else
int
(
i
[
0
]))
if
texA
==
''
:
texApre
=
texApre
+
'c'
for
j
in
i
[
1
:]
:
if
texA
==
''
:
texApre
=
texApre
+
'c'
texALigne
=
texALigne
+
' & '
+
str
(
round
(
j
,
3
)
if
j
%
1
else
int
(
j
))
texALigne
=
texALigne
+
'
\\\\
'
texA
=
texA
+
texALigne
texA
=
texApre
+
'} '
+
texA
[:
-
2
]
+
'
\\
end{array}
\\
right)'
return
texA
def
printA
(
A
)
:
#Print matrix
texA
=
'$'
+
texMatrix
(
A
)
+
'$'
# print(texA)
display
(
Latex
(
texA
))
def
printEquMatrices
(
listOfMatrices
):
#list of matrices is M=[M1, M2, ..., Mn]
texEqu
=
'$'
+
texMatrix
(
listOfMatrices
[
0
])
for
i
in
range
(
1
,
len
(
listOfMatrices
)):
texEqu
=
texEqu
+
'
\\
quad
\\
sim
\\
quad'
+
texMatrix
(
listOfMatrices
[
i
])
texEqu
=
texEqu
+
'$'
display
(
Latex
(
texEqu
))
#%% Functions to enter smth
def
EnterInt
(
n
):
#function enter integer.
while
type
(
n
)
!=
int
:
try
:
n
=
int
(
n
)
if
n
<=
0
:
print
(
"Le nombre ne peut pas être négatif!"
)
print
(
"Entrez à nouveau : "
)
n
=
input
()
except
:
print
(
"Ce n'est pas un entier!"
)
print
(
"Entrez à nouveau :"
)
n
=
input
()
n
=
int
(
n
)
return
n
def
EnterListReal
(
n
):
#function enter list of real numbers.
coeff
=
input
()
while
type
(
coeff
)
!=
list
:
try
:
coeff
=
[
float
(
eval
(
x
))
for
x
in
coeff
.
split
(
','
)]
if
len
(
coeff
)
!=
n
+
1
:
print
(
"Vous n'avez pas entré le bon nombre de réels!"
)
print
(
"Entrez à nouveau : "
)
coeff
=
input
()
except
:
print
(
"Ce n'est pas le bon format!"
)
print
(
"Entrez à nouveau"
)
coeff
=
input
()
#coeff[abs(coeff)<1e-15]=0 #ensures that 0 is 0.
return
coeff
#%%Verify if sol is the solution of the equation with coefficients coeff
def
SolOfEq
(
sol
,
coeff
,
i
):
A
=
np
.
asarray
(
coeff
[
0
:
len
(
coeff
)
-
1
])
if
abs
(
np
.
dot
(
A
,
sol
)
-
coeff
[
len
(
coeff
)
-
1
])
<
1e-10
:
print
(
"La suite entrée est une solution de l'équation"
,
i
)
else
:
print
(
"La suite entrée n'est pas une solution de l'équation"
,
i
)
return
abs
(
np
.
dot
(
A
,
sol
)
-
coeff
[
len
(
coeff
)
-
1
])
<
1e-10
def
SolOfSyst
(
solution
,
MatriceCoeff
,
m
):
MatriceCoeff
=
np
.
array
(
MatriceCoeff
)
isSol
=
[
SolOfEq
(
solution
,
MatriceCoeff
[
i
,:],
i
+
1
)
for
i
in
range
(
0
,
m
)]
if
all
(
isSol
[
i
]
==
True
for
i
in
range
(
len
(
isSol
))):
print
(
"C'est une solution du système"
)
else
:
print
(
"Ce n'est pas une solution du système"
)
#%%Plots using plotly
def
Plot2DSys
(
xL
,
xR
,
p
,
MatCoeff
):
# small values for p allows for dots to be seen
MatCoeff
=
np
.
array
(
MatCoeff
)
x
=
np
.
linspace
(
xL
,
xR
,
p
)
legend
=
[]
data
=
[]
for
i
in
range
(
1
,
len
(
MatCoeff
)
+
1
):
trace
=
go
.
Scatter
(
x
=
x
,
y
=
(
MatCoeff
[
i
-
1
,
2
]
-
MatCoeff
[
i
-
1
,
0
]
*
x
)
/
MatCoeff
[
i
-
1
,
1
],
name
=
'Droite
%d
'
%
i
)
data
.
append
(
trace
)
fig
=
go
.
Figure
(
data
=
data
)
plotly
.
offline
.
iplot
(
fig
)
def
Plot3DSys
(
xL
,
xR
,
p
,
MatCoeff
):
# small values for p allows for dots to be seen
MatCoeff
=
np
.
array
(
MatCoeff
)
x
=
np
.
linspace
(
xL
,
xR
,
p
)
legend
=
[]
data
=
[]
for
i
in
range
(
1
,
len
(
MatCoeff
)
+
1
):
trace
=
go
.
Scatter
(
x
=
x
,
y
=
(
MatCoeff
[
i
-
1
,
2
]
-
MatCoeff
[
i
-
1
,
0
]
*
x
)
/
MatCoeff
[
i
-
1
,
1
],
name
=
'Droite
%d
'
%
i
)
data
.
append
(
trace
)
fig
=
go
.
Figure
(
data
=
data
)
plotly
.
offline
.
iplot
(
fig
)
#%%Echelonnage
def
echZero
(
indice
,
M
):
#echelonne la matrice pour mettre les zeros dans les lignes du bas. M (matrice ou array) et Mat (list) pas le même format.
Mat
=
M
[
indice
==
False
,:]
.
ravel
()
Mat
=
np
.
concatenate
([
Mat
,
M
[
indice
==
True
,:]
.
ravel
()])
Mat
=
Mat
.
reshape
(
len
(
M
),
len
(
M
[
0
,:]))
return
Mat
def
Eij
(
M
,
i
,
j
):
#matrice elementaire, echange la ligne i avec la ligne j
M
[[
i
,
j
],:]
=
M
[[
j
,
i
],:]
return
M
def
Ealpha
(
M
,
i
,
alpha
):
# matrice elementaire, multiple la ligne i par le scalaire alpha
M
[
i
,:]
=
alpha
*
M
[
i
,:]
return
M
def
Eijalpha
(
M
,
i
,
j
,
alpha
):
# matrice elementaire, AJOUTE à la ligne i alpha *ligne j. Attention alpha + ou -
M
[
i
,:]
=
M
[
i
,:]
+
alpha
*
M
[
j
,:]
return
M
def
echelonMat
(
MatCoeff
):
Mat
=
np
.
array
(
MatCoeff
)
Mat
=
Mat
.
astype
(
float
)
# in case the array in int instead of float.
numPivot
=
0
for
i
in
range
(
len
(
Mat
)):
j
=
i
while
all
(
abs
(
Mat
[
j
:,
i
])
<
1e-15
)
and
j
!=
len
(
Mat
[
0
,:])
-
1
:
#if column (or rest of) is zero, take next column
j
+=
1
if
j
==
len
(
Mat
[
0
,:])
-
1
:
print
(
"La matrice est sous la forme échelonnée"
)
printEquMatrices
([
MatCoeff
,
Mat
])
break
if
abs
(
Mat
[
i
,
j
])
<
1e-15
:
Mat
[
i
,
j
]
=
0
zero
=
abs
(
Mat
[
i
:,
j
])
<
1e-15
M
=
echZero
(
zero
,
Mat
[
i
:,:]
)
Mat
[
i
:,:]
=
M
Mat
=
Ealpha
(
Mat
,
i
,
1
/
Mat
[
i
,
j
]
)
#normalement Mat[i,i]!=0
for
k
in
range
(
i
+
1
,
len
(
MatCoeff
)):
Mat
=
Eijalpha
(
Mat
,
k
,
i
,
-
Mat
[
k
,
j
])
#Mat[k,:]=[0 if abs(Mat[k,l])<1e-15 else Mat[k,l] for l in range(len(MatCoeff[0,:]))]
numPivot
+=
1
Mat
[
abs
(
Mat
)
<
1e-15
]
=
0
printA
(
np
.
asmatrix
(
Mat
))
Event Timeline
Log In to Comment