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

Minima finden ohne Funktion

 

equi
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 07.03.2017, 10:29     Titel: Minima finden ohne Funktion
  Antworten mit Zitat      
Hallo Zusammen,

ich befasse mich erst seit neuem mit Matlab bzw. auch Octave.

Und zwar möchte ich die Y-Werte der Minima einer Kurve ermitteln.

Zur Übung habe ich frei erfundene Werte aus einer txt Datei eingelesen und dann mit einem Spline interpoliert (siehe Anhang). Die Maxima konnte ich ermitteln. Die X-Werte der Minima konnte ich ebenfalls ermitteln. Nur bekomme ich hierzu die Y-Werte nicht heraus.

Das Problem hierbei ist alle Werte sind Positiv und ich besitze keine Formel.

in diesem Bereich funktioniert noch alles:

Code:

m=(diff(ys))./(diff(xi));
vzw=sign(m);

%max
maxima_x = (find((diff(vzw)) < 0));
maxima_y = (findpeaks(ys));
Maxima=[maxima_x,maxima_y]

%min
minima_x = (find((diff(vzw)) > 0))
 


Habe bereits auf mehrere Wege versucht meine Y-Werte von meinem Minima zu ermitteln aber nichts Funktioniert Very Happy

Code:
minima_y = ys(minima_x)

so Funktioniert es nicht, da die Fehler Meldung kommt damit es Integer/ganze Zahlen sein muss

Code:

minima_y = findpeaks(-ys)

%oder

minima_y = findpeaks(abs(-ys))
 

Funktioniert ebenfalls beides nicht, da ich hier meinen Vektor negiere
--> beim ersten kommt die Fehlermeldung: Data contains negative values. You may want to "DoubleSided" Option
--> beim zweiten kommt wieder das selbe raus (logischer weise)Very Happy

Kann mir irgenjemand weiterhelfen?
Bin auch dankbar für Tipps, wenn ihr wisst wie ich die anderen Sachen verbessern könnte Smile

Vielen Dank schonmal:) und Entschuldigung für den Aufsatz, ich hoffe es ist verständlich:D

Test.PNG
 Beschreibung:

Download
 Dateiname:  Test.PNG
 Dateigröße:  15.77 KB
 Heruntergeladen:  361 mal
Private Nachricht senden Benutzer-Profile anzeigen


equi
Themenstarter

Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 29.03.2017, 07:50     Titel:
  Antworten mit Zitat      
Da sich mein Problem noch nicht gelöst hat wollte ich mal nochmals nachfragen Very Happy

Lässt sich das Minimum (in dem fall dann auch das Maximum) über den Vorzeichenwechsel der Steigung ermitteln?
Den Vorzeichenwechsel der Steigung für einen Tiefpunkt bekomme ich ja durch:

Code:

m=(diff(ys))./(diff(xi));
vzw=sign(m);
minima_x = (find((diff(vzw)) > 0))


Nur die frage ist wie bekomme ich den dazu nötigen ys-Wert.

Am Tiefpunkt (wie auch am Hochpunkt) ist ja die Steigung=0;
Lässt sich das irgendwie kombinieren damit ich sagen wenn
" (find((diff(vzw)) > 0))" gilt damit er den Punkt suchen soll wo "m=0" und mit den dazugehörigen ys-Punkt ausgibt?

Da ys ja ein interpolierten Spline ist bin ich mir nicht sicher ob die ausgegeben Punkte immer auch beim HP/TP exakt sind, sprich wenn m=0 ist, ist das ein Problem?

Vielen Dank

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Lukass

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2017, 09:07     Titel:
  Antworten mit Zitat      
Hallo,

im Prinzip bekommt man doch den Y-Wert, wenn du schaust, welchen Funktionswert deine Funktion am Index deines X-Wertes hat, also z.B.
Code:
ys(x_index)

Du kannst beispielsweise auch findpeaks nutzen um die lokalen Minima zu bekommen, indem du vorher deine Funktion umdrehst, also mit -1 multiplizierst.

Gruß Lukas
 
equi
Themenstarter

Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 03.04.2017, 07:30     Titel:
  Antworten mit Zitat      
Hallo Lukass,

erstmals vielen dank für deine Antwort.

hatte leider bereits schon beide Möglichkeiten ausprobiert aber haben nicht so funktioniert Very Happy

wenn ich
Code:
minima_y = ys(minima_x)


eingebe, kommt die Fehlermeldung: ys(2.025): subscripts must be either integers 1 to (2^31)-1 or Logicals

und mit der Funktion umdrehen:
Code:
ys_neg=(ys*-1)
minima_y2 = findpeaks(ys_neg)

kommt folgende Fehlermeldung: Data contains negative values. You may want to "DoubleSided" Option

Grüße[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Lukass

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2017, 10:21     Titel:
  Antworten mit Zitat      
Hallo,

also bei mir funktionieren beide Möglichkeiten ohne Problem. Warum es bei dir Fehler gibt, kann ich mangels fehlender Daten nicht sagen.
Schau dir mal folgende beide Beispiele an, eventuell findest du dann deinen Fehler in deinem Code:
Möglichkeit 1:
Code:
x = -5:1e-3:5;
y = 0.5*x.^3-2*x.^2;
plot(x,y)
m=(diff(y))./(diff(x));
vzw=sign(m);
xmin_indx = (find((diff(vzw)) > 0));
ys = y(xmin_indx);
xs = x(xmin_indx);
hold on;
plot(xs,ys,'xb');


Möglichkeit 2: (findpeaks)
Code:
x = -5:1e-3:5;
y = 0.5*x.^3-2*x.^2;
plot(x,y)
[ys,xs] = findpeaks(-y,x);
hold on;
plot(xs,-ys,'xb');


Gruß Lukas
 
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.