T'auras peut-être même une somme de gaussiennes, ce qui est bien abordé dans la littérature.
T'auras peut-être même une somme de gaussiennes, ce qui est bien abordé dans la littérature.
Envoyé par Julizn
Bah une somme de gaussiennes indépendantes, c'est pas compliqué, c'est une gaussienne. Attention, c'est pas vrai en général si elles ne sont pas indépendantes, la somme peut être à peu près n'importe quoi. C'est même à ça que sert la notion de vecteur gaussien: un vecteur de variables aléatoires dont toutes les combinaisons linéaires sont gaussiennes. C'est en particulier le cas d'un vecteur de gaussiennes indépendantes, et c'est en fait assez peu plus général: si tu connais les covariances, en les considérant comme des produits scalaires et en faisant les bonnes combinaisons linéaires, tu obtiens des indépendantes. En gros: les coordonnées d'un vecteur gaussien engendrent un espace vectoriel qui a une base formée de gaussiennes indépendantes (au moins en dimension finie, j'ai oublié les gags qui peuvent se produire en dimension infinie).
Pardon je me suis mal exprimé.
Je pensais plutôt à un mélange de gaussiennes. Mais ça n'a pas l'air d'être le cas ici.
Envoyé par Julizn
Yep, mon cas est un peu différent. J'utilise une approche analytique pour extraire les moments statistiques d'une variable elle-même fonction non-linéaire d'une collections de variables aléatoires gaussiennes. Tout repose sur la linéarisation de ladite fonction, de manière à faire apparaitre les covariances des variables aléatoires du départ.
Je me demandais s'il y avait une formulation tensorielle fournissant le second moment statistique autour de la moyenne d'une matrice, mais je vais en fait juste travailler sur les valeurs propres de la matrice.
Je soupçonne que ça dépend de ce pour quoi tu veux regarder cette matrice, mais si c'est le spectre qui t'intéresse, c'est sans doute la bonne voie. Après le plus souvent les valeurs propres n'ont pas d'expression analytique directe (tu les as comme zéros d'une fonction), ça complique un peu les choses.
D'un autre côté, je serais surpris que les probabilistes n'aient pas regardé ça sous un angle ou un autre - le tout est de trouver la référence qui va bien... mais une question de la forme "je prends k variables normales indépendantes, je regarde un polynôme fixe de ces k variables, je voudrais dire des choses sur la loi des zéros de ce polynôme", ça semble assez naturel.
Hello les matheux.
J'essaye de faire de l'interpolation sur un triangle en utilisant les coordonnées barycentriques, mais je veux une interpolation régulière (différentielles d'ordre 1 et 2) nulles sur les bords?
C'est un peu l'équivalent si je faisais de l'interpolation régulière sur un segment, d'utiliser 6 * t^5 - 15 * t^4 + 10 * t ^ 3 appliqué à l'interpolation linéaire.
Donc là des coordonnées lambda_1, lambda_2, lambda_3 (qu'on peut simplifier en lambda_1, lambda_2, 1 - lambda_1 - lambda_2). Je cherche une fonction de R^2 dans R^2 du coup.
Tu peux définir une fonction qui s’annule sur un des bords en s’y aplatissant (du genre le membre de gauche de l’équation cartésienne de la droite au carré) et tu multiplies les trois fonctions obtenues (une par côté).
une balle, un imp (Newstuff #491, Edge, Duke it out in Doom, John Romero, DoomeD again)
Canard zizique : q 4, c, d, c, g, n , t-s, l, d, s, r, t, d, s, c, jv, c, g, b, p, b, m, c, 8 b, a, a-g, b, BOF, BOJV, c, c, c, c, e, e 80, e b, é, e, f, f, f, h r, i, J, j, m-u, m, m s, n, o, p, p-r, p, r, r r, r, r p, s, s d, t, t
Canard lecture
Mais je la veut pas nulle sur les bords la fonction que je cherche. Elle doit faire une interpolation entre les 3 points. Donc par exemple sur un des bords, aller de (0,1) à (1,0). Valoir au tout milieu du triangle (0.33, 0.33) etc... Mais avec une dérivée nulle le long des bords.
Mais c'est bon j'ai trouvé une fonction qui me convient. Elle part des coordonnées barycentriques, puis je fais deux interpolations linéaires régulières (avec le polynôme de degré 5 de mon poste précédent). Sauf que le problème c'est que en fonction de la direction de mon interpolation j'ai une anisotropie qui se crée ((f(x,y) != f(y,x) or je veux f(x,y) = f(y,x) ). Du coup je symétrise mon bazar en créant 2 autres fonctions de la même façon le long des deux autres hauteur du triangle et je fais la moyenne des 3 et ça marche.
Hello les matheux. Toujours sur le même projet. Pour ma génération de terrain j'utilise un QuadTree pour capturer des niveaux de détails différents (haute résolution sur les montagnes et faible résolution sur les plaines pour résumer). Mais je n'utilise pas un QuadTree classique car mes données ne sont pas pré-générées dans une base de donnée mais générées à la volée par des fonctions procédurales. Voici mon principal problème :
Je ne sais pas à l'avance judqu'à quel niveau de résolution je dois aller, donc je dois évoluer ma fonction au niveau de détail le plus fin avant de simplifier petit à petit mon maillage avec un critère de tolérance sur l'erreur de l'interpolation linéaire.
J'ai introduit ce système car il y a une forte disparité dans le niveau de détail nécessaire et en utilisant un maillage uniforme j'ai plein de triangles inutiles. J'ai réglé mon problème de performance pour afficher le terrain, mais pour générer l'arbre, comme je dois évaluer jusqu'au niveau de détail le plus élevé, eh bien il y a un long temps de preprocess initial qui me pose problème.
Je voulais juste avoir un avis sur mon idée : déterminer une constante de Lipschitz pour ma fonction procédurale (qui dépendra du domaine considéré) et l'utiliser de façon conservatrice pour ne pas à avoir à explorer les enfants?
EDIT:
Pour illustrer un peu mon propos
EDIT 2 :
Après réflexion, je me rend compte que la constante de Lipschitz ne me donne qu'une estimation très conservatrice, peut-être trop, de l'erreur d'une approximation linéaire. Ce qu'elle me donne en fait, c'est une bonne idée de l'erreur maximale d'une approximation par fonction constante par morceaux... Du coup il faut que je trouve quelque chose qui majore mieux l'erreur de l'approximation linéaire...
Dernière modification par Janer ; 23/07/2018 à 18h40.
Coin,
je cherche à échantillonner une distribution Gaussienne centrée de covariance connue en très grandes dimensions : la matrice de covariance est de l'ordre de 4000 x 4000. La méthode habituelle (calculer la décomposition de Cholesky de la matrice de covariance, échantillonner une distribution normale et multiplier le vecteur Gaussien résultant par la décomposition de Cholesky) ne fonctionne plus passé une certaine taille de la matrice de covariance, l'algo calculant la décomposition n'étant plus suffisamment stable.
Y'a une astuce pour échantillonner une telle distribution ne nécessitant pas le calcul de la décomposition de Cholesky ? J'ai tenté de normaliser la matrice de covariance avant de calculer sa décomposition de Cholesky, mais ça n'a pas fait de miracles.
Si j'ai bien suivi, étant donné un intervalle en x ou en y (un rectangle à une résolution donnée), tu peux connaître les gradiants min et max de la fonction dans ce rectangle (ta constante de Lipschitz locale). Une fois que tu as ça, tu sais que la fonction est bornée par le parallélogramme formé par les valeurs aux bornes de l'intervalle et les dérivées min et max. Tu as "juste" à calculer la distance max suivant l'axe z entre le parallélogramme (l'enveloppe de la fonction) et sa diagonale (l'interpolation linéaire). En faisant un dessin, posant les équations sur les vecteurs et en résolvant le système, ça doit bien se faire.
Et pour calculer tes gradiants min et max sur un intervalle, ça revient à évaluer la dérivée de ta fonction sur un intervalle. Vu que ta fonction est un polynôme, ça ne devrait pas poser de problème, et tu peux le programmer très simplement avec une bibliothèque d'arithmétique par intervalles.
(Je raisonne dans le cas 2D et je n'ai pas trop réfléchi si ça se généralisait bien en 3D, mais ça devrait le faire, au pire avec un encadrement un peu plus large que nécessaire.)
Je n'ai jamais réfléchi au problème, mais il me semble que si ta matrice de covariances est M, et que tu as n'importe quelle matrice A telle que A.(tA)=M, alors en prenant X un vecteur normal, AX a les bonnes covariances, non? Normalement tu n'as pas besoin que A ait une forme particulière (après, les problèmes de stabilité, j'y connais rien).
Alors j'ai bossé dessus toute la soirée d'hier...
Oui c'est ce que je pensais faire au départ, mais le parallélogramme risque d'être trop large. J'ai fait quelques vérifications numériques... Ah et d'ailleurs j'ai pas besoin de bosser en 3D ou même en 2D, la façon dont je fait ma tesselation et par interpolation successive sur les arrêtes des triangles. Je dois juste majorer le gradient dans toutes les directions.
Sinon j'ai aussi fait quelques recherches, j'étais un peu rouillé sur ça mais dans mes souvenirs de cours de méthode numérique j'étais sûr qu'il y avait quelque chose sur l'erreur des maillage P1 (linéaire) et j'ai retrouvé le fait qu'en utilisant la matrice hessienne j'ai exactement un majorant de l'erreur de l'approximation linéaire de la forme M * h^2 / 8. Mais devoir calculer les différentielles d'ordre 2 rend les choses assez compliquées pour moi... En fait ma fonction Height n'est pas un polynôme simple, il y a des perturbations (compositions) multi-fractal, d'autres fonctions utilisées à certains endroits, les bordures entre deux types de terrains sont pas simple non plus etc... Donc pour le gradient ça allait encore, je pouvais me débrouiller, mais pour l'ordre 2 ça devient un peu tricky.
Je pense que je vais essayer de trouver une solution numérique pour l'instant et je reviendrai sur ça plus tard.
Est-ce que c'est vraiment grave si ton encadrement de l'erreur est large ? Au pire, tu feras un maillage plus fin que nécessaire à certains endroits. Et si tu génères ta géométrie à la volée, ton critère d'arrêt a intérêt à être rapide à calculer, quitte à avoir un peu plus de triangles, non ?
Non, non, le maillage ne sera jamais plus fin que nécessaire, de toute façon je supprime des triangles en partant du plus fin au plus grossier de façon itérative en regardant à chaque étape si l'erreur générée est satisfaisante. L'enjeu c'est deviner à l'avance les zones où il ne sera même pas nécessaire de checker les résolutions les plus grandes car on sait qu'elle seront de toute façon enlevée plus tard.
Moins bon encadrement = moins de chance de faire des coupes. Mais encadrement plus rapide... Il y a un trade-off en effet! Sur les zones totalement plates, ou quasi-plates je pense que pas la peine d'aller plus loin donc je peux commencer par ça, mais si je veux économiser sur les collines vs montagnes par exemple, d'après mes premières expérimentations, le gradient ne suffit pas.
Ceci dit, si ça se trouve, obtenir une factorisation M=A(tA) avec A quelconque, c'est quasiment aussi difficile que d'obtenir la factorisation de Cholesky proprement dit - et tout aussi instable numériquement.
Et pour la peine, Wikipedia m'a permis d'apprendre que Cholesky était français, et même polytechnicien (personne n'est parfait)...
On dirait bien qu'une décomposition spectrale de M pourrait faire un meilleur job que Cholesky pour calculer une racine carrée : avec M = U * D * U.T , j'ai de plus faibles résidus dans le calcul de M -( U *sqtr(D) * U.T)(U *sqrt(D) * U.T) que dans celui de M - L * L.T. A suivre ...
edit: Je peux confirmer que ça marche avec la décomposition spectrale
Girard annonce la Logique 2.0, "le jailbreak du tarskisme" : http://girard.perso.math.cnrs.fr/logique2.0.pdf
Je n'ai lu que l'abstract.
C'est fréquent chez les matheux d'utiliser le terme "tract" ? Je n'ai jamais vu ça, ça fait bizarre pour moi.
Rien ne me choque moi, je suis un scientifique ! - I. Jones
Non, seulement chez J-Y Girard. L'emploi du champ lexical de l'activisme d'extrême-gauche fait évidemment partie du troll.
On parle de l'auteur de l'article fondateur des montres à moutarde (mustard watches) : http://girard.perso.math.cnrs.fr/moutarde.pdf pour la VF.
Ha, ha ! Je ne le connais pas.
Les moustaches, je n'en connais que les postes.
Rien ne me choque moi, je suis un scientifique ! - I. Jones
Bon, il a aussi inventé le Système F qui est à la base de la plupart des assistants de preuves (Coq et compagnie) et des systèmes de types (OCaml, Haskell et compagnie) modernes, mais ça c'est une contribution mineure.
Autant je vois à peu près ce qu'il visait avec les montres à moutarde, autant là, ça m'échappe quand même un peu.
Sauf si j'ai raté un truc, contrairement aux montres à moutardes, c'est à prendre au premier degré. Apparemment, son but est de réconcilier la philosophie et la logique mathématique. Donc il s'attaque d'un côté aux philosophes analytiques et autres scientistes, qui sont restés bloqués sur une logique classique d'avant Gödel qui prétend répondre à tout par oui ou par non, et d'un autre côté aux théories mathématiques "montres à moutarde" déconnectées du monde réel.
Maintenant, je n'ai pas le bagage en logique pour suivre ce qu'il propose, surtout que ça couvre 30 ans de recherche... Mais en gros, il était parti sur des réseaux de preuve en logique linéaire (par opposition aux arbres de preuves en logique classique), et il a récemment ajouté sa distinction "usine/usage" qui lui permet de passer au second ordre et apparemment de faire marcher le truc.
Enfin pour l'instant, je vais attendre que ça soit implémenté dans Coq.