je tiens d'abord a remercier tous ceux qui m'ont repondu
pour mes precedentes questions. Peut-etre que celle ci est
legerement hors-sujet alors pardonnez moi d'avance.
Sous excel, j'arrive a resoudre un systeme Ax=b, c'est
assez simple ^^. De plus je pondere cette solution par les
termes d'un autre vecteur colonne c. Donc j'obtiens x_i =
(Inv(A)*b)_i * c_i ou "_i" designe le i eme terme du
vecteur. Maintenant j'aimerais automatiser tout cela au
sein d'une macro VBA... et bien sur c'est la que tout
plante....
J'ai ecris ceci en VBA :
Function LinEq(A, b, c)
LinEq = Application.WorksheetFunction.MMult
(Application.WorksheetFunction.MInverse
(Application.WorksheetFunction.Transpose(A)), b) * c
End Function
et tout se passe bien jusqu'a la multiplication terme a
terme entre (Inverse A)*b d'un cote et c de l'autre.
Je suis sur qu'il existe une reponse passe partout , mais
la je ne vois pas :(
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
garnote
Bonsoir Antoine,
Pour résoudre des systèmes d'équations linéaires pour lesquels on peut utiliser une matrice inverse, tu pourrais essayer cette fonction :
Function sel(ici As Range, la As Range) mi = Application.WorksheetFunction.MInverse(ici) s = Application.WorksheetFunction.MMult(mi, la) sel = s End Function
Exemple : Résoudre le système suivant : 2x+3y=5, x+y=2
A B C D 2 3 5 1 1 2
1. Je sélectionne D1:D2 2. J'entre la fonction =sel(A1:B2;C1:C2) 3. Je valide la fonction par Ctrl+Maj+Entrée.
Qu'en penses-tu ?
Serge
"Antoine" a écrit dans le message de news:
Bonjour a tous,
je tiens d'abord a remercier tous ceux qui m'ont repondu pour mes precedentes questions. Peut-etre que celle ci est legerement hors-sujet alors pardonnez moi d'avance.
Sous excel, j'arrive a resoudre un systeme Ax=b, c'est assez simple ^^. De plus je pondere cette solution par les termes d'un autre vecteur colonne c. Donc j'obtiens x_i > (Inv(A)*b)_i * c_i ou "_i" designe le i eme terme du vecteur. Maintenant j'aimerais automatiser tout cela au sein d'une macro VBA... et bien sur c'est la que tout plante.... J'ai ecris ceci en VBA :
Function LinEq(A, b, c)
LinEq = Application.WorksheetFunction.MMult (Application.WorksheetFunction.MInverse (Application.WorksheetFunction.Transpose(A)), b) * c
End Function
et tout se passe bien jusqu'a la multiplication terme a terme entre (Inverse A)*b d'un cote et c de l'autre.
Je suis sur qu'il existe une reponse passe partout , mais la je ne vois pas :(
Antoine
Bonsoir Antoine,
Pour résoudre des systèmes d'équations linéaires
pour lesquels on peut utiliser une matrice inverse, tu pourrais
essayer cette fonction :
Function sel(ici As Range, la As Range)
mi = Application.WorksheetFunction.MInverse(ici)
s = Application.WorksheetFunction.MMult(mi, la)
sel = s
End Function
Exemple : Résoudre le système suivant : 2x+3y=5, x+y=2
A B C D
2 3 5
1 1 2
1. Je sélectionne D1:D2
2. J'entre la fonction =sel(A1:B2;C1:C2)
3. Je valide la fonction par Ctrl+Maj+Entrée.
Qu'en penses-tu ?
Serge
"Antoine" <antoine_guillon@hotmail.com> a écrit dans le message de news:
uqwwLSlQDHA.560@TK2MSFTNGP10.phx.gbl...
Bonjour a tous,
je tiens d'abord a remercier tous ceux qui m'ont repondu
pour mes precedentes questions. Peut-etre que celle ci est
legerement hors-sujet alors pardonnez moi d'avance.
Sous excel, j'arrive a resoudre un systeme Ax=b, c'est
assez simple ^^. De plus je pondere cette solution par les
termes d'un autre vecteur colonne c. Donc j'obtiens x_i > (Inv(A)*b)_i * c_i ou "_i" designe le i eme terme du
vecteur. Maintenant j'aimerais automatiser tout cela au
sein d'une macro VBA... et bien sur c'est la que tout
plante....
J'ai ecris ceci en VBA :
Function LinEq(A, b, c)
LinEq = Application.WorksheetFunction.MMult
(Application.WorksheetFunction.MInverse
(Application.WorksheetFunction.Transpose(A)), b) * c
End Function
et tout se passe bien jusqu'a la multiplication terme a
terme entre (Inverse A)*b d'un cote et c de l'autre.
Je suis sur qu'il existe une reponse passe partout , mais
la je ne vois pas :(
Pour résoudre des systèmes d'équations linéaires pour lesquels on peut utiliser une matrice inverse, tu pourrais essayer cette fonction :
Function sel(ici As Range, la As Range) mi = Application.WorksheetFunction.MInverse(ici) s = Application.WorksheetFunction.MMult(mi, la) sel = s End Function
Exemple : Résoudre le système suivant : 2x+3y=5, x+y=2
A B C D 2 3 5 1 1 2
1. Je sélectionne D1:D2 2. J'entre la fonction =sel(A1:B2;C1:C2) 3. Je valide la fonction par Ctrl+Maj+Entrée.
Qu'en penses-tu ?
Serge
"Antoine" a écrit dans le message de news:
Bonjour a tous,
je tiens d'abord a remercier tous ceux qui m'ont repondu pour mes precedentes questions. Peut-etre que celle ci est legerement hors-sujet alors pardonnez moi d'avance.
Sous excel, j'arrive a resoudre un systeme Ax=b, c'est assez simple ^^. De plus je pondere cette solution par les termes d'un autre vecteur colonne c. Donc j'obtiens x_i > (Inv(A)*b)_i * c_i ou "_i" designe le i eme terme du vecteur. Maintenant j'aimerais automatiser tout cela au sein d'une macro VBA... et bien sur c'est la que tout plante.... J'ai ecris ceci en VBA :
Function LinEq(A, b, c)
LinEq = Application.WorksheetFunction.MMult (Application.WorksheetFunction.MInverse (Application.WorksheetFunction.Transpose(A)), b) * c
End Function
et tout se passe bien jusqu'a la multiplication terme a terme entre (Inverse A)*b d'un cote et c de l'autre.
Je suis sur qu'il existe une reponse passe partout , mais la je ne vois pas :(
Antoine
garnote
Salut Antoine,
Et tant qu'à être dans les vecteurs, voici une fonction personnalisée permettant d'obtenir le produit vectoriel de deux vecteurs.
Function pv(uv As Range) i = uv(1, 2) * uv(2, 3) - uv(2, 2) * uv(1, 3) j = uv(1, 3) * uv(2, 1) - uv(1, 1) * uv(2, 3) k = uv(1, 1) * uv(2, 2) - uv(2, 1) * uv(1, 2) pv = Array(i, j, k) End Function
Un exemple : Évaluer (1,2,1) X ( 5,6,8). 1. Jécris les composantes du premier vecteur dans A1:C1 et celles du deuxième dans A2:C2
A B C 1 2 1 5 6 8
2. Je sélectionne trois cellules adjacentes sur une même ligne et entre la fonction =pv(A1:C2)
3. Je valide par Ctrl+Maj+Entrée
Serge
"Antoine" a écrit dans le message de news:
Bonsoir Serge,
en fqit problème est que je n'arrive pas à faire une multiplication terme à terme de vecteurs sous VBA. Sous Excel on peut faire un truc du genre B1:B3*C1:C3 et on obtient le résultat escompté. Mais sous VBA??? Par exemple : V = (1,2,3,4) W=(2,3,4,5)
j'aimerais faire une fonction qui me renvoie X=(2,6,12,20) c'est a dire X_i = V_i * W_i ou "_i" désigne le ième élément du vecteur. Cela doit être possible en faisant une boucle sur tous les éléments des vecteurs, mais je pense qu'il doit exister un opérateur prédéfini dans VBA qui me renvoie ce résultat. Si, oui... euh lequel?
Antoine
"garnote" a écrit dans le message de news:kbmNa.16466$
Plus simple d'utilisation et valable pour pour tout système d'équations linéaires pour lequel on peut utiliser la méthode de la matrice inverse.
A B C D E F 4 3 5 1 4 4 1 2 5 5 2 2 3 2 22 1 2 3 4 5
Système : 4x + 3y + 5z + t = 4, 4x + y + 2z + 5t = 5, ...
Function sel(ici As Range) nl = ici.Rows.Count nc = ici.Columns.Count Set m1 = Range(ici.Cells(1, 1), ici.Cells(nl, nc - 1)) Set m2 = Range(ici.Cells(1, nc), ici.Cells(nl, nc)) mi = Application.WorksheetFunction.MInverse(m1) s = Application.WorksheetFunction.MMult(mi, m2) sel = s End Function
1. Je sélectionne F1:F4 , 2. J'entre la fonction =sel(A1:E4) , 3. Je valide la fonction par Ctrl+Maj+Entrée.
Serge
"garnote" a écrit dans le message de news: pvlNa.16461$
Bonsoir Antoine,
Pour résoudre des systèmes d'équations linéaires pour lesquels on peut utiliser une matrice inverse, tu pourrais essayer cette fonction :
Function sel(ici As Range, la As Range) mi = Application.WorksheetFunction.MInverse(ici) s = Application.WorksheetFunction.MMult(mi, la) sel = s End Function
Exemple : Résoudre le système suivant : 2x+3y=5, x+y=2
A B C D 2 3 5 1 1 2
1. Je sélectionne D1:D2 2. J'entre la fonction =sel(A1:B2;C1:C2) 3. Je valide la fonction par Ctrl+Maj+Entrée.
Qu'en penses-tu ?
Serge
"Antoine" a écrit dans le message de news:
Bonjour a tous,
je tiens d'abord a remercier tous ceux qui m'ont repondu pour mes precedentes questions. Peut-etre que celle ci est legerement hors-sujet alors pardonnez moi d'avance.
Sous excel, j'arrive a resoudre un systeme Ax=b, c'est assez simple ^^. De plus je pondere cette solution par les termes d'un autre vecteur colonne c. Donc j'obtiens x_i > > > > (Inv(A)*b)_i * c_i ou "_i" designe le i eme terme du vecteur. Maintenant j'aimerais automatiser tout cela au sein d'une macro VBA... et bien sur c'est la que tout plante.... J'ai ecris ceci en VBA :
Function LinEq(A, b, c)
LinEq = Application.WorksheetFunction.MMult (Application.WorksheetFunction.MInverse (Application.WorksheetFunction.Transpose(A)), b) * c
End Function
et tout se passe bien jusqu'a la multiplication terme a terme entre (Inverse A)*b d'un cote et c de l'autre.
Je suis sur qu'il existe une reponse passe partout , mais la je ne vois pas :(
Antoine
Salut Antoine,
Et tant qu'à être dans les vecteurs, voici une fonction
personnalisée permettant d'obtenir le produit
vectoriel de deux vecteurs.
Function pv(uv As Range)
i = uv(1, 2) * uv(2, 3) - uv(2, 2) * uv(1, 3)
j = uv(1, 3) * uv(2, 1) - uv(1, 1) * uv(2, 3)
k = uv(1, 1) * uv(2, 2) - uv(2, 1) * uv(1, 2)
pv = Array(i, j, k)
End Function
Un exemple : Évaluer (1,2,1) X ( 5,6,8).
1. Jécris les composantes du premier vecteur
dans A1:C1 et celles du deuxième dans
A2:C2
A B C
1 2 1
5 6 8
2. Je sélectionne trois cellules adjacentes
sur une même ligne et entre la fonction
=pv(A1:C2)
3. Je valide par Ctrl+Maj+Entrée
Serge
"Antoine" <antoine_guillon@hotmail.com> a écrit dans le message de news:
euBXBNsQDHA.2432@TK2MSFTNGP10.phx.gbl...
Bonsoir Serge,
en fqit problème est que je n'arrive pas à faire une multiplication
terme à terme de vecteurs sous VBA. Sous Excel on peut faire un truc du
genre B1:B3*C1:C3 et on obtient le résultat escompté. Mais sous VBA??? Par
exemple :
V = (1,2,3,4)
W=(2,3,4,5)
j'aimerais faire une fonction qui me renvoie
X=(2,6,12,20)
c'est a dire X_i = V_i * W_i ou "_i" désigne le ième élément du vecteur.
Cela doit être possible en faisant une boucle sur tous les éléments des
vecteurs, mais je pense qu'il doit exister un opérateur prédéfini dans VBA
qui me renvoie ce résultat. Si, oui... euh lequel?
Antoine
"garnote" <laogarno@globetrotter.net> a écrit dans le message de
news:kbmNa.16466$q42.2350@charlie.risq.qc.ca...
Plus simple d'utilisation et valable pour
pour tout système d'équations linéaires
pour lequel on peut utiliser la méthode de la
matrice inverse.
A B C D E F
4 3 5 1 4
4 1 2 5 5
2 2 3 2 22
1 2 3 4 5
Système : 4x + 3y + 5z + t = 4, 4x + y + 2z + 5t = 5, ...
Function sel(ici As Range)
nl = ici.Rows.Count
nc = ici.Columns.Count
Set m1 = Range(ici.Cells(1, 1), ici.Cells(nl, nc - 1))
Set m2 = Range(ici.Cells(1, nc), ici.Cells(nl, nc))
mi = Application.WorksheetFunction.MInverse(m1)
s = Application.WorksheetFunction.MMult(mi, m2)
sel = s
End Function
1. Je sélectionne F1:F4 ,
2. J'entre la fonction =sel(A1:E4) ,
3. Je valide la fonction par Ctrl+Maj+Entrée.
Serge
"garnote" <laogarno@globetrotter.net> a écrit dans le message de news:
pvlNa.16461$q42.12219@charlie.risq.qc.ca...
Bonsoir Antoine,
Pour résoudre des systèmes d'équations linéaires
pour lesquels on peut utiliser une matrice inverse, tu pourrais
essayer cette fonction :
Function sel(ici As Range, la As Range)
mi = Application.WorksheetFunction.MInverse(ici)
s = Application.WorksheetFunction.MMult(mi, la)
sel = s
End Function
Exemple : Résoudre le système suivant : 2x+3y=5, x+y=2
A B C D
2 3 5
1 1 2
1. Je sélectionne D1:D2
2. J'entre la fonction =sel(A1:B2;C1:C2)
3. Je valide la fonction par Ctrl+Maj+Entrée.
Qu'en penses-tu ?
Serge
"Antoine" <antoine_guillon@hotmail.com> a écrit dans le message de
news:
uqwwLSlQDHA.560@TK2MSFTNGP10.phx.gbl...
Bonjour a tous,
je tiens d'abord a remercier tous ceux qui m'ont repondu
pour mes precedentes questions. Peut-etre que celle ci est
legerement hors-sujet alors pardonnez moi d'avance.
Sous excel, j'arrive a resoudre un systeme Ax=b, c'est
assez simple ^^. De plus je pondere cette solution par les
termes d'un autre vecteur colonne c. Donc j'obtiens x_i > > > > (Inv(A)*b)_i * c_i ou "_i" designe le i eme terme du
vecteur. Maintenant j'aimerais automatiser tout cela au
sein d'une macro VBA... et bien sur c'est la que tout
plante....
J'ai ecris ceci en VBA :
Function LinEq(A, b, c)
LinEq = Application.WorksheetFunction.MMult
(Application.WorksheetFunction.MInverse
(Application.WorksheetFunction.Transpose(A)), b) * c
End Function
et tout se passe bien jusqu'a la multiplication terme a
terme entre (Inverse A)*b d'un cote et c de l'autre.
Je suis sur qu'il existe une reponse passe partout , mais
la je ne vois pas :(
Et tant qu'à être dans les vecteurs, voici une fonction personnalisée permettant d'obtenir le produit vectoriel de deux vecteurs.
Function pv(uv As Range) i = uv(1, 2) * uv(2, 3) - uv(2, 2) * uv(1, 3) j = uv(1, 3) * uv(2, 1) - uv(1, 1) * uv(2, 3) k = uv(1, 1) * uv(2, 2) - uv(2, 1) * uv(1, 2) pv = Array(i, j, k) End Function
Un exemple : Évaluer (1,2,1) X ( 5,6,8). 1. Jécris les composantes du premier vecteur dans A1:C1 et celles du deuxième dans A2:C2
A B C 1 2 1 5 6 8
2. Je sélectionne trois cellules adjacentes sur une même ligne et entre la fonction =pv(A1:C2)
3. Je valide par Ctrl+Maj+Entrée
Serge
"Antoine" a écrit dans le message de news:
Bonsoir Serge,
en fqit problème est que je n'arrive pas à faire une multiplication terme à terme de vecteurs sous VBA. Sous Excel on peut faire un truc du genre B1:B3*C1:C3 et on obtient le résultat escompté. Mais sous VBA??? Par exemple : V = (1,2,3,4) W=(2,3,4,5)
j'aimerais faire une fonction qui me renvoie X=(2,6,12,20) c'est a dire X_i = V_i * W_i ou "_i" désigne le ième élément du vecteur. Cela doit être possible en faisant une boucle sur tous les éléments des vecteurs, mais je pense qu'il doit exister un opérateur prédéfini dans VBA qui me renvoie ce résultat. Si, oui... euh lequel?
Antoine
"garnote" a écrit dans le message de news:kbmNa.16466$
Plus simple d'utilisation et valable pour pour tout système d'équations linéaires pour lequel on peut utiliser la méthode de la matrice inverse.
A B C D E F 4 3 5 1 4 4 1 2 5 5 2 2 3 2 22 1 2 3 4 5
Système : 4x + 3y + 5z + t = 4, 4x + y + 2z + 5t = 5, ...
Function sel(ici As Range) nl = ici.Rows.Count nc = ici.Columns.Count Set m1 = Range(ici.Cells(1, 1), ici.Cells(nl, nc - 1)) Set m2 = Range(ici.Cells(1, nc), ici.Cells(nl, nc)) mi = Application.WorksheetFunction.MInverse(m1) s = Application.WorksheetFunction.MMult(mi, m2) sel = s End Function
1. Je sélectionne F1:F4 , 2. J'entre la fonction =sel(A1:E4) , 3. Je valide la fonction par Ctrl+Maj+Entrée.
Serge
"garnote" a écrit dans le message de news: pvlNa.16461$
Bonsoir Antoine,
Pour résoudre des systèmes d'équations linéaires pour lesquels on peut utiliser une matrice inverse, tu pourrais essayer cette fonction :
Function sel(ici As Range, la As Range) mi = Application.WorksheetFunction.MInverse(ici) s = Application.WorksheetFunction.MMult(mi, la) sel = s End Function
Exemple : Résoudre le système suivant : 2x+3y=5, x+y=2
A B C D 2 3 5 1 1 2
1. Je sélectionne D1:D2 2. J'entre la fonction =sel(A1:B2;C1:C2) 3. Je valide la fonction par Ctrl+Maj+Entrée.
Qu'en penses-tu ?
Serge
"Antoine" a écrit dans le message de news:
Bonjour a tous,
je tiens d'abord a remercier tous ceux qui m'ont repondu pour mes precedentes questions. Peut-etre que celle ci est legerement hors-sujet alors pardonnez moi d'avance.
Sous excel, j'arrive a resoudre un systeme Ax=b, c'est assez simple ^^. De plus je pondere cette solution par les termes d'un autre vecteur colonne c. Donc j'obtiens x_i > > > > (Inv(A)*b)_i * c_i ou "_i" designe le i eme terme du vecteur. Maintenant j'aimerais automatiser tout cela au sein d'une macro VBA... et bien sur c'est la que tout plante.... J'ai ecris ceci en VBA :
Function LinEq(A, b, c)
LinEq = Application.WorksheetFunction.MMult (Application.WorksheetFunction.MInverse (Application.WorksheetFunction.Transpose(A)), b) * c
End Function
et tout se passe bien jusqu'a la multiplication terme a terme entre (Inverse A)*b d'un cote et c de l'autre.
Je suis sur qu'il existe une reponse passe partout , mais la je ne vois pas :(