FSG
Posted: 25 Jan 2016, 16:40
Salut les camarades
ici un truc sympa en remerciement pour toutes les fois que vous m'avez aidé
ici une fonction sympa sur la t-nspire CX CAS que je nomme sev(M)=N
cette fonction consiste à partir d'une matrice non nulle quelconque
pour ce faire ici j'utilise la forme sesquilinéaire à gauche (d'où le titre FSG)
par exemple
M est une matrice de rang 4 selon
et on obtiens
la fonction sev(M)=N (voir post precedent)
elle fonctionne avec six autres fonctions dont je fais aussi le listing (tout fonctionne à présent)
les fonctions nul(x) , unit(x) , norme (x) , colineaire(x,y) , compose(x,y) , supp (i,j,x)
Listing sev(M)=N
attention ici -ma machine fonctionne comme ça mais il est possible que sur d'autres machines se soit différent- pour toute matrice M à valeurs complexes alors M^T désigne la matrice transconjuguée de M (la matrice adjointe)
---------------------------------
-------------------------------------------
-----------------------------------------
----------------------------------
--------------------------------
______________________
ici un truc sympa en remerciement pour toutes les fois que vous m'avez aidé
ici une fonction sympa sur la t-nspire CX CAS que je nomme sev(M)=N
cette fonction consiste à partir d'une matrice non nulle quelconque
$mathjax$M\in \mathcal {M}_{np}(\mathbb {C})$mathjax$
de construire une matrice N de même rang que M mais telle que tout vecteur colonne de N est aussi un vecteur colonne de M pour ce faire ici j'utilise la forme sesquilinéaire à gauche (d'où le titre FSG)
par exemple
M est une matrice de rang 4 selon
$mathjax$M=\begin {pmatrix} 1 & 2 & 0 & -i & -i & i & 1-7i &2i \\ i &2i & -i & 0 & i & 1 & -4+3i & 1-i \\ -1 & -2 & -2i & i& 3i& 0& -1+7i& -3i \\ 2 &4 &1 &-1 &-2 &-i &-3+4i &2-i \\ -2i & -4i & 1 & 2 & 1 & 2i & 4-10i& -1+2i \end {pmatrix}$mathjax$
et on obtiens
$mathjax$N=\begin {pmatrix} 1 & 0 & -i & i \\ i & -i & 0 & 1 \\ -1 & -2i & i& 0 \\ 2 &1 &-1 &-i \\ -2i & 1 & 2 & 2i \end {pmatrix}$mathjax$
la fonction sev(M)=N (voir post precedent)
elle fonctionne avec six autres fonctions dont je fais aussi le listing (tout fonctionne à présent)
les fonctions nul(x) , unit(x) , norme (x) , colineaire(x,y) , compose(x,y) , supp (i,j,x)
Listing sev(M)=N
attention ici -ma machine fonctionne comme ça mais il est possible que sur d'autres machines se soit différent- pour toute matrice M à valeurs complexes alors M^T désigne la matrice transconjuguée de M (la matrice adjointe)
- Code: Select all
Define sev(mat)=
Func
Local ligne0,ligne1,ligne2,var,vec,vec0,vec1,vec2,i,j,k,l,n,p,v,w,x,x0,z
ligne0:=1
ligne1:=2
ligne2:=3
z:=mat
x:=nul(z)
if x=0 then
goto ligne0
endif
p:=coldim(z)
if p=1 then
goto ligne0
endif
i:=1
j:=1
while i [latex]\leq[/latex] p
vec1:=(z^T[ i ])^T
vec2:=(z^T[ j ])^T
if i=j then
x:=nul(vec1)
if x=0 then
z:=supp(0,i,z)
p:=coldim(z)
i:=1
j:=1
goto ligne1
endif
endif
if i [latex]\neq[/latex] j then
x:=colineaire(vec1,vec2)
if x=0 then z:=supp(0,j,z)
p:=coldim(z)
i:=1
j:=1
goto ligne1
endif
endif
var:=j
if var=p then
i:=i+1
j:=i
else
j:=j+1
endif
lbl ligne1
endwhile
p:=coldim(z)
n:=rowdim(z)
if p [latex]\leq[/latex] 2 then
goto ligne0
endif
k:=2
vec1:=(z^T[ 1 ])^T
w:=vec1
vec2:=(z^T[ 2 ])^T
vec0:=compose(vec1,vec2)
x0:=nul(vec0)
if x0=1 then
vec:=unit(vec0)
else
vec:=vec0
endif
w:=augment(w,vec)
goto ligne2
lbl ligne2
l:=k+1
for i,1,k
j:=i-1
if i=1 then
vec:=(z^T[ l ])^T
v:=vec
else
vec1:=(w^T[ j ])^T
vec2:=(v^T[ j ])^T
vec0:=compose(vec1,vec2)
x0:=nul(vec0)
if x0=1 then
vec:=unit(vec0)
else
vec:=vec0
endif
v:=augment(v,vec)
endif
endfor
vec1:=(w^T[ k ])^T
vec2:=(v^T[ k ])^T
vec0:=compose(vec1,vec2)
x0:=nul(vec0)
if x0=1 then
vec:=unit(vec0)
else
vec:=vec0
endif
x:=nul(vec)
if x=0 and p=l then
z:=supp(0,l,z)
goto ligne0
endif
var:=p
if x=0 and var > l then
z:=supp(0,l,z)
p:=coldim(z)
goto ligne2
endif
if x=1 and p=l then
goto ligne0
endif
if x=1 and p>l then
w:=augment(w,vec)
k:=k+1
goto ligne2
endif
lbl ligne0
return z
endfunc
---------------------------------
- Code: Select all
Define supp(i,j,x)=
Func
Local z,n,p,k,l,ligne
n:=rowdim(x)
p:=coldim(x)
z:={ }
for k,1,n
if k=i
cycle
ligne:={ }
for l,1,p
if l [latex]\neq[/latex] j
ligne:=augment(ligne,{ x[ k,l ] } )
endfor
z:= when ( z={ }, { ligne } , colaugment( z , { ligne } ) )
endfor
return z
endfunc
-------------------------------------------
- Code: Select all
Define nul(x)=
Func
Local eps,y,z,z0,rez,imz
eps:=[latex]10^{-10}[/latex]
y:=x^T.x
z0:=trace(y)
rez:=abs(real(z0))
imz:=abs(imag(z0))
if rez [latex]\leq[/latex] eps and imz [latex]\leq[/latex] eps then
z:=0
else
z:=1
endif
return z
endfunc
-----------------------------------------
- Code: Select all
Define colineaire(v,w)=
Func
Local vv,ww,vw,wv,var,eps,x,rez,imz,
eps:=[latex]10^{-10}[/latex]
var:=v^T.v
vv:=var[ 1,1 ]
var:=wT.w
ww:=var[ 1,1 ]
var:=v^T.w
vw:=var[ 1,1 ]
var:=w^T.v
wv:=var[ 1,1 ]
var:=vw.wv.-vv.ww
rez:=abs(real(var))
imz:=abs(imag(var))
if rez [latex]\leq[/latex] eps and imz [latex]\leq[/latex] eps then
x:=0
else
x=1
endif
return x
endfunc
----------------------------------
- Code: Select all
Define norme(vec)=
Func
Local nor,var
nor:=vec^T.vec
var:=nor[ 1,1 ]
nor:= [latex]\sqrt {var}[/latex]
return nor
endfunc
--------------------------------
- Code: Select all
Define unit(x)=
Func
Local var,z
var:=norme(x)
z:=[latex]\frac {1}{var}[/latex].x
return z
endfunc
______________________
- Code: Select all
Define compose(x,y)=
Func
Local z,var1,var2
var1:=x^T.x
var2:=x^T.y
z:=var1[ 1,1 ].y-var2[ 1,1 ].x
return z
endfunc