Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

étudiant confus

Explication du problème: j'ai des points avec des coordonnées (x, y, z) à deux + moments distincts. Pour plus de commodité, ils peuvent être imaginés comme des points irrégulièrement espacés le long de la surface d'un paraboloïde inversé. Le paraboloïde présente une épaisseur minimale. Le paraboloïde change légèrement de forme avec le temps (comme un ballon qui se gonfle) et quand il le fait, tous les points bougent. En soustrayant les coordonnées à time2 - time1, je peux obtenir les vecteurs de déplacement à chaque point.

Il est important de noter (et je soupçonne que cela pourrait être la source du problème) qu'au premier point dans le temps, les coordonnées x et y vont de 0 à 2000, et les coordonnées z sont toutes dans une plage plus étroite - disons 350 à 450. Lors de la déformation, chaque point a une composante x de déplacement, une composante y et une composante z. Les composantes x et y sont petites (~ 50 au plus), tandis que la composante z est la plus grande (va jusqu'à 400 près du centre, beaucoup moins près des bords).

En utilisant les moindres carrés mobiles pondérés à l'emplacement de chaque point, j'essaie d'ajuster les composantes des déplacements à une surface polynomiale du deuxième degré en fonction des coordonnées x, y, z d'origine du point: par exemple. x composante de

displacement = ax^2 + bxy + cx + dy^2.. + hz^2 + iz + j

J'utilise la lsqrfonction dans MATLAB, comme ça, en boucle sur chaque point pour chaque intervalle de temps:

Ux = displacements{k,1}(:,1);
Cx = lsqr((adjust_B_matrix'*W*adjust_B_matrix),(adjust_B_matrix'*W*Ux),1e-7,10000); 

West la matrice de poids, et adjust_B_matrixest la matrice de toutes les coordonnées (x, y, z) au temps 1, décalées de sorte qu'elles soient toutes centrées autour du point auquel j'essaie d'adapter la fonction.

Qu'est-ce qui ne va pas? Cela ne fonctionne tout simplement pas - une fois que j'ai les fonctions, elles sont recentrées autour des coordonnées réelles des points. Mais une fois que j'ai tracé les points résultants (pointx initial + déplacementx, pointy initial + déplacementy, point initialz + déplacementz) en branchant les coordonnées au temps 1 dans les fonctions maintenant découvertes, il crache juste une surface qui ressemble à la surface au temps 1.

Qu'est-ce qui ne va pas? Choses que j'ai essayées:

  1. Ce n'est pas un problème avec le code lui-même - j'ai généré de «fausses» données en utilisant une grille de points et cela a parfaitement fonctionné. Les emplacements prévus ont été superposés aux coordonnées réelles et j'ai pu récupérer la fonction avec laquelle j'ai commencé. Mais dans mon exemple d'essai, j'ai utilisé x, y, z de 0 à 5, régulièrement espacés.
  2. Le montage global fonctionne (mais j'ai besoin d'un montage local ...). J'ai essayé la boîte à outils d'ajustement de courbe de MATLAB et j'ai juste essayé d'ajuster l'un des déplacements aux coordonnées x et y uniquement, globalement. Cela a parfaitement fonctionné.
  3. Je pense que je ne devrais pas avoir un problème de matrice singulier car j'utilise un grand rayon (environ 75-80) points dans les calculs, quelque peu dispersés dans l'espace 3D.

Suspicions: je pense que cela a à voir avec la distribution inégale des coordonnées initiales (x, y, z), mais je ne sais pas pourquoi ni comment résoudre le problème, ni même quelle méthode je peux utiliser.

Si vous avez lu jusqu'ici, merci beaucoup. Tout avis serait grandement apprécié.

Figure pour référence: vert = points prédits au temps 2. Chevauchant principalement avec du rouge, les coordonnées réelles des points au temps 1. bleu sont les coordonnées correctes des points au temps 2 (c'est là que les verts devraient être si les choses fonctionnaient ).

image

Lien mis à jour pour les fichiers: http://a.tmp.ninja/eWfkNmFZyTFk.zip Contenu - code, exemples de données (veuillez charger les fichiers .mat).

compétence

Je ne peux pas accéder au code que vous avez publié, alors voici quelques suggestions générales.

Il semble que la boîte à outils d'ajustement de courbe dispose d'outils qui font exactement ce que vous recherchez, consultez le bas de cette page: https://www.mathworks.com/help/curvefit/polynomial.html#bt9ykh .

Il semble que quelle que soit la fonction que vous avez apprise, le déplacement est tout simplement très petit ou nul partout. Je soupçonne que le problème n'est qu'une faute de frappe / erreur mineure de votre part quelque part dans votre pipeline, la traduction éventuelle de ce que vous devez travailler avec la fonction fit révélera le problème.

Cela ne devrait vraiment pas être le problème, mais à l'avenir, si vous aviez des données beaucoup plus déséquilibrées, vous pourriez tout normaliser avant de procéder à l'ajustement (x_norm = (x - x_mu) / x_std).

De plus, je ne pense pas que ce soit votre problème non plus, mais vous pouvez vérifier si votre matrice est proche du singulier en vérifiant le numéro de condition à l'aide de la fonction cord (). Vous pouvez donc vérifier cond (Adjust_B_matrix ' W Adjust_B_matrix). Deuxièmement, si vous consultez la documentation de lsqr, il existe une option pour obtenir un indicateur de retour de débogage, cela vaut également la peine d'être vérifié.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Je rencontre des problèmes avec la fonction de déplacement d'élément pour déplacer plusieurs fichiers dans des dossiers séparés

Obtenir des valeurs p ou des intervalles de confiance pour les coefficients d'ajustement des moindres carrés non négatifs (nnls)

Créer dynamiquement des définitions d'ajustement de courbe scipy pour les séries de Fourier

Comment calculer la variance de l'estimateur des moindres carrés en utilisant la décomposition QR dans R?

Ajout d'une courbe de tendance des moindres carrés pondérés dans ggplot2

L'ajustement des moindres carrés pour les points en 2D ne passe pas par un axe symétrique

Eslint signale des problèmes de configuration d'eslintrc pour les configurations de dépendance

Ajustement des données par les moindres carrés dans MATLAB

Convergence d'une très grande optimisation des moindres carrés non linéaires

Ajustement exponentiel avec le Python des moindres carrés

Déplacement des problèmes de Sprite

Démystification du nom de la fonction de Pytorch: gels pour l'estimation des moindres carrés

Trouver la régression linéaire des moindres carrés pour chaque ligne d'un dataframe en python à l'aide de pandas

Portage de Makefile vers Jenkinsfile, mais ayant des problèmes avec les variables d'environnement

Contraindre l'ajustement des moindres carrés en python

Tracer les moyennes des moindres carrés pour les groupes de niveaux de facteurs

Python - faire l'ajustement des moindres carrés sur les données de séries chronologiques?

Beautiful Soup utilisant html.parser ayant des problèmes pour décoder les guillemets

fakeXrmEasy pour les problèmes d'initialisation des tests CRM

trier les coordonnées des points de carrés d'une liste en python

Utilisation des fonctions NumPy dans Cython pour l'ajustement des moindres carrés des éléments du tableau

Rouleau de dés ayant des problèmes avec la deuxième boucle while

jq ayant des problèmes pour échapper les traits d'union dans la clé de niveau supérieur

Régression des moindres carrés avec des poids d'échantillon sur les modèles statistiques

problèmes d'appel des informations de firebase pour définir les titres des boutons

Ajustement des moindres carrés de la fonction de densité cumulée à certains quantiles

Forcer l'ajustement d'une spline sur des points extrêmes donnés

Débutant ayant des problèmes de tableau

Obtenir une série de distributions normales à partir d'une régression des moindres carrés

TOP liste

  1. 1

    Comment exécuter un fichier python avec des droits d'administrateur dans pycharm

  2. 2

    obtenir le nombre de marqueur affiché sur la carte

  3. 3

    comment obtenir un objet de requête dans les tests unitaires de django?

  4. 4

    Microsoft.WebApplication.targets

  5. 5

    Exécuter la requête externe pour chaque date obtenue à partir de la requête interne

  6. 6

    comment convertir une chaîne en un tuple dateutil jour de la semaine sans utiliser eval

  7. 7

    Dans les modèles Hugo, comment vérifier la longueur du tableau de fichiers JSON?

  8. 8

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  9. 9

    Comment ajouter un texte dans un texte Python/Tkinter

  10. 10

    mongo kafka connect source

  11. 11

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  12. 12

    Recherche de dicton Jinja2 à l'aide d'une clé variable

  13. 13

    Vérifier la longueur du nombre à partir du message, puis utiliser la valeur dans l'instruction

  14. 14

    Laravel 8: Attempt to read property "id" on null

  15. 15

    Comment obtenir tous les champs d'un objet (y compris sa superclasse), à l'aide de l'API Mirrors de Dart?

  16. 16

    Comment convertir une chaîne en tuple en utilisant `reads`?

  17. 17

    Aide de variable de débogage pprint jinja2

  18. 18

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  19. 19

    mauvaise valeur pour le type long: - Postgresql, Hibernate, Spring

  20. 20

    définir une propriété pour chaque nœud dans neo4j

  21. 21

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

chaudétiquette

Archive