Verfasst am: 10.10.2014, 10:11
Titel: Plotten einer Funktion
Hallo Ihr Lieben,
ich verwende das Optimierungstool "optimtool ga" um eine Funktionsverlauf an Messdaten anzupassen, dabei soll die Summe aller Messpunktabstände zum Funktionsverlauf minimal werden.
Hierfür habe ich Folgende zwei Funktionen erstellt:
'X' und 'Y' sind die Koordinaten der Messpunkte ("Daten_zur_Anpassung")
'y' sind die Funktionswerte in Abhängigkeit der in die Funktion eingesetzten Messwerte 'X'
'summ' drückt aus wie gut die Funktion die messpunkte abbildet (wie groß die Abstände von Messpunkten zur Funktion sind)
Dieser Abstand der Funktion zu den Messpunkten soll durch das optimtool ga minimiert werden. Dafür wird die Fitnesfunktion "ga_fitness_01" in das Optimierungstool eingegeben. Hierbei werden 'c' und 'm' angepasst.
Dies Funktioniert alles einwandfrei.
JETZT DIE EIGENTLICHE FRAGE:
Wie kann ich die Messpunkte X und Y als Punkte Plotten und die Potenzfunktion y = c*(x^m) als Kurve?
Ich habe leider keine Ahnung wie das funktionieren soll, da ich durch die Schleife immer nur einzelne Werte Punkte pro Durchgang der Schleife habe. Wie kann er sich die durchlaufene punkte behalten und alle plotten?
Ich hoffe ich habe es einigermaßen verständlich rüber gebracht, ich bin blutiger Programmieranfänger.
Vielen Dank
P.S.: Im Anhang habe ich noch ein JPG zur Verdeutlichung beigefügt.
% Daten als Vektoren
X = Daten_zur_Anpassung(:,1);
Y = Daten_zur_Anpassung(:,2);
% modelfunction und optimierung
model = @(p, x) p(1)*(x.^p(2));
p0 = [0, 0]; % Startwerte
p_opt = nlinfit(X,Y, model, p0);
% % ohne nlinfit (statistics toolbox) % e = @(p, x) sum((Y-model(p,X)).^2); % p_opt2 = fminsearch(e, p0);
figure % Daten als schwarze Kreise plot(X,Y,'ko', 'markerfacecolor','black') hold on
% Fit als rote Linie
x = linspace(min(X), max(X),100);
plot(x, model(p_opt, x), 'r-', 'linewidth',2) legend('data', sprintf('y = %.4f*x^{%.4f}', p_opt))
Es ist dann auch der Part für den Plot dargestellt, da das ja anscheinend das Problem war. Bei mir kommt folgende Warnung:
Code:
Warning: Rank deficient, rank = 1, tol = 1.082230e-14.
> In nlinfit>LMfit at 300
In nlinfit at 162 Warning: The Jacobian at the solution is ill-conditioned, and some model parameters may not be estimated well (they are not
identifiable). Use caution in making predictions.
> In nlinfit at 224
Das kann was bedeuten, muss es aber nicht. Falls das Ergebnis dieser Optimierung mit nlinfit stark von dem von dir benutzten Tool abweicht, kannst du ja dennoch einfach die Parameter benutzen, die du da herausbekommst und nur den plot-part hiervon nehmen. Das Ergebnis der Visualisierung lade ich mal mit hoch. Sieht ja ganz okay aus, meiner Meinung nach...
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.