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

Plotten einer Funktion

 

mhel
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 09.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2014, 10:11     Titel: Plotten einer Funktion
  Antworten mit Zitat      
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:

1.: function err = ga_fitness_01(a)
global Daten_zur_Anpassung
Daten_zur_Anpassung = [ 12.17 1.26E-05;
13.12 2.20E-05;
14.31 2.41E-05;
15.44 2.38E-05;
16.51 2.37E-05;
17.85 2.92E-05;
19.17 3.17E-05;
20.78 4.04E-05;
22.34 4.95E-05;
24.42 6.65E-05;
26.26 7.69E-05;
28.84 1.10E-04];

[m,n] = size(Daten_zur_Anpassung);
summ = 0.0;
for i = 1:m
X = Daten_zur_Anpassung(i,1);
Y = Daten_zur_Anpassung(i,2);

y = Potenz(X,a(1),a(2));

summ = summ + abs (((Y - y)/Y)^2);
end
err = summ;

2.:
function y = Potenz(x,c,m)
y = c*(x^m);



'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. Very Happy

Vielen Dank

P.S.: Im Anhang habe ich noch ein JPG zur Verdeutlichung beigefügt.

GA.jpg
 Beschreibung:
Bild zur Verdeutlichung

Download
 Dateiname:  GA.jpg
 Dateigröße:  292.62 KB
 Heruntergeladen:  318 mal
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 15.10.2014, 08:34     Titel:
  Antworten mit Zitat      
Hallo,

ohne dieses Tool (einfach mit nlinfit) würde ich das so machen:
Code:
Daten_zur_Anpassung = [ 12.17 1.26E-05;
13.12 2.20E-05;
14.31 2.41E-05;
15.44 2.38E-05;
16.51 2.37E-05;
17.85 2.92E-05;
19.17 3.17E-05;
20.78 4.04E-05;
22.34 4.95E-05;
24.42 6.65E-05;
26.26 7.69E-05;
28.84 1.10E-04];

% 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))
 

Die Parameter lauten dann
Code:
p_opt =

   0.000000016920192   2.593929433503956

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...

Viele Grüße,
Nras.

gm_opt.png
 Beschreibung:

Download
 Dateiname:  gm_opt.png
 Dateigröße:  4.21 KB
 Heruntergeladen:  339 mal
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.