Trouver une fonction basée sur plusieurs valeurs
Répondre à la discussion
Affichage des résultats 1 à 26 sur 26

Trouver une fonction basée sur plusieurs valeurs



  1. #1
    invite36deafa6

    Trouver une fonction basée sur plusieurs valeurs


    ------

    Bonjour à toutes et à tous,

    J'ai vu sur ce forum plusieurs demandes d'aide lorsque les gens ont un tableau de valeur type f(x)=y pour retrouver f. En général, il est conseillé d'utiliser la méthode des moindres carrés, voire l'interpolation Lagrangienne.

    D'après ce que j'ai compris (j'ai arreté les maths il y a longtemps), l'interpolation Lagrangienne pourrait m'aller (je reste dans une zone limitée), mais elle ne considère pas plusieurs valeurs.

    Moi, j'ai ça par exemple (quelques lignes seulement, j'ai beaucoup d'échantillons) :
    Code:
    10 12 0 11 3 1 0 3 24 => 10
    11 13 0 13 3 1 0 3 24 => 18
    14 14 0 14 3 1 0 3 26 => 26
    13 13 0 13 3 1 1 3 26 => 22
    14 15 0 15 3 1 1 3 26 => 32
    16 16 0 16 4 2 1 3 26 => 48
    14 13 0 14 3 1 0 3 24 => 27
    15 14 0 16 3 1 0 3 24 => 36
    16 15 0 16 4 2 1 3 24 => 45

    Alors je pourrai tenter à la main en prenant les lignes peu différentes, mais je sens que je pourrai aussi m'arracher les cheveux Surtout que je ne sais pas s'il y a une "formule magique" pour de vrai...

    Donc si vous aviez une piste, il me semble que j'avais bossé sur un truc comme ça à une époque en maths, vous seriez bien sympathiques !

    Merci,
    Mindiell

    -----

  2. #2
    gg0
    Animateur Mathématiques

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour.

    Il n'y a pas de formule miracle. Si on a de bonnes raison de penser que les variables se combinent d'une certaine façon (linéairement, par exemple), on peut choisir un modèle et en faire une estimation. Si je comprends bien, tu as une valeur qui dépend de 9 variables. C'est généralement assez délicat, avec 2 ou trois c'est déjà difficile.

    Cordialement.

    NB : L'interpolation lagrangienne est souvent sans intérêt pratique (exacte pour les valeurs considérées, elle est généralement très fausses pour les autres valeurs).

  3. #3
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour,
    La méthode adoptée assez souvent est d'utiliser une formule de la forme.
    y = K . x1^a . x2^b . x3^c . x4^d . ... x9^i
    La méthode de résolution utilise naturellement la méthode des moindres carrés.
    Cependant, rien ne dit que c'est la meilleure formule. Simplement les résultats sont généralement satisfaisants.
    J.Jaquelin connait bien ces questions.
    Votre échantillon est trop petit pour que je puisse faire un essai.

  4. #4
    invite36deafa6

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonsoir et merci pour vos réponses.

    Au final, il y a plus que 9 variables. Cela se voit assez vite sur mon échantillon...
    La formule doit utiliser toutes les variables, c'est sur. Par contre, elle doit être du type : K = a.x1 + b.x2 + c.x3, etc...

    Merci encore,

  5. A voir en vidéo sur Futura
  6. #5
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Mon outil est prévu jusque 16 variables. Mais sur votre échantillon, je n'ai compté que 9 variables + le résultat.
    La fonction somme, plutôt que produit, est prévue aussi.
    Bon, c'est comme vous voulez. Soit je vous explique la méthode de calcul, soit vous me transmettez les valeurs, c'est à dire, toutes les options sont possibles.

  7. #6
    invite36deafa6

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bon, a priori, vu ce que je crois deviner, il n'y aurait que 9 variables mais aussi du "flou" en plus. Je peux toujours donner les chiffres, mais je crois que c'est fichu d'avance

    Code:
    10	12	0	11	3	1	0	3	24	10
    11	11	0	13	3	1	0	3	24	11
    12	12	0	12	3	1	0	3	23	11
    12	12	0	12	3	1	0	3	24	12
    13	11	0	13	3	1	0	4	22	14
    13	13	0	14	3	1	0	3	23	15
    12	13	0	13	3	1	1	3	26	16
    13	13	0	15	3	1	0	3	24	17
    14	14	0	12	3	1	0	3	23	17
    11	13	0	13	3	1	0	3	24	18
    15	13	0	14	3	1	0	4	22	19
    14	14	0	14	3	1	0	3	24	20
    13	13	0	13	3	1	1	3	26	20
    13	13	0	13	3	1	2	3	28	21
    15	15	0	13	3	1	0	3	23	21
    13	13	0	13	3	1	1	3	26	22
    13	13	0	13	3	1	2	4	20	22
    12	14	0	14	3	1	0	3	24	22
    12	13	0	15	3	1	1	4	22	22
    16	14	0	16	3	1	0	4	22	23
    14	15	0	15	3	1	1	3	26	24
    15	13	0	15	3	1	0	3	24	25
    14	14	0	14	3	1	0	3	26	26
    14	13	0	14	3	1	0	3	24	27
    14	12	0	14	3	1	1	4	24	27
    15	15	0	15	3	1	2	3	28	27
    15	15	0	15	3	1	1	3	26	28
    14	14	0	15	3	1	1	3	26	28
    16	14	0	16	3	1	2	3	24	29
    14	14	0	15	4	2	1	3	24	30
    14	14	0	16	3	1	0	3	26	30
    16	14	0	15	4	1	1	3	22	30
    15	15	0	16	4	1	1	3	28	31
    14	15	0	15	3	1	1	3	26	32
    16	14	0	16	3	1	1	4	24	33
    15	15	0	15	4	2	1	3	24	34
    16	16	0	14	4	1	1	3	26	34
    15	14	0	16	3	1	0	3	24	36
    14	15	0	15	4	2	1	4	22	36
    17	17	0	15	4	1	2	3	28	37
    15	16	0	16	4	2	1	3	26	38
    13	16	0	16	4	3	1	3	26	39
    17	14	0	16	4	2	3	3	24	40
    16	16	0	16	4	2	1	3	26	41
    16	16	0	16	4	2	3	3	28	41
    16	13	0	16	4	3	3	3	26	41
    16	15	0	16	4	2	1	3	24	45
    16	16	0	16	4	2	1	4	24	45
    16	16	0	16	4	2	1	3	26	48
    15	15	0	16	4	3	1	3	26	48
    14	14	0	12	4	2	4	3	30	48
    14	14	13	15	3	2	0	3	25	48
    14	14	13	15	3	2	1	3	25	49
    12	12	16	14	3	2	0	3	25	56
    16	16	14	16	4	3	1	3	25	65
    16	16	15	16	4	3	1	3	25	66
    17	15	14	15	4	2	1	3	24	74
    15	15	15	14	3	2	5	4	24	78
    13	13	18	16	4	3	0	3	26	83
    15	15	0	16	4	3	0	8	28	100
    13	13	0	16	3	1	0	3	24	100
    14	14	0	10	3	4	8	3	30	175
    Les dernières valeurs semblent vraiment pleines de flous et sont donc à éliminer je pense. Mais même comme ça, c'est pas sur qu'il y ait une réponse finalement /

    Merci quand même !

  8. #7
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bon, je regarde ça demain et je vous tiens au courant.
    S'il y a des groupes aberrants, je le verrai naturellement.

  9. #8
    inviteea028771

    Re : Trouver une fonction basée sur plusieurs valeurs

    Qu'est ce que représentent ces données? ça peut donner une idée de la forme de l'interpolation, voir de la forme explicite.

  10. #9
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour,
    @Tryss, il semble que le forme de la fonction est imposée, fonction linéaire.
    @ Mindiell, je ne comprends pas votre réaction pessimiste.

  11. #10
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Voila le résultat brut.
    Il apparait que les 2 dernières valeurs sont assez douteuses.

    Code:
    Résultat (fonction linéaire) : A= -62.4055 B= 1.9560 C= 0.4429 D= 0.8964 E= 0.0389 F= -14.7017 G= 21.0703 H= 4.5668 I= 6.4567 J= 2.0008 
    Res = A + B.V1 + C.V2 + D.V3 + ...
    Les constantes suivantes ont été ajoutées aux valeurs lues :
     0.00 0.00 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00
    Valeur calculée 12.71 (pour 10.00 théorique e=2.71)
    Valeur calculée 14.30 (pour 11.00 théorique e=3.30)
    Valeur calculée 14.66 (pour 11.00 théorique e=3.66)
    Valeur calculée 16.66 (pour 12.00 théorique e=4.66)
    Valeur calculée 20.67 (pour 14.00 théorique e=6.67)
    Valeur calculée 17.14 (pour 15.00 théorique e=2.14)
    Valeur calculée 25.71 (pour 16.00 théorique e=9.71)
    Valeur calculée 19.18 (pour 17.00 théorique e=2.18)
    Valeur calculée 19.46 (pour 17.00 théorique e=2.46)
    Valeur calculée 15.19 (pour 18.00 théorique e=-2.81)
    Valeur calculée 25.51 (pour 19.00 théorique e=6.51)
    Valeur calculée 21.54 (pour 20.00 théorique e=1.54)
    Valeur calculée 27.67 (pour 20.00 théorique e=7.67)
    Valeur calculée 36.24 (pour 21.00 théorique e=15.24)
    Valeur calculée 21.90 (pour 21.00 théorique e=0.90)
    Valeur calculée 27.67 (pour 22.00 théorique e=5.67)
    Valeur calculée 26.69 (pour 22.00 théorique e=4.69)
    Valeur calculée 17.63 (pour 22.00 théorique e=-4.37)
    Valeur calculée 24.25 (pour 22.00 théorique e=2.25)
    Valeur calculée 27.98 (pour 23.00 théorique e=4.98)
    Valeur calculée 30.59 (pour 24.00 théorique e=6.59)
    Valeur calculée 23.09 (pour 25.00 théorique e=-1.91)
    Valeur calculée 25.54 (pour 26.00 théorique e=-0.46)
    Valeur calculée 21.10 (pour 27.00 théorique e=-5.90)
    Valeur calculée 31.68 (pour 27.00 théorique e=4.68)
    Valeur calculée 41.11 (pour 27.00 théorique e=14.11)
    Valeur calculée 32.55 (pour 28.00 théorique e=4.55)
    Valeur calculée 30.15 (pour 28.00 théorique e=2.15)
    Valeur calculée 34.66 (pour 29.00 théorique e=5.66)
    Valeur calculée 32.51 (pour 30.00 théorique e=2.51)
    Valeur calculée 25.62 (pour 30.00 théorique e=-4.38)
    Valeur calculée 11.35 (pour 30.00 théorique e=-18.65)
    Valeur calculée 21.88 (pour 31.00 théorique e=-9.12)
    Valeur calculée 30.59 (pour 32.00 théorique e=-1.41)
    Valeur calculée 36.55 (pour 33.00 théorique e=3.55)
    Valeur calculée 34.91 (pour 34.00 théorique e=0.91)
    Valeur calculée 20.20 (pour 34.00 théorique e=-13.80)
    Valeur calculée 23.57 (pour 36.00 théorique e=-12.43)
    Valeur calculée 35.41 (pour 36.00 théorique e=-0.59)
    Valeur calculée 31.21 (pour 37.00 théorique e=-5.79)
    Valeur calculée 39.40 (pour 38.00 théorique e=1.40)
    Valeur calculée 56.55 (pour 39.00 théorique e=17.55)
    Valeur calculée 47.55 (pour 40.00 théorique e=7.55)
    Valeur calculée 41.35 (pour 41.00 théorique e=0.35)
    Valeur calculée 54.49 (pour 41.00 théorique e=13.49)
    Valeur calculée 70.23 (pour 41.00 théorique e=29.23)
    Valeur calculée 36.91 (pour 45.00 théorique e=-8.09)
    Valeur calculée 43.81 (pour 45.00 théorique e=-1.19)
    Valeur calculée 41.35 (pour 48.00 théorique e=-6.65)
    Valeur calculée 60.02 (pour 48.00 théorique e=12.02)
    Valeur calculée 58.10 (pour 48.00 théorique e=10.10)
    Valeur calculée 56.30 (pour 48.00 théorique e=8.30)
    Valeur calculée 60.87 (pour 49.00 théorique e=11.87)
    Valeur calculée 54.16 (pour 56.00 théorique e=-1.84)
    Valeur calculée 72.97 (pour 65.00 théorique e=7.97)
    Valeur calculée 73.87 (pour 66.00 théorique e=7.87)
    Valeur calculée 51.37 (pour 74.00 théorique e=-22.63)
    Valeur calculée 87.75 (pour 78.00 théorique e=9.75)
    Valeur calculée 66.79 (pour 83.00 théorique e=-16.21)
    Valeur calculée 91.74 (pour 100.00 théorique e=-8.26)
    Valeur calculée 19.22 (pour 100.00 théorique e=-80.78)
    Valeur calculée 133.13 (pour 175.00 théorique e=-41.87)
    
    Calcul sur 62 groupes.
     Ecart-type = 14.70
     Ecart relatif (valeur absolue) = 23.31%
     Ecart relatif (valeur signée) = 8.13%
    Ajustement linéaire sur 62  groupes   emq=14.70  ep=9.80
    Classe 1  nb=   2  3.23%  théorique 0.35%
    Classe 2  nb=   0  0.00%  théorique 2%
    Classe 3  nb=   1  1.61%  théorique 7%
    Classe 4  nb=   4  6.45%  théorique 16%
    Classe 5  nb=  15  24.19%  théorique 25%
    Classe 6  nb=  32  51.61%  théorique 25%
    Classe 7  nb=   7  11.29%  théorique 16%
    Classe 8  nb=   1  1.61%  théorique 7%
    Classe 9  nb=   0  0.00%  théorique 2%
    Classe 10 nb=   0  0.00%  théorique 0.35%

  12. #11
    Bruno

    Re : Trouver une fonction basée sur plusieurs valeurs

    Comment peut-on être limité à 16 variables à une époque où Matlab pseudo-inverse une matrice 100000x1000 en 50 ms ?

    Avec les moindres carrés je ne trouve pas les mêmes coefficients que Dlzlogic mais bien les mêmes erreurs:

    Code:
    clear all; close all; clc;
    
    X = load('data.txt')
    
    y = X(1:end,end);
    A = X(1:end,1:end-1);
    
    N = size(y,1);
    
    A = [ones(N,1) A];
    
    x = A \ y
    
    err = y - A*x;
    ecart_type = sqrt(var(err))
    Résultat:

    Code:
    x =
    
      -56.9423
        1.9560
        0.4429
        0.8964
        0.0389
      -14.7017
       21.0703
        4.5668
        6.4567
        2.0008
    
    
    ecart_type =
    
       14.7004
    En écartant les 3 derniers points:

    Code:
    x =
    
      -80.3958
        1.1215
        0.7749
        2.0888
        1.4759
        5.9036
        3.4387
        1.9546
        3.7190
        0.9001
    
    
    ecart_type =
    
        4.4421
    Dans tous les cas les données ont l'air plutot bien modélisées par 3 variables:

    Code:
    >> svd(A)
    
    ans =
    
      272.7769
       39.0010
       13.7546
        8.5616
        6.1384
        5.7941
        4.1263
        3.1876
        1.6326
        0.2675
    Dernière modification par Bruno ; 26/07/2013 à 10h02.

  13. #12
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour Bruno,
    Comment peut-on être limité à 16 variables à une époque où Matlab pseudo-inverse une matrice 100000x1000 en 50 ms ?
    Disons que je me suis limité à 16 variables, pour parer à toute éventualité, mais à mon avis, au delà de 5 ou 6, ça n'est plus tellement réaliste. Mais encore ce n'est que mon avis.
    Avec les moindres carrés je ne trouve pas les mêmes coefficients que Dlzlogic mais bien les mêmes erreurs:
    Concernant la différence des paramètres, peut-être cela est du à la constante additionnelle que j'introduis, cela vaut la peine d'être creusé.

    Votre outil permet-il de calculer une fonction de la forme Y=K . x1^a . x2^b . x3^c . etc, ou d'autres formes ?

  14. #13
    Bruno

    Re : Trouver une fonction basée sur plusieurs valeurs

    Citation Envoyé par Dlzlogic Voir le message
    Disons que je me suis limité à 16 variables, pour parer à toute éventualité, mais à mon avis, au delà de 5 ou 6, ça n'est plus tellement réaliste. Mais encore ce n'est que mon avis.
    Bof, aujourd'hui les problèmes à plusieurs centaines de variables sont courants. Il faudrait que Mindiell nous précise le contexte, mais 16 variables ça ne me choque pas.

    Concernant la différence des paramètres, peut-être cela est du à la constante additionnelle que j'introduis, cela vaut la peine d'être creusé.
    Ça semble coller sauf pour le terme indépendant:

    Code:
    x =
    
      -78.4554
        1.9560
        0.4429
        0.8964
        0.0389
      -14.7017
       21.0703
        4.5668
        6.4567
        2.0008
    Votre outil permet-il de calculer une fonction de la forme Y=K . x1^a . x2^b . x3^c . etc, ou d'autres formes ?
    Oui dans la mesure où Matlab ne fait que du calcul numérique, c'est à l'utilisateur d'écrire l'algorithme. Bien sur si le modèle est linéarisable (comme Y = ln(K) + a*ln(x1) + b*ln(x2) + ..., à condition de décaler les 0) c'est plus facile ! D'ailleurs je trouve:

    K = 2.8963e-09
    [a b c ..] = [1.2006 0.4998 0.1343 0.7117 -1.0813 1.1342 0.1018 0.5888 1.5531]
    ecart type = 0.2853

  15. #14
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bon, on est d'accord.
    J'ai modifié mon code pour que, dans le cas linéaire, il n'y ait pas de constante additionnelle. Je trouve exactement les mêmes coefficients.
    Par curiosité, j'aimerais bien avoir des exemples de fonction à plus de 16 variables (sans dévoiler des secrets professionnels).
    Mais moi, j'ai pas Matlab, j'ai bien chargé Scilab par curiosité, j'en suis encore à C/C++. Je fais partie de la vieille génération, et j'aime mieux savoir ce que je fais.
    Cordialement.

  16. #15
    Bruno

    Re : Trouver une fonction basée sur plusieurs valeurs

    Tout ce qui est modélisation de structures, d'écoulements ou de circuits complexes (ou autres graphes comme le web) par exemple. Ou plus simplement l'estimation d'une longue réponse impulsionelle, la reconstruction d'une image par tomographie où 1 pixel = 1 variable en n&b et 3 en couleur, etc...

    Il y a quand même moyen de savoir ce qu'on fait dans Matlab si on code tout soi-même. Heureusement que tu n'en es pas encore au Fortran

  17. #16
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Oui, 1 pixel = 1 variable, est-ce que ce serait pas plutôt 1 pixel = 1 valeur ?
    Mes derniers développement en Fortran doivent dater de 90. Et je ne les renies pas.
    Mais, vu que je suis pas le seul à utiliser encore le C, je suppose qu'il présente encore des avantages. Mais on n'est pas dans le forum informatique, mais mathématique.
    Bref, ça me rassure un peu de constater que le problème posé n'était pas si difficile, on est au moins deux à savoir le résoudre.

  18. #17
    Bruno

    Re : Trouver une fonction basée sur plusieurs valeurs

    J'appelle variable un paramètre à estimer. Donc oui, typiquement une petite image de 800x600 pixels nécessite d'estimer au minimum 480 000 paramètres sur base de qqch comme 5 millions de projections. Le plus incroyable c'est que ça se fait en moins d'une seconde, ce qui range les problèmes à 16 variables au niveau du bac à sable ^^

  19. #18
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Oui, je comprends.
    Pour moi, dans mon vocabulaire, une variable est ce qui varie dans une fonction, par exemple z=f(x,y) contient 2 variables x et y qui peuvent prendre 800 valeurs pour x, 600 pour y, mais il n'y a que 2 variables.
    Dans le cas de la question présente, ce n'est pas tellement la difficulté de calcul au point de vue volume, mais "poser le problème" dont je parle.
    A propos d'inversion de matrice, j'ai fait des comparaisons, en gros, le problème était celui-là, on a un système linéaire à résoudre, deux solutions : soit on résout le système avec une méthode type pivot de Gauss, soit on considère que c'est une matrice, on l'inverse etc.
    Considérant le volume de calcul, y'a pas photo, c'est la première méthode qu'il faut adopter.
    Par contre, les capacités des machines et des logiciels sont tels qu'on peut adopter la seconde.
    Si tu as lu un peu mes réactions, tu auras pu remarquer que, pour moi, une matrice est un outil mathématique de représentation qu'une application linéaire, et non un tableau de valeurs. Lorsqu'on est au niveau de calcul numérique informatique, en simplifiant, on ne dispose plus que des opérations et d'un truc permettant de recommencer une opération avec un indice différent : les boucles, et rien d'autres. En d'autres termes, ma machines sait ce qu'est un tableau, mais ne sait pas ce qu'est une matrice.
    Mais là on diverge vers le "hors-sujet" caractérisé.

  20. #19
    invite75a796c1

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour,

    cette discussion sur les outils est intéressante et en rapport avec le sujet je crois puisqu'elle peut aider à structurer les questions.

    Mais comment utiliser 480.000 paramètres ? ne s'agit il pas plutôt de données en entrée ?
    Ne serait ce qu'avec les erreurs d'arrondis , une fonction avec autant de paramètres aurait quelque chose d'aléatoire ...

  21. #20
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour Mike,
    Je suis assez d'accord avec vous. Mais j'ai un gros handicap.J'ai fait mes études il y a une cinquantaine d'années, pendant mon activité professionnelle, j'ai utilisé les quelques notions mathématiques qui m'étaient nécessaires, mais pas plus, depuis quelques temps, et pour essayer de garder mes neurones en bon état de marche, je m'y suis remis.
    Des termes ont changé, l'informatique a bien évolué, et à ce propos, sauf des discussion avec des informaticiens de ma tribu (utilisateurs du C), j'ai un peu de mal à me faire comprendre.
    La question posée (fonction à plusieurs variables) est assez fréquente et correspond à un besoin réel, mais il s'avère que les choses vont rarement plus loin. Il suffit de lire la phrase du demandeur "tant pis, merci quand-même".
    Dans le même ordre d'idées, la notion de "valeur la plus probable" ou "avec le maximum de vraisemblance" provoque des discussions à n'en plus finir.

    Le problème posé par le vocabulaire me semble prioritaire.
    Par exemple, que veut dire "ce sera difficile" ? est-ce que ça veut dire "c'est impossible, mais le dis gentiment" ou "le problème est incomplet" ou "moi je sais pas le faire, donc forcément toi non plus" ou autre-chose ?

    En particulier, concernant cette question précise (fonction à plusieurs variables), je ne me souviens pas d'une discussion (hors exercices, et encore !) qui se soit finalisée normalement. Je pence que celle-ci est la première qui ait eu deux calculs (ie deux membres) qui aient abouti au même résultat.

    Voila, j'ai tout dit.

  22. #21
    invite75a796c1

    Re : Trouver une fonction basée sur plusieurs valeurs

    re Bonjour

    J'en suis au même point à 12 ans près, C/C++ inclus ...

    c'est l'ambiance générale des forums mais il faut reconnaître que malgré cela, les fils de fitting de FS sont très bons

  23. #22
    Bruno

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour,

    Citation Envoyé par mike.p Voir le message
    Mais comment utiliser 480.000 paramètres ? ne s'agit il pas plutôt de données en entrée ?
    Ne serait ce qu'avec les erreurs d'arrondis , une fonction avec autant de paramètres aurait quelque chose d'aléatoire ...
    Il s'agit bien de 480 000 sorties puisqu'elle correspondent aux 480 000 pixels d'une image inconnue dont on connait seulement les projections (somme des pixels pris le long d'une droite en rotation). Les entrées sont bien plus nombreuses (au moins 5 millions pour avoir une bonne estimation) et les algos tiennent bien sur compte des erreurs d'arrondi, histoire de ne pas trop les amplifier. Dans le cas linéaires des moindres carrés, la taille du problème n'a pas d'importance car l'inversion se calcule en travaillant colonne par colonne: http://en.wikipedia.org/wiki/QR_deco...verse_problems

  24. #23
    invite75a796c1

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour,

    parlez vous de fitting de courbe ? En général , il s'agit de déterminer les paramètres d'une fonction paramétrique pour qu'elle soit la plus proche possible d'une liste de couples de données. On peut compliquer un peu avec quelques variables supplémentaires.

    Est ce bien ce que vous faites avec les projections pour par exemple reconstituer vectoriellement l'objet original en 2D ou 3D ? chacun finit bien en fonction ayant 480.000 paramètres ? n'y a t il aucun regroupement d'échelle ?

    Désolé d'insister mais c'est pour comprendre. Merci.

  25. #24
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonjour,
    Dans le cas linéaires des moindres carrés, la taille du problème n'a pas d'importance car l'inversion se calcule en travaillant colonne par colonne
    Oui, moi aussi, j'aimerais bien comprendre si on parle de la même chose.
    Dans le cas de régression linéaire.
    On cherche à trouver les paramètres K, a, b, c, d etc. de la fonction y = K + a.x1 + b.x2 + c.x3 + ... j.xj
    Les variables x1, x2, ... xj sont les variables de la fonction et y le résultat.
    On dispose d'un certain nombre de groupes de valeurs connues mais approchées x1, x2, x3, ... xj ==> y.
    Ce nombre de groupes est grand, c'est à dire plus grand que j, le nombre de variables x.
    Les calculs formels mènent à un système de (j+1) équations linéaires où les paramètres sont de la forme somme(xi), somme(xi.yi), somme(xi²) etc.
    Le nombre des groupes peut être très grand, par contre le nombre d'équations, donc de paramètres, donc de variables ne devait pas être beaucoup plus grand que 7 ou 8. Non pas pour des motifs de capacité de calcul, mais parce qu'une fonction avec plus d'inconnues n'aurait pas beaucoup de sens.

    Code:
    y = X(1:end,end);
    A = X(1:end,1:end-1);
    
    N = size(y,1);
    
    A = [ones(N,1) A];
    
    x = A \ y
    Apparemment, ces 5 lignes résolvent directement tout le processus.
    Cependant, on n'a aucune idée de ce qui se passe. On constate que le résultat est bon, vous me direz c'est le principal.
    Petit détail au passage, il est légitime de supprimer les 2 derniers groupes, mais pas plus.

  26. #25
    Bruno

    Re : Trouver une fonction basée sur plusieurs valeurs

    Citation Envoyé par mike.p Voir le message
    parlez vous de fitting de courbe ? En général , il s'agit de déterminer les paramètres d'une fonction paramétrique pour qu'elle soit la plus proche possible d'une liste de couples de données. On peut compliquer un peu avec quelques variables supplémentaires.
    On peut voir ça comme un fitting de courbe réelle à 480 000 variables oui. La fonction est linéaire à 480 000 variables et chaque projection est une évaluation de celle-ci sur une centaine de variables.

    Citation Envoyé par Dlzlogic Voir le message
    Oui, moi aussi, j'aimerais bien comprendre si on parle de la même chose.
    Dans le cas de régression linéaire. ../..
    C'est exactement ça, simplement généralisé à des dimensions quelconques où il est plus facile d'écrire les choses en terme de matrices. Ce qui donne un modèle y=Ax avec:

    y : Nx1, représente les mesures
    x : mx1, représente les paramètres inconnus à estimer
    A : Nxm, représente le modèle et est également fonction (non nécessairement linéaire!) des mesures

    En général on a N>m (pas toujours). L'estimateur des moindres carrés cherche alors le minimisant . En annulant la gradient par rapport à de cette dernière quantité, on trouve:


    Cette solution est tout à fait générale et reste valable dans les complexes à condition de remplacer la transposée par l'hermitienne. Gros avantage tant que le pb est linéaire: sans biais, identique au max de vraisemblance, très rapide en calcul numérique et il existe même une version récursive quand N devient grand ou qu'on veut du temps réel. D'où la possibilité d'avoir de grands m et N, ce qui était encore un fantasme il y a 10 ans si j'en crois les "anciens"... On le retrouve aussi pour résoudre des problèmes non-linéaires (voir ici pour les détails).

    En pratique on n'utilise pas l'expression analytique ci-dessus à cause du (A^T*A) qui amplifie l'erreur au carré, mais une méthode basée sur la décomposition QR de A. C'est ce qu'implémente Matlab avec l'opérateur backslash "\".

    Citation Envoyé par Dlzlogic Voir le message
    mais parce qu'une fonction avec plus d'inconnues n'aurait pas beaucoup de sens.
    Pas d'accord, les moindres carrés dépassent de très loin le cadre de l'interpolation de courbes visualisables. La modélisation d'un système est nécessairement complexe si on veut être réaliste, ce qui implique d'aller bien au-delà de 16 variables. Dès qu'on arrive à formuler un problème même très complexe (plusieurs millions d'inconnues) sous la forme y=Ax, c'est gagné avec les moindres carrés.

  27. #26
    Dlzlogic

    Re : Trouver une fonction basée sur plusieurs valeurs

    Bonsoir,
    J'ai pas tout compris, moi, je suis très terre à terre, on me chante sur tous les tons que la minimisation de la somme des carrés des écarts n'est qu'une question de choix, là je lis l'excès inverse : c'est la panacée universelle.
    Je n'ai certainement jamais parlé de courbe visualisable, je n'ai parlé que de fonction comportant un nombre limité de variables. il est vrai que sur un réseau de triangulation très important, ce nombre peut être important, mais dans le problème concerné, une fonction y=f(...), le nombre de variables ne peut être que limité.
    En fait, il faut distinguer une fonction y=f(...), où l'écart est la différence entre les yi observés et les y calculés et une fonction qui met en relation un grand nombre d'inconnues, par exemple un réseau de triangulation, c'est pas tout à fait le même chose.
    Pour conclure (je crains que ça ne devienne un dialogue de sourds) mon outil de régression à plusieurs variables est encore plus simple, puisqu'il suffit de cliquer sur un menu en ayant pris soin au préalable d'avoir rajouté une première ligne où on a indiqué le nombre de variables, le type de régression et pour chaque variable si elle est du type x, du type y ou si elle doit être ignorée.
    Ah, j'oubliais, si ma limitation à 16 variables est du niveau "bac à sable", ce n'est pas très gentil pour gg0 qui ne peut être qu'au niveau "couffin".
    C'est tout de même vraiment bien si on arrive à tout résoudre avec
    Dès qu'on arrive à formuler un problème même très complexe (plusieurs millions d'inconnues) sous la forme y=Ax, c'est gagné avec les moindres carrés.

Discussions similaires

  1. Méthode pour trouver le domaine de définition d'un fonction à plusieurs variables
    Par invitef517fbc7 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 01/10/2011, 17h22
  2. Trouver une correlation prenant plusieurs variables en compte.
    Par invite2313209787891133 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 28/07/2011, 19h29
  3. question sur une fonction réciproque et fonctions a plusieurs variables
    Par invite1883c266 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 13/12/2008, 20h55
  4. Trouver une formules entre différentes valeurs logique.
    Par philname dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 22/05/2007, 15h35
  5. Voici pourquoi une économie basée sur l'hydrogène n'est pas viable
    Par invite03d4693d dans le forum Environnement, développement durable et écologie
    Réponses: 25
    Dernier message: 21/12/2006, 17h30