Régression parabolique non triviale

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

Re: régression parabolique non triviale

par leon1789 » 20 Juin 2023, 19:04

je réfléchis à une autre méthode bien plus simple par analyse de la composante principale. Ca ne marche pas vraiment pour l'instant...



Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

Re: régression parabolique non triviale

par leon1789 » 20 Juin 2023, 20:03

Les calculs sont nettement plus simples, avec uniquement des additions et multiplications,
et la résolution d'une équation polynomiale de degré 2 (pas de souci).

Voilà la précision que j'obtiens :
avec le sommet en (191, 291)

Image

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

Re: régression parabolique non triviale

par leon1789 » 20 Juin 2023, 20:03

et pour le somment fixé à (200,300) :

Image

Sur ces deux graphes, est-ce que la précision te convient ? ou pas ?
Si cela te convient, je t'explique les calculs.
Modifié en dernier par leon1789 le 20 Juin 2023, 20:06, modifié 1 fois.

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 20:04

et quelle est ta méthode ?

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 20:04

oui la précision me convient

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

Re: régression parabolique non triviale

par leon1789 » 20 Juin 2023, 20:47

Je te présente la méthode , en menant les calculs en même temps, pour que tu puisses vérifier.


En notant le foyer F de coordonnées (a,b) , le sommet étant toujours supposé (0,0) ,
la parabole à pour axe est la droite passant par (0,0) dirigée par le vecteur (a,b)
Le truc est de chercher cet axe.
Une fois l'axe trouvé, on établira l'équation de la parabole : (b*X - a*Y)^2 / (a^2+b^2) - 4*(a*X+b*Y) = 0

Pour trouver l'axe :
On prend le sommet (200,300) .
je note (Xi, Yi) les points translatés pour ramener le sommet en (0,0)
On considère la matrice M avec n lignes (ici n = 269) et 2 colonnes formée par les (Xi, Yi)
On calcule la matrice Transposée(M) * M , qui est une matrice symétrique 2x2 , notée N
ici on obtient :
N :=
[329407, 279177]
[279177, 243409]
=
[u,v]
[v,w]
Je vais me servir de ces coefficients.

Si tu ne sais plus faire de multiplication matricielle, la transposée, on te le rappellera, pas de souci, c'est facile.

On pose t := trace (N) = u+w
et d := det(N) = u*w-v^2

On calcule ses valeurs propres, c'est à dire les zéros du polynômes Z^2 - t * Z + d
on trouve : 568876.9564 et 3939.0436
On garde uniquement la plus grande (celle qui va nous donne la composante principale de la parabole, à savoir son axe de symétrie), que l'on note z = 568876.9564

On cherche maintenant un vecteur propre noté V associé à z , à savoir simplement V = [ v, z- u ] ;
V dirige (à peu près) l'axe de symétrie de la parabole.
je pose [g, h] = V = [279177, 239470]
(désolé pour toutes les lettres...)


Enfin, il reste à déterminer a et b . Pour cela, on calcule le coefficient k (moindres carrés là aussi) :

k := add( (h * X[i] - g * Y[i] )^2 / (g^2+h^2) * (g* X[i] + h*Y[i]), i=1..n)
/ add( ( g* X[i] + h*Y[i] )^2, i=1..n)
on obtient
k = -0.1064893574 * 10^(-5)

alors a = k * g / 4 et b = k * h / 4
a := -0.07432344832,
b := -0.06375250442

La parabole cherchée :
(b*X - a*Y)^2 / (a^2+b^2) - 4*(a*X+b*Y) = 0

que l'on retranslate pour remettre le sommet en (200,300)
(b* (X-200) - a*(Y-300) )^2 / (a^2+b^2) - 4*(a*(X-200)+b*(Y-300) ) = 0

à savoir :
0.424*x^2 + 127*x - 0.988*x*y + 9369 - 148*y + 0.576*y^2 = 0

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

Re: régression parabolique non triviale

par leon1789 » 20 Juin 2023, 22:21

Pour la méthode fonctionne, il faut beaucoup de points, sur chaque branche de la parabole, comme sur ton exemple.

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 22:29

je ne trouve pas pareil pour toi pour l'équation du second degré je trouve :
z1=3704.59 z2=604879
j'ai fait :
double t = u + v;
double d = u * w - pow(v, 2);
double delta = sqrt(pow(t,2) - 4 * d);
double z1 = (t - delta) / 2;
double z2 = (t + delta) / 2;
je précise que je trouve pareil pour u, v et w

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 22:31

cette fois c'est le a qui est bon mais l'angle de rotation qui n'est pas bon

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

Re: régression parabolique non triviale

par leon1789 » 20 Juin 2023, 22:42

sylvain231 a écrit:je ne trouve pas pareil pour toi pour l'équation du second degré je trouve :
z1=3704.59 z2=604879
j'ai fait :
double t = u + v;

c'est t = u+w

Et la racine qu'il faut garder est z2 = (t + delta) / 2 (forcément plus grande que z1)

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 22:46

là j'obtiens les mêmes valeurs que toi mais voici l'image que j'obtiens :
Image

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 22:47

on dirait que l'"écartement" de la parabole est bon mais pas l'angle

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 22:50

voici mon code de dessin de la parabole :
Code: Tout sélectionner
void Parabole::draw (Mat& img){
    // Itérer sur chaque pixel
    for(double y = 0; y < img.rows; y+=0.1) {
        for(double x = 0; x < img.cols; x += 0.1) {
            // Calculer X' et Y'
            double X_prime = x - sommet.x;
            double Y_prime = y - sommet.y;

            // Calculer la valeur de l'équation de la parabole
            double val;


                val = (pow(b * pow(X_prime, 2) - a * Y_prime, 2)) / (pow(a, 2) + pow(b, 2) - 4 * (a * X_prime + b * Y_prime));
           


            // Si val est proche de 0, colorer le pixel
            if(fabs(val) < 0.1) { // Vous pouvez ajuster la tolérance
                img.at<cv::Vec3b>(y, x) = cv::Vec3b(0,0,255); // Par exemple, en blanc
            }
        }
    }
}

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 22:53

ah oui j'avais fait une erreur la ligne doit être :
val = (b * pow(X_prime, 2) - a * pow(Y_prime, 2)) / (pow(a, 2) + pow(b, 2)) - 4 * (a * X_prime + b * Y_prime);
c'est bon ça marche !
j'essaie avec un autre jeu de données

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

Re: régression parabolique non triviale

par leon1789 » 20 Juin 2023, 22:54

il faut poser

val = (pow( b * X_prime - a * Y_prime, 2)) / (pow(a, 2) + pow(b, 2) - 4 * (a * X_prime + b * Y_prime));

car la parabole cherchée est
(b*X - a*Y)^2 / (a^2+b^2) - 4*(a*X+b*Y) = 0

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 23:00

j'ai fait encore une erreur voici la bonne version :
val = (pow(b * X_prime - a * Y_prime, 2)) / (pow(a, 2) + pow(b, 2)) - 4 * (a * X_prime + b * Y_prime);

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 23:01

je valide ça marche !! un grand merci et bravo ! question supplémentaire : comment retrouver le a et le theta de tout à l'heure en fonction du a et du b de cette équation et c'en sera fini !

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 23:18

encore une dernière question : tu dis qu'il faut beaucoup de points pour que cette méthode fonctionne, environ combien ?

sylvain231
Membre Relatif
Messages: 301
Enregistré le: 07 Avr 2020, 13:20

Re: régression parabolique non triviale

par sylvain231 » 20 Juin 2023, 23:48

l'équation de la parabole précédente est fausse selon chatGPT la bonne formule est selon lui :
je cite :

Pour décrire l'équation d'une parabole tournée d'un angle θ avec un sommet P(xP, yP) dans le plan, nous devons utiliser une forme paramétrique de l'équation de la parabole. Voici l'équation :

(x - xP) = a(y - yP)^2

Dans cette équation, (x - xP) représente le décalage horizontal par rapport au sommet P, et (y - yP) représente le décalage vertical par rapport au sommet P. Le paramètre a contrôle l'ouverture de la parabole.

Pour faire tourner la parabole d'un angle θ, nous pouvons appliquer une rotation à l'équation en utilisant des coordonnées polaires. Voici la forme modifiée de l'équation :

(x - xP) = a(r sin(θ) + yP)^2

Dans cette équation, r représente la distance radiale de chaque point de la parabole par rapport au sommet P. Le terme r sin(θ) effectue la rotation de la parabole d'un angle θ. Ensuite, nous ajoutons yP pour ramener la parabole à la position souhaitée.

N'oubliez pas d'adapter les valeurs de xP, yP, a et θ en fonction de votre situation spécifique.

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

Re: régression parabolique non triviale

par leon1789 » 21 Juin 2023, 00:14

sylvain231 a écrit:encore une dernière question : tu dis qu'il faut beaucoup de points pour que cette méthode fonctionne, environ combien ?

Je ne sais pas. Il faudra faire un contrôle visuel.
On peut faire quelque chose de mieux encore : as-tu une librairie de calcul matriciel ? inverse de matrice ?


sylvain231 a écrit:l'équation de la parabole précédente est fausse selon chatGPT

Je n'ai (pour l'instant) aucune confiance en chatGPT pour prouver/faire des calculs mathématiques : il est capable d'affirmer des choses grossièrement fausses. Je lui ai donné un énoncé d'examen d'algèbre linéaire de 1ère année et ce qu'il a produit était très surprenant : les raisonnements étaient corrects, les calculs totalement faux. Tout le contraire d'une copie classique à ce niveau-là. :roll:

sylvain231 a écrit:comment retrouver le a et le theta de tout à l'heure en fonction du a et du b de cette équation et c'en sera fini !

d'un coté, angle t et coeff a'
de l'autre, cordonnées a,b du foyer

a' = 0.25 / (a²+b²)^0.5
cos(t) = b / (a²+b²)^0.5
sin(t) = a / (a²+b²)^0.5
ce qui permet de déterminer l'angle t.

Et dans l'autre sens :
a = sin(t) / 4a'
b = cos(t) / 4a'

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 91 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite