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
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...
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?
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
lol, danke für die Glückwünsche
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
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'};
% 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))])
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
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.