J'ai une gamme de données qui, lorsqu'elles sont tracées, ressemblent à ceci.
P>
Je dois utiliser la commande J'ai donné l'équation Mon ajustement exponentiel finit par apparaître polyfit code> pour déterminer le meilleur exponentiel d'ajustement pour l'heure à peu près entre
1.7 code> et
2.3 code>. Je dois également comparer ce exponential em> adapté à un simple linéaire em> p>
temp (t) = temp0 * exp (- (t-t0) / tau) code>, où
t0 code> est le temps correspondant à la température
temp0 code> (je peux sélectionner où commencer mon raccord de courbe , mais il doit être confiné à la zone environ entre 1,7 et 2,3). Voici ma tentative. P>
. Mon ajustement linéaire ressemble à
. (pratiquement identique). Qu'est-ce que je fais mal? Les deux devraient-ils être si similaires? On me dit que
CréditChift Code> peut aider, mais je ne pouvais pas saisir l'applicabilité de la commande après avoir lu le fichier d'aide. p> p>
4 Réponses :
Si je comprends bien, les variables temps et temporisez que vous utilisez dans le polyfit contiennent toute la valeur (de 1,5 à 2,5). Donc, vous voudrez peut-être limiter la valeur du temps et de la température de 1,71 à 2.3 avant de calculer le polyfit (il s'agit actuellement de calculer le polyfit de 1,5 à 2,5, pourquoi la ligne n'est pas alignée sur les points de données).
p = polyfit(time, log(Temp), 1)
Tu as raison M_Power! Merci. J'ai téléchargé les nouveaux fits. Si l'exponentiel et l'ajustement linéaire semblent si similaires? Merci encore!
Comme je l'ai mentionné dans les commentaires, il y a une différence entre l'ajustement d'un modèle linéaire dans le log-espace vs associé à un modèle non linéaire (à la fois dans le sens des moindres carrés).
Il y a une belle p> p>
Les choses se comportent tout comme vous vous attendez. Le problème est que la fonction que vous essayez d'installer n'est pas une très bonne approximation des données. Oiffeuse de la courbe, il semble que la partie exponentielle de la courbe a tendance à asymptoter une valeur autour de 16; Mais la fonction que vous utilisez sera finalement tendance à une température de 0. Ainsi, ajustée à une partie qui va de 22 à 16 vous donnera une relation presque linéaire. Pour illustrer cela, j'ai écrit quelques lignes de code qui correspondent approximativement aux points de données que vous avez - et qui montrent comment différentes fonctions (une qui tend à 0, et une autre qui tend à 16) vous donnera une forme très différente de la courbe. La première (votre fonction d'origine) est presque linéaire entre les valeurs T de 22 et 16 - il ressemblera donc à l'ajustement linéaire.
Je suggère de penser à la forme "droite" de la fonction à adapter - Qu'est-ce que le Physique sous-jacente qui vous fait choisir une forme particulière? Obtenir ce droit est essentiel ... p>
Voici le code: p> Il résulte de la parcelle suivante: p> < img src = "https://i.stack.imgur.com/zr8ns.png" alt = "Entrez la description de l'image ici"> p> Je conclus de ceci que la raison principale que vos parcelles semblent si similaires que la fonction que vous essayez d'installer est presque linéaire sur le domaine que vous choisissez - un choix de fonction différent sera une meilleure correspondance. P> P>
Merci beaucoup, Floris. J'apprécie votre réponse. On m'a dit de comparer les deux formes de la courbe-ajustement et d'identifier celui qui correspond aux données «mieux». J'avais supposé que les formulaires seraient plus distincts et, quand ils n'étaient pas, j'ai commencé à douter de mon code. Votre réponse est très claire et informative, et je vous remercie.
Utilisez
polyfit(x,y,n)
Le lien d'@Amro semble avoir été brisé par les mathworks. La version mise à jour est ici .
Merci @horchler, voici le lien mis à jour à l'exemple que j'ai déjà mentionné: pièges dans des modèles non linéaires ajustés en transformant en linéarité