2010-06-30 4 views

Répondre

1

Il est possible de reformuler le problème pour lsqcurvefit, mais pourquoi ne pas utiliser directement lsqnonlin, puisque lsqcurvefit n'est rien d'autre qu'un emballage pour lsqnonlin?

Supposons que vous avez des tableaux xx, yy, zz, qui définissent votre surface 2D, de sorte que surf(xx,yy,zz) trace la surface.

Ensuite, vous créez une fonction objectiveFunction(params,xx,yy,zz) qui estime zz pour à chaque coordonnée tel que défini dans xx et yy avec des paramètres définis dans params, et qui renvoie un vecteur de la différence entre zz et la sortie de fonction.

Enfin, vous attribuez au tableau initialGuess une conjecture initiale pour les paramètres, et que vous appelez lsqnonlin comme ceci:

estimatedParameters = lsqnonlin(@(params)objectiveFunction(params,xx,yy,zz),initialGuess) 
0

Vous devez définir ce que vous entendez en ajustant une fonction à un tableau 2-d . Souhaitez-vous ajuster une certaine surface en fonction des indices de ligne et de colonne dans ce tableau?

Si tel est le cas, générez alors les tableaux rectangulaires des indices de ligne et de colonne à l'aide de meshgrid. Maintenant, vous pouvez les utiliser dans votre fonction. Passez-les directement à votre fonction objectif à l'aide d'une poignée de fonction. N'oubliez pas d'utiliser les opérateurs élémentaires pour la multiplication (. *), La division (./) et les puissances (. ^) Dans votre fonction.

Le choix du modèle est votre choix bien sûr. En ce qui concerne l'utilisation de lsqcurvefit (par opposition à lsqnonlin), ils sont essentiellement les mêmes, mais avec une interface légèrement différente.

Questions connexes