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

Fixe Parameter beim Fitten? (Curve Fitting Toolbox)

 

hadi
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2008, 15:14     Titel: Fixe Parameter beim Fitten? (Curve Fitting Toolbox)
  Antworten mit Zitat      
Hallo!
Wie ist es möglich, beim Fitten von Kurven mittels der Curve Fitting Toolbox Parameter fix zu halten? Ich habe eine GUI geschaffen, bei der der User die Möglichkeit haben soll, die Fitparameter als nicht variierbar zu setzen. Die Funktion selbst möchte ich nicht ändern (dass ich die Werte da rein scheib).
Mein bisheriger Code (Funktion vereinfacht):
Code:

% voher einlesen von temporären Variablen...
f='A*w^2+G';
lBounds=[tempAmin tempGmin];
uBounds=[tempAmax tempGmax];
startvalues=[tempAstart tempGstart];
fopts=fitoptions('Method','NonLinearLeastSquares','Lower',lBounds,'Upper',uBounds,'StartPoint',startvalues,'MaxIter',20);
ftype=fittype(f,'independent',{'w'});
ff=fit(w_values,f_values,ftype,fopts);
cv=coeffvalues(ff);
% zur Auswertung...

Und der User soll eben für A und G entweder Startwerte und Grenzen oder aber Fixwerte für eine der Variablen eingeben können.
Vielen Dank & schöne Grüße, Hadi
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 06.08.2008, 15:42     Titel:
  Antworten mit Zitat      
Moin,

ich hab zwar kaum mit der Toolbox gearbeitet, aber vom logischen Verständnis her würde ich sagen, dass einfach lbound und ubound auf den Startwert gesetzt werden müssen, oder lieg ich da falsch?!

Entweder den User das so eingeben lassen, oder eine Abfrage machen, wenn keine Grenzen eingegeben wurden diese fest auf den Startwert setzen oder über eine checkbox die Entscheidung dem User überlassen - je nach dem...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
hadi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2008, 15:46     Titel:
  Antworten mit Zitat      
Hi!
Danke für die Antwort. Die Idee hatte ich auch schon (sorry, hatte vergessen, das zu erwähnen), leider gibt mir Matlab dann eine Fehlermeldung aus:

Equal upper and lower bounds not permitted.

Wenn ich Startwert+/-realmin mach, um einen winzigen Bereich festzumachen, kommt die gleiche Fehlermeldung.
Noch Ideen?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 06.08.2008, 16:03     Titel:
  Antworten mit Zitat      
Ich hab grad mal in die Hilfe geschaut - Was hat es mit der fittype-Option 'problem' auf sich?
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
hadi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2008, 16:33     Titel:
  Antworten mit Zitat      
Danke dir, das könnte es wirklich sein. Hab ich bisher noch nicht gefunden gehabt. Ich versuch das mal zu implementieren, könnte aber noch etwas dauern. Wenns läuft, poste ich es hier.
Danke nochmal und schönen Abend! Hadi
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin
Admin

Admin



Beiträge: 652
Anmeldedatum: 16.06.07
Wohnort: Bietigheim-Bissingen
Version: ---
     Beitrag Verfasst am: 06.08.2008, 20:28     Titel:
  Antworten mit Zitat      
Herzlichen Glückwunsch haddi Cool

Du Bist das 1000. Mitglied im Forum!
Wünsche dir viel Spaß und viel erfolg auf goMatlab.de

Liebe Grüße Martin

PS: Etwas Off-Topic aber sowas muss gefeiert werden Laughing
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.08.2008, 07:45     Titel:
  Antworten mit Zitat      
[OT] Von mir auch... Ich hatte gestern auch schon überlegt was zu schreiben, aber ich dachte mir ich lass mal dem Martin den Vortritt Wink [/OT]

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
hadi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2008, 13:17     Titel:
  Antworten mit Zitat      
lol, danke für die Glückwünsche Smile
Sorry, dass der Post erst so spät kommt... Hier ist auf jeden Fall meine Lösung des Problems.
Der Tipp mit problems war goldrichtig, man muss dann noch die Variablen auseinandersortieren und am Ende wieder zusammen, für alle, die das irgendwann mal brauchen, hab ich hier ein kleines Beispiel angehängt.
Schöne Grüße und @Forum: noch viele weitere User Wink
Hadi

Code:

% "Messwerte" für eine Funktion ermitteln
f='a+b*x+c*x^2';
xval=(0:0.5:10)';
yval=3+5*xval+0.1*xval.^2;
varlist={'a','b','c'};

% Einstellungen
tempmin=[0 0 0];tempmax=[5 5 5];tempstart=[1 2 3];
isfixed=[false true false];

% Werte trennen (Variablen/Parameter)
minVal=[];maxVal=[];startVal=[];tempc=[];
for cnt=1:length(isfixed)
    if isfixed(cnt)==true
        tempc=[tempc cnt];  % Array, in dem alle Indizes der festen Werte stehen
    else
        startVal=[startVal tempstart(cnt)];    % Array mit Startwerten der VARIABLEN
        minVal=[minVal tempmin(cnt)];          %    "   "  Minwerten    "      "
        maxVal=[maxVal tempmax(cnt)];          %    "   "  Maxwerten    "      "
    end
end
cVal=cell(1,length(tempc));varnames=cell(1,length(tempc));
for cnt=1:length(tempc)
    cVal{cnt}=tempstart(tempc(cnt));    % Cellarray mit den Werten der konstanten Parameter
    varnames{cnt}=varlist{tempc(cnt)};  %     "      "   "  Namen   "       "         "
end

% eigentlicher Fit
ftype=fittype(f,'independent',{'x'},'problem',varnames);
fopts=fitoptions('Method','Nonlinearleastsquare','Lower',minVal,'Upper',maxVal,'StartPoint',startVal);
ff=fit(xval,yval,ftype,fopts,'problem',cVal);

% Fit auswerten
v=coeffvalues(ff);
c=probvalues(ff);

% Werte wieder zusammenführen
countFixed=0;countCoeff=0;
ValList=zeros(1,length(isfixed));
for cnt=1:length(isfixed)
    if isfixed(cnt)==true
        countFixed=countFixed+1;
        ValList(cnt)=c(countFixed);
    else
        countCoeff=countCoeff+1;
        ValList(cnt)=v(countCoeff);
    end
end

% noch graphische Darstellung...
yfit=ValList(1)+ValList(2)*xval+ValList(3)*xval.^2;
plot(xval,yval,'x')
hold on
plot(xval,yfit)
legend('Messwerte',['Fitkurve (a=' num2str(ValList(1)) ',b=' num2str(ValList(2)) ',c=' num2str(ValList(3))])
 
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 - 2024 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.