Ich habe jetzt einfach mal das Beispiel übernommen, meine Funktion eingesetzt und die x und y-werte etwas verändert. Mit der Funktion vom Beispiel funktioniert es einwandfrei. Mit meiner Funktion : f(x) = a+ b * x^c jedoch nicht.
Gruß,
Moe
Das ist die Fehlermeldung:
Error using lsqcurvefitBeispiel>@(xdata)x(1)+x(2)*xdata^x(3)
Too many input arguments.
Error in lsqcurvefit (line 202)
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Error in lsqcurvefitBeispiel (line 16)
x = lsqcurvefit(fun,x0,xdata,ydata)
Caused by:
Failure in initial objective function evaluation. LSQCURVEFIT cannot continue.
Du hast das x als Inputargument vergessen: @(x,xdata). Und x0 muss bei dir 3 Elemente haben, da du ja drei Parameter hast. Das sind die Startwerte, im Zweifelsfall alle 0 oder 1.
Wenn du keine Vorgaben hast, wie die Nutzerinteraktion erfolgen soll, würde ich die Werte genau so vorgeben lassen. Sprich, einfach die beiden Vektoren xdata und ydata definieren.
alles klar ! Das Frage ich mal meinen Prof genauer. Ich denke nämlich das mit dem "vom Benutzer vorgegeben" gemeint ist, dass die x und y-werte wie von dir gesagt und in dem beispiel im Code schon vorgegeben sein müssen. Wenn nicht muss ich mich mal wieder hier melden ^^...
Vielen Dank für die Hilfe ... der Code funktioniert sehr gut und der spuckt mir die bestmöglichsten Parameter aus. Hab es mit vielen x, y variationen ausprobiert.
Der Nutzer muss die benötigten Daten dann erstellen und beim Funktionsaufruf angeben. Du kannst ja eine Abfrage einbauen, ob die Anzahl der Elemente gleich ist:
Code:
ifnumel(xdata) ~= numel(ydata) error('You need to supply a matching number of x- and y-values.') end
Die Abfrage finde ich gut, ich würde diese Woche meinen Prof noch etwas genauer fragen, was damit so genau gemeint ist mit dem "Benutzer". Ob ich da gemeint bin ..
times = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'kx',times,fun(x,times),'b-') legend('Schnittpunkte','angepasste Exponentialkurve') title('Schnittpunkte und angepasste Exponentialkurve')
Error in Untitled7 (line 21)
x = lsqcurvefit(fun,x0,xdata,ydata)
Ich weiß wirklich nicht so genau wie das von dir gemeint ist bzw. wie ich das genau anwenden soll. Wäre das vielleicht machbar mir den Code bzw die Befehle etwas zurecht zurücken ... sodass das funktioniert.
times = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'kx',times,fun(x,times),'b-') legend('Schnittpunkte','angepasste Exponentialkurve') title('Schnittpunkte und angepasste Exponentialkurve')
times = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'kx',times,fun(x,times),'b-') legend('Schnittpunkte','angepasste Exponentialkurve') title('Schnittpunkte und angepasste Exponentialkurve')
dies ist eine Abgabeübung, bei der ich nur eine Datei im .m Format abgeben sollte.
Dein Vorschlag mit den zwei Dateien und der Speicherung der Funktion hört sich sehr gut an aber kann ich nicht ganz nachvollziehen bzw. versteh ich nicht.
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.