Bonjour, dans le cadre de mon projet, je dois déterminer la position du soleil via un capteur en demi-sphère sur lequel se trouve 22 photodiodes.
j'ai une première lignes neufs de photodiodes espacés de 40° a 30° a partir de la base de la demi-sphère, une deuxième identique a 50° une troisième ligne de 3 photodiodes a 70° puis la photodiode du sommet a 90° (voir le fichier).
je reçois les 22 tension de mes photodiodes, j'ai fait un premier programme qui récupère ces tensions et qui me donne une position vraiment peu précise ( calcul de proportion vraiment simple) .
je voudrai savoir si un outil mathématique efficace existerait pour que je puisse avoir une position précise (interpolation de Lagrange,.... je ne sait pas et je trouve rien)
Tu tries les tensions et tu gardes les trois plus fortes : l'angle cherché est à l'intérieur du triangle formé par ces capteurs.
C'est à partir de ces trois tensions que tu vas trianguler.
Pour cela tu appliques le modèle physique approprié (quelque chose du genre tension proportionnelle au flux, donc proportionnelle au cosinus de l'angle incident).
Tu obtiens 3 équations associant 2 inconnues angulaires (quand on connait deux angles, on peut déduire le troisième) et une inconnue d'intensité globale (tu ne sais pas quelle est l'intensité maximale lorsque le rayonnement est à angle droit).
Tu résous.
Si tu es consciencieux tu vérifies une fois l'angle trouvé, si les tensions des autres capteurs sont cohérentes avec la solution.
Logiquement, la répartition des capteurs fait que les 3 mieux placés ne sont pas très inclinés par rapport à l'angle solaire cherché.
Du coup, il y a probablement possibilité d'appliquer un DL sur les cosinus pour simplifier la résolution si besoin.
Il y a pas mal de calculs, alors bon courage ...
est le centre de la sphère portant les diodes.
est son rayon.
Les points portant les diodes sont notés de coordonnées connues.
On cherche le point de coordonnées correspondant à l'énergie lumineuse maximale reçue, donc indiquant la position solaire.
Le modèle physique est logiquement celui-ci :
: tension sur la diode
: angle entre et
: est la tension maximale théorique (inconnue), qui serait reçue si une diode était placée au point .
Pour toute diode : ::
Donc pour tout couple de diodes en divisant et en simplifiant :
En introduisant des termes d'erreur on prend en compte l'imperfection des mesures faites par les capteurs.
De ce fait, le problème revient à rechercher M(x, y , z) qui minimise la somme quadratique des erreurs, ce qui revient à une régression linéaire dont les coefficients sont (x, y, z).
Il semble préférable de ne pas introduire tous les points diodes.
Ceux qui sont les mieux orientés sont probablement plus pertinents.
On pourra par exemple trier les tensions et ne garder que les meilleures.
En testant le dispositif et le modèle on doit pouvoir vérifier qu'on trouve une erreur quadratique faible, et qu'on arrive à bien positionner le soleil.
On pourra ainsi repérer le nombre de diodes à garder dans le calcul de régression.
En principe on doit également vérifier que
Bonjour,
D'accord avec LeDino sur le principe, mais pourquoi se limiter à 3 diodes, si on reçoit 22 tensions, il me parait important de tenir compte de toutes, naturellement, chacune avec un poids correspondant (probablement) à l'angle d'incidence.
Bonjour Dlzlogic,
Tu soulèves une bonne question sur le nombre de diodes à conserver pour le calcul. J'y ai en partie répondu : d'abord je ne l'ai pas limité à trois si tu lis attentivement ma deuxième intervention (je parle clairement de garder les meilleures), et ensuite c'est à mon sens l'expérimentation qui pourra fournir la réponse sur le nombre de diodes le plus adapté.
Je pressens que les diodes les mieux orientées (c'est-à dire "dans l'axe", donc avec les intensités les plus fortes) sont celles dont l'exploitation des mesures est la plus pertinente pour diverses raisons techniques, à commencer par le fait que les flux plus "latéraux" capteront des intensités moindres et peut-être plus susceptibles d'être influencés par diverses "pollutions" (réflexions et réfractions diverses, notamment).
Mais quoi qu'il en soit, l'expérimentation permettra de trancher.
Bonjour LeDino,
Oui, j'ai lu ensuite que on pouvait prendre plus de 3 cellules.
Ce que je voulais dire est que sauf si une valeur est aberrante, il n'y a pas de raison de ne pas la prendre en compte.
Naturellement, il sera peut-être nécessaire de pondérer les 22 mesures de tension. Mais comme ni la méthode, ni le calcul ne sont précisés, on ne peut actuellement rien dire de plus. Imagine pas exemple que les cellules soient sous la forme d'une petite sphère, alors l'angle d'incidence est sans importance.
Ce genre de calcul de mesure de position su soleil se fait actuellement, à ma connaissance, avec des appareils ultra-précis et les angles sont lus avec une précision de 1/10000 de grade.
Qui peut le plus peut le moins...
... mais parfois le mieux est l'ennemi du bien .
Prendre plus de diode apporte probablement de la "stabilité" (notamment en cas de défaillance ou de salissure d'un capteur...).
En prendre trop peut introduire de la variance inutile.
Quoi qu'il en soit : l'expérimentation est le meilleur juge.
Bonjour,
Je n'ai pas l'intention d'intervenir sur Les calculs fournis par LeDino qui a surement plus réfléchi que moi sur le Pb.
Je pose simplement la question mathématique sans faire intervenir l'aspect physique avec toutes les incertitudes propres à toute expérimentation
L'impact d'un rayon sur la diode est lié à l'angle d'incidence.
En supposant des étalonnages précis de cet impact,lié sans doute à l'intensité du rayon ne peut-on pas considérer que pour une diode di particulière L'impact nous donne un cône d'axe ODi et d'angle
Si l'on dispose de 3 diodes non alignées,(par exemple d'impact maximum) on doit donc déterminer l'intersection de 3 cônes, ce qui doit dans l'absolu nous fournir un axe unique.
L'intersection de deux cônes donne 2 axes et le troisième cône permet de choisir l'un des deux.
En choisissant les 3 diodes qui reçoivent le plus d'impact, ne peut-on pas dire que 3 diodes suffisent.
Il m'a semblé LeDino que tu revenais sur l'idée que 3 suffisaient , Qu'en penses-tu ?
Bonjour a tous,
Merci pour votre participation, j'apprécie que vous ayez pris du temps pour me répondre.
Je vais commencer à analyser les données que vous m'avez communiquer et essayer d'arriver à bout de ce projet
Merci et vive les maths !!!!
Remib34.
LeDino!!
jai la position de mes diodes dans l'espace de ma demi-shpere!! mon niveau de mathematitien bloque , je ne comprend pas comment resoudre et trouver mon point max ;/
Bonjour Remi,
Tu as 22 diodes, avec 22 tensions.
Tu commences par trier tes diodes par tensions décroissantes.
Tu ne retiens que les plus fortes tensions.
C'est l'expérimentation qui t'indiquera ensuite quel est le meilleur à retenir pour une meilleure fiabilité et précision du processus.
La justification de ne pas retenir l'intégralité des 22 diodes vient de ce que les tensions trop faibles sont probablement moins significatives, et SURTOUT elles peuvent correspondre à des cas où le modèle physique retenu (énergie lumineuse proportionnelle au cosinus...) est mis en défaut pour des raisons d'optique (par exemple, diodes "dans l'ombre de la sphère...).
Pour chaque couple i,j de diodes prises parmi les N retenues, on a la propriété :
Chaque couple de diodes fournit donc une équation .
En théorie, les devraient être nuls.
En pratique ils ne le seront pas en raison des diverses imperfections du procédé.
Ton but sera donc de rechercher les coefficients (x,y,z) qui minimisent la somme quadratique des erreurs.
Le triplet de points (x,y,z) ainsi trouvé correspond au point théorique de tension maximale.
Tu considères la matrice [A] comprenant P lignes et 3 colonnes.
Chaque ligne est indicée par p = 1 à P, qui correspond à un couple (i,j) de diodes.
Chaque colonne est indicée par k = 1 à 3, qui correspond aux coordonnées spatiales.
Ligne p=(i,j) de la matrice A :
Allure de la matrice :
...
...
...
Et le problème devient :
Trouver X = (x,y,z) tel que : A.X = E est de norme minimale.
Sinon, si c'est trop compliqué à réaliser pour toi, il y a une variante assez proche :
On a ordonné les diodes par tensions U décroissantes.
U1 est donc la tension la plus forte trouvée.
UN est la tension la plus faible retenue.
Considérer le triplet des 3 meilleurs couples de diodes.
Résoudre le système de 3 équations ().
Recommencer avec d'autres triplets.
Calculer le point moyen des différentes solutions trouvées.
Calculer la dispersion pour en déduire la précision...
NB : Résoudre A.X = Epsilon
Revient à faire une régression linéaire multiple dont le terme constant B est nul : A.X + B = Epsilon, minimiser la norme de Epsilon...
je crois que je comprend, les math m'impressionneront tout le temps, quel outil puissant quand on le maîtrise
je choisis 4 diodes, j'aurais donc 1 matrice (assez conséquente) a résoudre, cela me donnera 1 position (x,y,z)
X=E/A^ (Matlab mon ami le fera très bien^^) cependant E est de norme minimale signifie qu'il est nul? ou que c egal a E=(1;1;1)
Quoique tu trouves, n'hésite pas à en parler ici :
Comme l'a dit DLZLOGIC ton sujet est extrêmement intéressant.
Et tout retour d'expérience sur ce genre de sujet est susceptible d'enseigner quelque chose d'important.
Si tu as un jeu de données et que tu galères, tu peux également tenter de le poster ici.
Tu recevras peut-être de l'aide. Par exemple quelqu'un pourrait refaire les calculs de son côté pour recouper les tiens...
A =
-5.7871 5.3911 -0.1750
0.4040 0.9754 -4.1691
-3.9378 4.8646 -4.3691
5.2707 -3.5974 -3.9010
0.8632 0.3575 -4.1010
-3.6467 3.3108 -0.3064
les valeurs de la matrice A sont calculés a partir de tension rentrées manuellement pour pouvoir vérifier le résultats. par rapport a mon origine, l'angle devrait être compris entre 30 et 60° et l'azimut entre 30 et 50°
A.^-1=
-0.1728 0.1855 -5.7143
2.4752 1.0253 -0.2399
-0.2539 0.2056 -0.2289
0.1897 -0.2780 -0.2563
1.1585 2.7969 -0.2438
-0.2742 0.3020 -3.2635
A.^-1 est la matrice inverse
X=
x
y
z
X est le vecteur qui devrait me donner ma position dans l'espace que je devrait ensuite transformer en angle sur ma sphère
d'après ce que j'ai compris mon vecteur E doit être le plus petit possible,cependant j'ai un réel problème sur sa dimension
E=
0
0
.
.
.
.
.
ou
E= 0 . . . . . . . . . .
en faisant X=A.^-1*E je me retrouve avec des conflit de dimension j'ai beau retourner ça dans tout les sens, je m'embrouille^^
bon je sais que mon E ne sera pas que des 0 , c'était pour l'exemple je vais voir ce que cete regression linéaire peut m'apporter
Bonjour Rémi,
Je pense que ce dont parlait LeDino, à propos de "jeu de données", c'était la tension mesurée à chaque diode, avec leur position sur la sphère, par exemple avec une vue de dessus.
Il faut surtout donner le rayon R de la sphère.
Je n'ai pas le temps de regarder aujourd'hui, mais je rappelle que X,Y,Z est sur la sphère.
Donc X² + Y² + Z² = R²
Sinon, une solution triviale de A.U = E ~0 serait U=(0,0,0)
Une solution "simpliste" mais facile à mettre en œuvre et à comprendre dans un premier temps :
Faire varier X et Y entre -R et +R avec des pas dX et dY petits, dans une feuille EXCEL par exemple.
Calculer l'Erreur pour chaque couple X,Y (Z étant pris égal à racine de R²-X²-Y²).
Garder le triplet X,Y,Z ayant une Erreur minimale.
L'erreur serait ici la somme des carrés des epsilon (la matrice A appliquée à U(X,Y,Z) donne un vecteur Epsilon dont on calcule la norme a carré... qu'on veut minimiser).
Ce n'est pas une régression comme je l'avais indiqué, mais pour commencer c'est une piste facile à tester.
bonjour,
je suis arriver a un point ou je me perd dans ma réflexion,
vous voulez que je fasse varié mon X et mon Y, cependant pour que la relation X² + Y² + Z² = R² fonctionne il faut faire varié X et Y de façon intelligente (et c'est la que je beugue)
si mon X varie de 5 a -5 avec un pas de 0,1: 5, 4.9, .....-5
mon Y va varier de 5 a -5 d'un pas différent que 0.1 et de manière décalé par rapport a X
de plus la variation en Z impose une variation en X et Y
je m'embrouille.....
pour 1 tours
X Y Z
5 0
.
.
0 5
.
.
-5 0
.
.
0 -5
.
.
5 0
je sais que mon probleme est que je resonne que sur un plan et non pas dans l'espace, j'ai du mal a visualiser tout ça breff!!
en ce qui concerne les matrices, j'ai compris le principe mais j'ai du mal a trouver le bon résultat.
sous matlab mes variable sont de la sorte: (il y a finalement 2 rangées (30° et 50°) de 8 diodes espacées de 45 degrés) (une troisième composé de 4 diode espacées de 90° a 70°d'angle) et le diode du sommet.
tensionPhotodiodeL1 =[2.42 ,2.35 ,0 ,0 ,0 ,0 ,0 ,1.11]; // tension imposées pour la rangée 1
azimutPhotodiodeL1 =[22.5 67.5 112.5 157.5 202.5 247.5 292.5 337.5 ];
anglePhotodiodeL1 =[30 30 30 30 30 30 30 30];
coordx1=zeros(8,1);
coordy1=zeros(8,1);
coordz1=zeros(8,1);
tensionPhotodiodeL2 =[2.04 ,1.96 ,0 ,0 ,0 ,0 ,0 ,1.31]; // tension imposées pour la rangée2
azimutPhotodiodeL2 =[22.5 67.5 112.5 157.5 202.5 247.5 292.5 337.5 ];
anglePhotodiodeL2 =[50 ,50 ,50 ,50 ,50 ,50 ,50 ,50 ,50];
coordx2=zeros(8,1);
coordy2=zeros(8,1);
coordz2=zeros(8,1);
tensionPhotodiodeL3 =[1.78 ,0 ,1.4 ,0]; // tension imposées pour la rangée
azimutPhotodiodeL3 =[45 135 225 315];
anglePhotodiodeL3 =[70 70 70 70];
coordx3=zeros(4,1);
coordy3=zeros(4,1);
coordz3=zeros(4,1);
tensionPhotodiodeL4 =1.08; // tension de la diode du sommet
azimutPhotodiodeL4 =0;
anglePhotodiodeL4 =90;
coordx4=0;
coordy4=0;
coordz4=0;
j'ai trouver sans trop de difficulté mes position de diodes en (x,y,et z ) que j'ai ranger dans les tableaux coordxN coordyN coordzN
ensuite je trouve egalement mes quatres tension les plus fortes avec leurs angle et azimut , leurs cordonées et toutes les information dont j'ai besoin pour pouvoir faire ce calcul du maximas solaire, que je range dans des variables:
indice4Tensions=zeros(4,1);
mem4Tensions=zeros(4,1);
mem4X=zeros(4,1);
mem4Y=zeros(4,1);
mem4Z=zeros(4,1);.....
grâce a ces tableau, remplir ma matrice A est juste une formalité.
%% MATRICE
%x
A(1,1)=(mem4Tensions(2)*mem4X(1))-(mem4Tensions(1)*mem4X(2));
A(2,1)=(mem4Tensions(3)*mem4X(1))-(mem4Tensions(1)*mem4X(3));
A(3,1)=(mem4Tensions(4)*mem4X(1))-(mem4Tensions(1)*mem4X(4));
A(4,1)=(mem4Tensions(3)*mem4X(2))-(mem4Tensions(2)*mem4X(3));
A(5,1)=(mem4Tensions(4)*mem4X(2))-(mem4Tensions(2)*mem4X(4));
A(6,1)=(mem4Tensions(4)*mem4X(3))-(mem4Tensions(3)*mem4X(4));
%y
A(1,2)=(mem4Tensions(2)*mem4Y(1))-(mem4Tensions(1)*mem4Y(2));
A(2,2)=(mem4Tensions(3)*mem4Y(1))-(mem4Tensions(1)*mem4Y(3));
A(3,2)=(mem4Tensions(4)*mem4Y(1))-(mem4Tensions(1)*mem4Y(4));
A(4,2)=(mem4Tensions(3)*mem4Y(2))-(mem4Tensions(2)*mem4Y(3));
A(5,2)=(mem4Tensions(4)*mem4Y(2))-(mem4Tensions(2)*mem4Y(4));
A(6,2)=(mem4Tensions(4)*mem4Y(3))-(mem4Tensions(3)*mem4Y(4));
%z
A(1,3)=(mem4Tensions(2)*mem4Z(1))-(mem4Tensions(1)*mem4Z(2));
A(2,3)=(mem4Tensions(3)*mem4Z(1))-(mem4Tensions(1)*mem4Z(3));
A(3,3)=(mem4Tensions(4)*mem4Z(1))-(mem4Tensions(1)*mem4Z(4));
A(4,3)=(mem4Tensions(3)*mem4Z(2))-(mem4Tensions(2)*mem4Z(3));
A(5,3)=(mem4Tensions(4)*mem4Z(2))-(mem4Tensions(2)*mem4Z(4));
A(6,3)=(mem4Tensions(4)*mem4Z(3))-(mem4Tensions(3)*mem4Z(4));
pour obtenir la matrice A
A =
-5.7871 5.3911 -0.1750
0.4040 0.9754 -4.1691
-3.9378 4.8646 -4.3691
5.2707 -3.5974 -3.9010
0.8632 0.3575 -4.1010
-3.6467 3.3108 -0.3064
et le flou artistique commence!! je vous enverrez bien mon fichier .m mais je sais pas si c possible, je sais que j'en suis pas loin mais pourtant quelque chose bloque ma totale compréhension . ^^
Bonjour Remib34,
Je suis vraiment désolé d'être aussi absent ces jours-ci et de ne pouvoir mieux t'aider. J'aurai peut-être plus de temps ce week-end, en tout cas je l'espère...
En principe, lorsqu'on a mis un tel problème sous forme matricielle, le plus dur est fait mathématiquement... Mais c'est vrai que la résolution pratique peut soulever des difficultés, surtout si on n'est pas habitué.
Sous la forme que j'ai donnée, il faut rechercher le point M(X,Y,Z) tel que :
|E|² soit minimale, avec A.U = E
... A étant définie par les formules données plus haut.
Ce n'est pas une simple régression linéaire comme je l'ai dit plus haut, mais un problème d'optimisation sous contrainte (le point M est sur la sphère de rayon R). Lorsqu'on est habitué, on utilise un solveur pour résoudre ce genre de problème. On désigne les paramètres qui peuvent varier (X et Y par exemple) et on donne l'expression de E² qui dépend de X et Y (qui dépend aussi de A mais qui est constante et de Z qui dépend lui-même de X et Y). Du coup l'expression de E² est un peu complexe. La facilité de résolution dépendra des outils que tu utilises et de ton expérience.
Une fois trouvée la méthode de résolution, il se peut qu'il y ait d'autres obstacles :
1. Le choix des couples de diodes qui constituent les lignes de la matrice A est probablement important. Il est possible que de garder par exemple le couple 2-3 dans les lignes de la matrice A soit redondant en information avec les couples 1-2 et 1-3. Ce n'est pas forcément bloquant, mais c'est à vérifier.
2. Comme l'a fait remarquer Dlzlogic, les cosinus sont très proches de 1 à l'ordre 2, lorsque les diodes sont au voisinage du point max. De ce fait, les diodes à tension maximale sont un peu comme "saturées" de lumière... Pour peu qu'il y ait de l'incertitude de mesure, les tensions proches du maximum ne sont peut-être pas les plus intéressantes en définitives pour calculer la position max, ce qui est un peu paradoxal... Les diodes de tension max indiquent approximativement la région où se situe la position max, région dans laquelle il faut chercher... Mais pour le calcul de la position, il est peut-être souhaitable d'inclure pas mal de points plus éloignés de la position max.
3. La fonction à minimiser peut admettre des minimums locaux. Ce qui peut ajouter une difficulté supplémentaire.
---
En résumé : si tu veux résoudre le problème sous forme de minimum sous contrainte, il faut que tu disposes des outils appropriés (de type SOLVEUR) et que tu saches les utiliser.
A défaut, le plan B est de résoudre les équations deux par deux : auquel cas tu devrais trouver une paire de points M pour chaque couple de diodes correspondant aux intersections des cônes d'égalité des cosinus avec la sphère... En principe en observant ces différents points M, tu dois constater une concentration qui indique la localisation du M* optimal.
Pour les données du problème, elles ne sont pas indispensables :
On peut constituer un jeu d'essai facilement.
Sur tableur par exemple ça se fait sans problème.
On se donne R (=1) et Umax (=100).
On calcule les coordonnées des diodes (c'est facile avec les angles que tu as donnés).
Puis on se donne une position M* arbitraire et on calcule les tensions (Umax multiplié par le cosinus, plus un bruit paramétrable, normal par exemple), puis la matrice A.
Reste à décrire E² en fonction de ces éléments puis à appliquer le SOLVEUR pour retrouver la position de M*.
Bonjour LeDino,
Une réponse très courte.
A mon avis, ce calcul est une utilisation très intéressante de la méthode des moindres carrés. Le principe de base est assez simple : on écrit que le somme des carrés des écarts à une "valeur moyenne" est minimum.
On calcule les dérivées partielles et on les annule.
Il reste dont un système de N équations à N inconnues. En l'occurrence, il n'y en a que 2, la hauteur zénithale et l'azimut.
Je ne comprends pourquoi tu parles de coordonnées cartésiennes, et pourquoi tu as besoin du rayon.
Cordialement.
je vais analyser tout ce que vous m'avez dit ca va me prendre un certain temps
j'ai oublié de préciser que j'utilisais Matlab pour concevoir un code qui me permettrai de trouver le max solaire pour le moment,
il faudra ensuite que j'adapte ce code sur une carte electronique avec pic, mux ...
matlab me permet de mieux comprendre ce que je fais , et est plus pratique pour une premiere approche.
es que ce que vous me proposez n'est pas trop compliqué pour un petit pic tout gentil? ^^ je vous parle de ça pour ça !
Bonsoir Remib34,
J'ai jeté un coup d'œil à ton problème sur des données simulées.
En définitive, les craintes que je pouvais avoir sur la colinéarité ou d'éventuelles "instabilités" ne semblent pas fondées : la méthode fonctionne et on trouve très bien l'optimum sur plusieurs cas que j'ai testés, y compris en augmentant la variance sur les mesures de tension.
Si tu n'as pas accès à un SOLVEUR ou que tu ne sais pas l'utiliser, ou que tu n'en disposeras pas pour ta solution "embarquée", il est possible d'écrire un algorithme relativement simple, de type "steepest descent", ou si tu préfères "méthode du gradient" ou encore "ligne de plus grande pente".
En voici une variante "naïve" très simple qui devrait bien fonctionner :
Tu pars de la solution de base, qui est donnée par la diode de tension la plus élevées parmi celles disponibles.
Cette solution de base permet d'initialiser le "point courant" M de l'algorithme.
Tu prends un "pas" h=0.1 par exemple.
Tu calcules 4 points voisins autour de M.
Ces points voisins sont situés à + ou - h selon x ou selon y :
M(x,y) --> (x+h,y) (x-h,y) (x,y+h) (x,y-h)
Tu calcules l'erreur E = racine(E²) pour chaque point voisin.
Tu retiens M' le point voisin qui a le meilleur E (le plus faible, donc).
Si E a diminué, la vie est belle et tu itères en adoptant ce point M' comme nouveau point courant M, et en gardant le même pas h.
Sinon, tu conserves le point M et tu diminues le pas h, par exemple en le divisant par 2...
... il y aura forcément un moment ou le pas sera assez petit pour qu'un point voisin diminue l'erreur E.
Et sinon, c'est que tu as trouvé un minimum !
NB: En principe, il peut s'agir d'un "minimum local", donc méfiance...
Mais en pratique, vu la configuration du problème, je pense que la "surface" le long de laquelle tu vas te déplacer est régulière (je parle de E = F(X,Y), que tu explores pas à pas), et que le dispositif de diodes semble assez "robuste" pour toujours te fournir un M de départ plutôt bien positionné...
Donc à mon avis ça va très bien converger...
Faire des essais pour t'en assurer.
NB : ne pas prendre les diodes qui ont une tension trop faible (voire négative, cela est possible pour les diodes "masquées")...
Mais de toutes façons en gardant les diodes ayant les tensions les plus fortes, ça règle cette question.
Bon courage !
Bonsoir LeDino,
Bon, d'abord, cette technique de la méthode des moindres carrés, je la pratique depuis très très longtemps. Si j'ai fait des raccourcis qui empêchent la compréhension, c'est une erreur de ma part.
Bien-sûr, je suis prêt à faire des essais, c'est la raison pour laquelle j'aurais bien aimé avoir les données. Il faut en plus une information fondamentale : la fonction qui donne l'angle d'incidence en fonction de la tension.
Bien-sûr, on peut toujours simuler une demi-sphère, calculer exactement l'angle théorique pour chaque diode, arrondir les résultats pour simuler une observation réelle, et faire le calcul. Mais, vois-tu, pour faire cela il faut une certaine motivation plutôt qu'une contradiction systématique.
@Remib34:
Je confirme après l'avoir testé sur Excel, que l'algorithme simplifié que j'ai donné le 31-10-14 à 18:40 fonctionne très bien.
Il est ultra simple à programmer une fois qu'on sait calculer E pour un M(X,Y) donné (ce qui est possible quand on a la matrice A).
Il converge en quelques dizaines d'itérations sur tous les cas que j'ai testés.
L'écart dM* de position entre le M* simulé et le M* calculé est très faible. Il est quasi nul si sigmaU* est quasi nul, preuve que l'algorithme converge vers la bonne valeur.
Et dM*/R est à peu près homogène avec dU/U.
Donc l'erreur finale est cohérente avec l'erreur de mesure des tensions.
Autre hypothèse que j'ai pu vérifier et qui semble respecter la logique : lorsqu'on augmente le nombre de diodes, on améliore la précision.
Je n'ai pas testé toutes les variantes, mais je suis passé de 3 diodes à 8 et la précision relative dM*/R s'améliore significativement.
En toute logique, il semble que se baser sur un plus grand nombre de mesures revient à "diluer" l'erreur.
Si cela n'alourdit pas trop la programmation (en principe ça ne devrait pas...), je préconise donc de garder le plus grand nombre de diodes ne présentant pas une incidence trop faible, donc toutes celles ayant une valeur de tension égale à une certaine fraction de la top tension. U au moins égal à 50% de la top tension semble raisonnable.
Bonjour LeDino
Je te recommande une lecture attentive de ce document.
http://fr.scribd.com/doc/14819165/Regressions-coniques-quadriques-circulaire-spherique
Bonsoir Dlzlogic,
J'ai survolé l'article que tu cites.
Il se trouve que je l'ai déjà consulté par le passé alors qu'un ilien s'intéressait à l'ajustement d'un nuage de points par un cercle.
Pour ce qui est du problème posé par Remib34, la surface qu'il faut ajuster n'est pas la sphère où se situent les diodes, mais la surface formée par la fonction d'erreur E(X,Y) lorsque le point M(X,Y) cherché parcourt la sphère. Je ne vois donc pas trop ce que l'article que tu cites apporte de nouveau dans ce contexte.
Quoi qu'il en soit, pour ma part le problème est résolu.
Il l'est sous forme mathématique.
Et il l'est au plan de l'algorithme de calcul, y compris avec la contrainte d'un code source embarqué qui doit être relativement "léger" si j'ai bien compris le contexte d'utilisation posé par Remib34.
L'algorithme simplifié que j'ai proposé fonctionne très bien, notamment parce qu'en cas d'erreurs faibles, la surface est probablement très régulière, voire carrément convexe, et parce qu'il y a toujours une diode assez bien placée pour constituer un excellent point de départ de la recherche pas à pas. D'où l'absence de minimum local qui aurait pu constituer un obstacle.
Maintenant si tu trouves une solution plus efficace tu es le bienvenu pour la présenter .
En attendant, pour moi le sujet est réglé (sauf questions de Remib34)...
Bonsoir LeDino,
J'ai cité ce document dans le seul but de montrer que ce type de problème avec des valeurs en surnombre se résolvait généralement, voire toujours, par des solutions rigoureuses.
Si tu veux que je t'explique la solution que j'ai calculée, tu peux me contacter directement via mon site. Si tu as un peu suivi les derniers échanges tu comprendras que je ne tiens pas à m'appesantir sur le sujet.
Avant tout, merci pour votre aide, je vois que vous prenez sur votre temps pour m'aider et ça me va droit au coeur.
vous aurez compris que dans ma relation A.X=E (ayant ma matrice A [6,3] et mon X(x;y;z)) je n'arive pas a comprendre comment serai E.
si pour résoudre cela j'ai besoin d'un solveur je serai embêté car j'utilise matlab et apres j'implementerai mon code sous arduino. ( systeme qui a ses limites.
Ledino , ta variante que tu propose a la place ne me fait pas utiliser cette matrice A? c'est une autre solution? c'est ça. je vais essayer de mieux comprendre
j'aurai bien aimer poursuivre avec la resolution matricielle mais es qu'il serai possible de mieux m'expliquer ce vecteur E j'ai l'impression de tourner en rond dans ma tete^^
Comprenez que pour comprendre et analyser tout ce que vous dites il va me falloir du temps ^^
tu pourrais me donner un bref récapitulatif post matrice A si ça te dérange pas ? la methode de resolution 2 par 2 semble me convenir sauf que vu que je ne sais pas a quoi les equation sont egale (vecteur E) je suis egalement bloqué!
je suis dessolé d'être aussi moyen en math mais je fait de mon maximum^^
pour ta deuxieme solution , je prend ma diode pax et je fait varier d'un pas h mes coordonnées?
donc dans l'equation
(E_i_j) : (U_j.x_i - U_i.x_j).x + (U_j.y_i - U_i.y_j).y + (U_j.z_i - U_i.z_j).z = e_i_j
je calcule mon E pour la position de ma diode max,
je fait varié les position jusqu'à trouver un E min,
(es que je garde les meme tension en fesant varié ma position?)
tres simple a réaliser ,(juste une boucle) je pense donc que j'ai mal compris^^
Donc
je fait ma matrice A avec mes 4 tension les plus grande, et je commence a faire le calcul avec les coordonées de le diode la plus forte ok!
A =
-5.7871 5.3911 -0.1750
0.4040 0.9754 -4.1691
-3.9378 4.8646 -4.3691
5.2707 -3.5974 -3.9010
0.8632 0.3575 -4.1010
-3.6467 3.3108 -0.3064
*
X =
1.6571 // coordonées de ma diode MAX
4.0005
2.5000
=
E =
11.5398
-5.8514
2.0126
-15.4099
-7.3919
6.4357
alors première zone d'ombre, il faut que toutes les lignes du vecteur E soient petites pour pouvoir dire que je suis en position max ou il faut que je me concentre sur un terme en particulier? c'est peut être a ce moment la que je doit l'élever au carré mais j'aurai toujours 6 termes.
ahh en fait je fait varié x et y et mon z je dit que c'est égal a racine de (R²-x²-y²) enfin je crois ^^
Le principe de la marche pas à pas selon X ou Y améliorant l'erreur à chaque itération :
En pratique, vue la disposition des diodes, M0 (meilleure tension) ne peut pas être très éloigné de M* (optimum théorique).
Le pas de marche h, s'adapte en se réduisant au fur et à mesure, de façon à permettre une amélioration de l'erreur.
Lorsque le pas devient très faible, c'est qu'on est tout proche de l'optimum.
Une remarque en passant :
Lorsqu'on calcule les 4 déplacements suite à un pas + ou - h dans le sens X ou Y, il faut s'assurer qu'on ne sort pas du disque : X²+Y² < R²
Si c'est le cas, il ne faut pas retenir ce déplacement (il suffit d'un simple test pour l'écarter).
Et alors soit l'algorithme trouvera une autre direction qui améliore l'erreur, soit il diminuera h, ce qui permettra tôt ou tard de trouver une meilleure position... sans sortir du disque.
A signaler qu'en adaptant l'algorithme en faisant varier phi et thêta au lieu de X et Y (facile à faire), on éviterait ce petit inconvénient.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :