Hayleia wrote:Sinon, une bonne vieille multiplication matricielle
- Code: Select all
1 0 0 0 a b c d a b c d
0 0 1 0 * e f g h = i j k l
0 0 0 1 i j k l m n o p
m n o p
très bonne idée ! Merci Hayleia
j'utilise ta méthode dans le code ci-dessous d'une fonction dénommée supp(i,j,x)
où x est une np-matrice à composantes réelles (pour des composante complexe il faut legerement modifier le code mais c'est facile il suffit de remplacer x^T par conj(x^T)
bon alors il s'agit de supprimer la i ème ligne et la j ième colonne d'une matrice à composante réelles
lorsque i=0 aucune ligne est supprimée et lorsque j=0 aucune colonne est supprimée
cette fonction utilise une autre fonction : le code de ces deux fonctions sont donnés ici
- Code: Select all
Define supp(i,j,x)=
Func
Local ligne1,ligne2,var,var0,var1,var2,var3,u,id,v,y,z,nul,k
var3:=0
var2:=1
y:=x
v:=y
ligne1:=1
ligne2:=2
If i ≠ 0 Then
k:=i
Goto ligne1
EndIf
If j=0 Then
Goto ligne2
EndIf
k:=j
v:= y^T
var3:=1
Goto ligne1
Lbl ligne1
var:=dim(v)
var1:=var[1]
var0:=var1-1
nul:=newMat(var0,1)
id:=canon(var0)
var:=0
While var<var1
var:=var+1
If var = 1 and var=k Then
u:=nul
EndIf
If var ≠ 1 and var=k Then
u:=augment(u,nul)
EndIf
If var = 1 and var ≠ k Then
u:=(id^T[var2])^T
var2:=var2+1
EndIf
If var ≠ 1 and var ≠ k Then
u:=augment(u,(id^T[var2])^T)
var2:=var2+1
EndIf
EndWhile
If var3=0 Then
y:=u.y
k:=j
v:=y^T
var2:=1
EndIf
If var3=1 Then
y:=y.u^T
EndIf
var3:=var3+1
If var3=2 Then
Goto ligne2
EndIf
If j=0 Then
Goto ligne2
EndIf
Goto ligne1
Lbl ligne2
z:=y
Return z
EndFunc
et ci-dessous la fonction canon(n)
- Code: Select all
Define canon(n)=
Func
Local var,id
id:=newMat(n,n)
var:=1
While var ≤ n
id[var,var]:=1
var:=var+1
EndWhile
Return id
Endfunc