Interpolations linéaire et cosinus appliquées à une face du cube

a marqué ce sujet comme résolu.

J’ai pas de JVM (et je n’ai aucune intention de l’installer) donc je n’ai pas pu bricoler avec ton algo.

Après une première lecture, il n’y a pas d’erreur particulière qui me saute aux yeux. Par contre, je me dis que l’erreur que tu autorises sur la somme des poids est en fait plutôt grosse et pourrait expliquer la présence de "tas" de points à certains endroits. Qu’est-ce qui se passe si tu remplaces le test $|1-\sum w|<0.01$ par $|1-\sum w|<10^{-6}$ par exemple ?

Autre remarque, plutôt que d’itérer sur tous les poids possibles de $0$ à $1$, tu pourrais itérer de $0$ à $1-\sum w$ et le dernier poids pourrait être directement mis à $1-\sum w$. Ça t’éviterait de passer par les cas $\sum w>1$ par construction. Ce serait plus efficace d’un point de vue algorithmique, et ça t’éviterait d’avoir à vérifier que $\sum w\approx 1$ puisque tu serais sûr que $\sum w=1$ (tu t’affranchis même du problème d’arrondi au passage).

Mdr pas de souci pour la jvm, je mettrai mon code sur un jsfiddle ou quoi, comme ça si vous voulez tester vous pourrez le faire sans devoir installer quoi que ce soit:)!

Je ferai mes tests demai’, je passe en coup de vent là. Bonne nuit à tous !

Pour solutionner tes problèmes d’arrondis, tu peux procéder ainsi :

  • prenons un exemple , step = 1/10.
  • dans ce cas, tu remplace ta boucle
    (.0 to 1.0 by step).foreach(current_step => { par :
    (0 to 10 by 1).foreach(current_step0 => { current_step = current_step0/10.0

Et ainsi, avec quelques aménagements mineurs, tu peux remplacer ton test :
if(Math.abs(transformed_weights.sum - 1.0) >= 0.01) {

par  : if transformed_weights.sum <> 10

+0 -0

@adri1 , je retrouve de nouveau mes diagonales. En effet :

Image utilisateur
Image utilisateur

@elegance , merci pour cette proposition, je l’appliquerai d’ici peu!

Du coup je ne comprends toujours pas d’où vient le problème, c’est terrible ça :/

+0 -0

@adri1 , je retrouve de nouveau mes diagonales

Ben c’est juste que ta méthode telle qu’elle est implémentée n’est pas assez précise. C’est quand même bizarre qu’en accumulant seulement quatre additions tu te prennes une erreur de plus de $10^{-6}$… Tes flottants sont en simples ou en double précision ? Une idée simple pour limiter la casse serait d’utiliser une puissance de 2 pour step (genre $2^{-3}$), histoire de pas te prendre un arrondi dès ce moment là (qui doit probablement s’accumuler si le range de scala est mal foutu de ce point de vue).

Dans tous les cas, l’exploration telle que tu la fais te fait visiblement trainer des erreurs importantes. Vu que c’est en plus un désastre d’un point de vue complexité algo, je te suggère de coder proprement ton interpolation. Je ne pense pas que chercher à peaufiner ton approche jusqu’à ce qu’elle donne un résultat acceptable vaille le coup, tu vas t’embêter avec des histoires de précision. Tu as autant de coder proprement tout de suite une vraie interpolation.

Je peux aussi faire les deux @adri1. C’est quand même incroyable qu’après tout ce temps passé à rechercher une solution, je n’arrive pas à corriger le code. Je n’ai pas envie d’abandonner comme ça. J’ai essayé avec ton pas de 0.125, il y a encore moins de points.

Je vais aller voir du côté de StackOverflow ou quoi en plus de ce topic.

C’est quand même incroyable qu’après tout ce temps passé à rechercher une solution, je n’arrive pas à corriger le code. Je n’ai pas envie d’abandonner comme ça.

Personnellement, ce que je trouve incroyable, c’est qu’au bout d’autant de temps, tu sois toujours accroché à ta première idée alors qu’elle ne donne pas de résultat satisfaisant, qu’elle est inefficace, et qu’il est très simple de faire un code efficace qui marche. Il y a un moment où admettre qu’une approche est pas la bonne est largement préférable à s’obstiner. Il ne faut pas confondre "abandonner facilement" et "prendre du recul sur la pertinence effective d’une approche".

Désolé si ça sonne un dur, mais je suis intimement convaincu qu’apprendre à changer d’approche (et toute la flexibilité intellectuelle qui va avec) est un enseignement essentiel si l’on veut apprendre à résoudre des problèmes efficacement.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte