WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

linearer fit mit konstantem Y0 offset

 

pospiech
Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2010, 15:29     Titel: linearer fit mit konstantem Y0 offset
  Antworten mit Zitat      
Ich habe folgendes mit der matlab fitting toolbox ausprobiert:
Code:

      f_type = fittype(['M*x+' num2str(Y0)],...
            'dependent',{'y'},'independent',{'x'},...
            'coefficients',{'M'});
      [Fit Error] = fit(XAXIS(ok),DATA(ok),f_type,'Startpoint',STARTVALUES);
 


das bricht aber ab mit:
Zitat:

User supplied function ==> M*x+100
failed with the following error:

Error using ==> fittype.feval at 62
Too many inputs to FITTYPE function.


ich habe es auch mit ezfit ausprobiert
Code:

FitStartString = ['; m=' num2str(STARTVALUES(1))];

f = ezfit(XAXIS,DATA,['m*x + num2str(Y0)' FitStartString]);
 

das liefert mir aber auch nur Fehler
Zitat:

Fit: error during the fminsearch procedure


wie also macht man so etwas vollkommen simpes wie lineares fitten mit Matlab?
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 19.09.2010, 16:20     Titel:
  Antworten mit Zitat      
Hallo,

hier mal ein Minimalbeispiel für einen linearen Fit:

Code:

x = 0:10;
y = sin(x);
ft = fittype('poly1');
[cf err] = fit(x',y',ft);

plot(x,y)
hold on
plot(cf)
 


Mit einem Offset könnte man es so lösen (Fitgleichung ist a*x-0.5):

Code:

ft = fittype('a*x-0.5',...
    'dependent',{'y'},'independent',{'x'},...
    'coefficients',{'a'});
[cf err] = fit(x',y',ft); % ggf. Startwerte mit angeben

plot(x,y)
hold on
plot(cf)
 


Hoffe das hilft erstmal weiter.

MFG

Sco

Zuletzt bearbeitet von Sco am 19.09.2010, 16:34, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2010, 16:32     Titel:
  Antworten mit Zitat      
ok, jetzt möchte ich aber das y0 auf jeden Fall durch 100 geht.

Allgemeine Fits mit mx+y0 funktionieren bei mir schon. Aber ich sitzte jetzt seit 2 Stunden daran das y0 festzuhalten. Und die Matlab Doku ist leider überhaupt nicht hilfreich.

Insbesondere wenn dokumnetierte Funktionen nicht existieren

Code:

        options = fitoptions('method','LinearLeastSquares','Lower',[-Inf  100],'Upper',[Inf 100]);
        set(options, 'StartPoint',STARTVALUES);
 

liefert mir ein
Zitat:

There is no 'StartPoint' property in the 'llsqoptions' class
Private Nachricht senden Benutzer-Profile anzeigen
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2010, 16:36     Titel:
  Antworten mit Zitat      
Sco hat Folgendes geschrieben:


Mit einem Offset könnte man es so lösen (Fitgleichung ist a*x-0.5):

Code:

ft = fittype('a*x-0.5',...
    'dependent',{'y'},'independent',{'x'},...
    'coefficients',{'a'});
[cf err] = fit(x',y',ft); % ggf. Startwerte mit angeben

 


Wo ist der Unterschied zu dem 'fast identischen' Code von mir der _nicht_ funktioniert? Das -0.5 muss dabei variable bleiben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 19.09.2010, 16:54     Titel:
  Antworten mit Zitat      
Mhh, das ist ja wirklich komisch, also bei mir klappt folgender Code (der aber eigentlich identisch mit deinem ist):

Code:

x = 0:10;
y = sin(x);
Y0 = -0.5;
ft = fittype(['M*x+' num2str(Y0)],...
    'dependent',{'y'},'independent',{'x'},...
    'coefficients',{'M'});
[cf err] = fit(x',y',ft); % ggf. Startwerte mit angeben

plot(x,y)
hold on
plot(cf)
 


Also geht der Code bei dir? Vielleicht liegt es ja an deinen Vektoren, wobei dann eigentlich erst der Fehler in der darauffolgenden Zeile erscheinen sollte?

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2010, 17:03     Titel:
  Antworten mit Zitat      
Wenn Matlab jetzt auch noch fitten könnte...

das hier funktioniert
Code:

 f_type = fittype(['M*x+' num2str(Y0)],...
            'dependent',{'y'},'independent',{'x'},...
            'coefficients',{'M'});
           
        [Fit Error] = fit(XAXIS(ok),DATA(ok),f_type,'StartPoint',STARTVALUES(1));
 


liefert mir aber bei diesen Daten
Zitat:

100.0000 100.0000
98.0233 97.7064
96.0466 94.4954
94.0699 88.0734
92.0932 83.0275
90.1165 77.5229
88.1398 68.8073
86.1631 63.7615
84.1864 58.7156
82.2097 53.6697
80.2330 48.1651
78.2563 42.6606
76.2796 38.5321
74.3029 32.5688
72.3262 28.8991
70.3495 25.2294
68.3728 22.4771

eine Aufsteigende Gerade mit sehr schwacher Steigung. Vollkommen unsinnig also...

Fitte ich aber mit variablem Y0, dann funktioniert es.
(was ich aber nicht will)
Code:

if (nargin < 4)
    f_type = fittype('M*x+Y0',...
        'dependent',{'y'},'independent',{'x'},...
        'coefficients',{'M', 'Y0'});
    [Fit Error] = fit(XAXIS(ok),DATA(ok),f_type,'StartPoint',STARTVALUES);
        return;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 19.09.2010, 17:22     Titel:
  Antworten mit Zitat      
Naja das macht doch auch Sinn! Entweder du fittest Y0 (Matlab sucht den optimalen Schnittpunkt mit der y-Achse) oder du gibst ihn manuell vor. Dein Y0 ist ja 100 und entspricht somit absolut nicht dem optimalen Schnittpunkt (der wäre bei -162.4--> 262 Differenz!!!), daher der 'schlechte' Fit. Ich nahm an das die erste Spalte die X und die 2. Spalte die Y-Werte waren.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2010, 18:21     Titel:
  Antworten mit Zitat      
Sco hat Folgendes geschrieben:
Naja das macht doch auch Sinn! Entweder du fittest Y0 (Matlab sucht den optimalen Schnittpunkt mit der y-Achse) oder du gibst ihn manuell vor. Dein Y0 ist ja 100 und entspricht somit absolut nicht dem optimalen Schnittpunkt (der wäre bei -162.4--> 262 Differenz!!!), daher der 'schlechte' Fit. Ich nahm an das die erste Spalte die X und die 2. Spalte die Y-Werte waren.

Ok, Denkfehler von mir. Der Schnittpunkt in der Darstellung ist bei 100,100 un das plotte ich bei x = xaxis(1). Ich habe jetzt eine x-Achse vorgegeben die von 0 losläuft und plotte stattdessen mit der realen Achse. Dann habe ich genau das was ich möchte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 19.09.2010, 18:35     Titel:
  Antworten mit Zitat      
Zitat:

Wenn Matlab jetzt auch noch fitten könnte...


Na dann ist ja alles gut und wir sind glücklich, dass Matlab doch fitten kann Very Happy

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.