2016-08-08 18 views
0

Ich habe eine Reihe von Daten, die ich mit der folgenden Formel passen muss: [x*sin(1/x)]^2. Ich weiß wirklich nicht, was für eine solche Funktion zu holen Koeffizienten, habe ich versucht:Matlab benutzerdefinierte Anpassung schlägt fehl

model = fittype('a*((xx/b)*sin(b/xx))^2+c','independent',{'xx'},'dependent',{'FF_norm(:,i)'}, 'coefficients', {'a','b','c'}); 
opt=fitoptions(model); 
myfit=fit(xx,FF_norm(:,i),model, opt); 
myfit 
plot(myfit,xx,FF_norm(:,i)) 

Ich bekomme immer eine Passform, die nur wie eine gerade Linie aussieht. Ich weiß, dass es wahrscheinlich besser ist, Startpunkte einzugeben, aber ich habe keine Ahnung, wie ich diese auswählen soll, weil ich nicht weiß, wie Matlab sie interpretiert und was sie eigentlich bedeuten. Wenn ich einige Zahlen versuche, gibt es mir immer Fehler.

+0

Welchen Fehler gibt es, wenn Sie versuchen, Zahlen zu verwenden? – EBH

+0

Ich habe es wieder versucht, und jetzt bekomme ich keine Fehler, aber die Passform ist einfach lächerlich. Die Daten sehen tatsächlich wie eine Parabel aus und die Anpassung ist (oder sieht so aus) eine gerade horizontale Linie. Egal welche Startpunkte ich nehme, es bleibt eine gerade Linie. Gibt es vielleicht einen anderen Weg, dies zu tun? Ich habe versucht, die kleinste quadratische Anpassung, aber auch ohne Erfolg. – Apollo

Antwort

0

Ich bin nicht sicher, was das Problem ist, auftreten, aber ich versuchte, das Problem mit diesem Code zu reproduzieren:

xx = (0.1:0.1:10).'; 
error = rand(size(xx)).*2; 
data = 5.*((xx./6).*sin(6./xx)).^2+7+error; 
model = fittype('a.*((xx./b)*sin(b./xx)).^2+c','independent',{'xx'},'dependent'... 
    ,{'data'}, 'coefficients', {'a','b','c'}); 
opt = fitoptions(model); 
opt.StartPoint = [1 1 1]; 
[myfit,gof] = fit(xx,data,model,opt) 
plot(myfit,xx,data); 

und es gab mir diese Ausgabe:

myfit = 
    General model: 
    myfit(xx) = a.*((xx./b)*sin(b./xx)).^2+c 
    Coefficients (with 95% confidence bounds): 
     a =  5.18 (4.846, 5.514) 
     b =  6.318 (5.84, 6.796) 
     c =  7.995 (7.777, 8.213) 

die recht ist richtig, und auch die Handlung sieht gut aus: fitting model

In der Tat funktioniert es nicht immer beim ersten Versuch, aber Sie sollten mehrmals versuchen, bis Du bekommst etwas Feines. Mein Weg benutzt eine while Schleife und die gof (Güte der Anpassung) Ausgabe von der fit Funktion, um nach angemessenen Parametern für das Modell zu suchen. Für das obige Ergebnis:

gof = 
      sse: 27.757 
     rsquare: 0.91357 
      dfe: 97 
    adjrsquare: 0.91178 
      rmse: 0.53493 

Dies hängt natürlich davon ab, wie viele Daten Sie haben, aber diese Tatsache ist immer wahr.

+0

Das Problem ist, dass die Anpassung nicht einmal in die Nähe des Trends der Datenpunkte kommt. Ich würde Ihnen den Plot zeigen, den ich bekomme, aber ich weiß nicht, wie man hier Zahlen einfügt. Die Werte für die Koeffizienten a, b und c sollten irgendwo bei 1, 2 * 10^(- 7) und 0 liegen. Aber das sind die Ergebnisse, die ich bekomme: Myfit = Allgemeine Modell:. Myfit (xx) = a * ((xx./b)*sin(b./xx)).^2+c Beiwerte (mit 95% Vertrauensgrenzen): a = 0,8531 (-1,863e + 06, 1,863e + 06) b = 2,793e-08 (-0,0241, 0,0241) c = -0,1468 (-1,863e + 06, 1,863 e + 06) – Apollo

+0

@Apollo Ich muss die Handlung nicht sehen, ich brauche ein Gefühl für die Daten, können Sie ein Beispiel dafür geben? – EBH