2015-11-01 1 views
0

J'ai quelques données (deux vecteurs de même taille X et Y) et voudrais adapter une fonction exponentielle comme f(x)=a+(b-a)*exp(-c*x) à ces données par MATLAB. Mon but est en fait de trouver les coefficients a, b et c. J'ai trouvé fit(X,Y,'exp2') et fit(X,Y,'exp1','StartPoint',[x0,y0]) dans le manuel MATLAB qui sont un peu différents de ce que je cherche.ajustement de la courbe exponentielle avec 3 coefficients

Répondre

2

Vous pouvez adapter à l'aide d'un custom equation:

f = fit(x, y, 'a+(b-a)*exp(-c*x)') 
+0

Merci! Je l'ai fait, mais j'ai reçu un avertissement sur le point de départ qui est choisi au hasard! Voici le message: Avertissement: Le point de départ n'est pas fourni, en choisissant un point de départ aléatoire . > Dans Avertissement> Warning.throw à 30 In fit> iFit à 299 In fit à 108 – Amir

+1

@Amir avez-vous lu la documentation liée? vous pouvez spécifier le point de départ en utilisant 'fit (x, y, 'a + (b-a) * exp (-c * x)', 'StartPoint', [x0, y0])' –

+0

Oui. Mais je ne suis pas sûr de choisir un point ou quel point de mon ensemble de données. Est-ce que c'est juste un point utile pour faire une interpolation plus rapide (comme une supposition initiale pour les itérations)? Ou peut-il affecter la fonction résultante et est important? – Amir

1

Une grande chose que vous pouvez faire est d'utiliser l'application « Ajustement de la courbe » dans Matlab. vous pouvez le trouver dans APPS, dans la section "Maths, statistiques et optimisation". Là-bas, vous pouvez choisir vos données x et y et la fonction que vous voulez faire passer par-dessus (exponentielle ou même personnalisée). Ensuite, vous pouvez voir les résultats d'ajustement sur un tracé, les paramètres d'ajustement sont également affichés.

Si vous êtes satisfait des résultats et que vous souhaitez les utiliser dans un code, appuyez simplement sur le code généré sous l'onglet Fichier. Curve fitting app

vous pouvez voir les détails dans cette capture d'écran j'ai pris. Après avoir appuyé sur le bouton Générer le code, Matlab créera une fuction qui donnera le même résultat. ce que je veux faire est de simplement copier les parties que j'ai besoin dans ce cas:

 enter code here 
    [xData, yData] = prepareCurveData(x, y); 

    % Set up fittype and options. 
    ft = fittype('a +(b-a)*exp(-c*x)', 'independent', 'x', 'dependent', 'y'); 
    opts = fitoptions('Method', 'NonlinearLeastSquares'); 
    opts.Display = 'Off'; 
    opts.StartPoint = [0.957166948242946 0.485375648722841 0.8002804688888]; 

    % Fit model to data. 
    [fitresult, gof] = fit(xData, yData, ft, opts); 

comme vous pouvez le voir Matlab ajoute les détails nécessaires et vous pouvez maintenant accéder à l'aide de paramètres d'ajustement fitresult. par exemple-> fitresult.a