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

Lokale Minimas finden

 

Sky
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 10.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2012, 18:19     Titel: Lokale Minimas finden
  Antworten mit Zitat      
Hallo Leute,
nach dem das mit der ersten Frage so gut geklappt hat hier gleich mein nächstes Problem.

Ich habe zwei einzelne Zeilenvektoren mit jeweils 10.000 Messpunkten. Diese beiden plotte ich dann und erhalte somit einen Graphen.
Nun möchte ich gerne die Anzahl der Minimas dieser Graphik mathematisch berechnen lassen und nicht nur so "ungefähr" ablesen.

Ich habe hier im Forum diesen Code gefunden:

minima=x(find(diff(sign(diff([0,x,0])))>0));

Das liefert mir aber wenn ich für x den Vektor einsetzte folgenden Fehler:
Error using horzcat
CAT arguments dimensions are not condsten

Ich habe die Spaltenvektoren vorher zu einem Zeilenvektor transponiert und dann die beiden einzelnen Vektoren zu einem zusammengefasst, weil ich ja mit den beiden zusammen auch die Funktion plotte.

Jetzt ist eure Hilfe gefragt.

MFG
Private Nachricht senden Benutzer-Profile anzeigen


n.force
Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 18.04.2012, 18:44     Titel:
  Antworten mit Zitat      
Du hast ja in deinem Vektor nur Messpunkte. Deshalb fallen Funktionsoperationen aus. Du kannst du einer schleife bauen, die immer guckt ob das nächste element noch kleiner ist, als das kleinste davor

Code:

a = ein wert
for i=1:10000
     if Vektor(i) < a
     Vektor(i) = a
end
a ausgeben
 


So ungefähr
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.04.2012, 20:48     Titel:
  Antworten mit Zitat      
Hallo,

die Strategie sieht nicht schlecht aus, auch wenn ich vom Anfügen der Nullen wenig halte. Beim Einsetzen scheint aber wohl was schiefgegangen zu sein. Welche Dimensionen hat der Vektor, den du für x einsetzt? x ist in dem Code ein Zeilenvektor.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 10.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2012, 11:20     Titel:
  Antworten mit Zitat      
Ah da wird wohl der Fehler liegen. Der Vektor den ich da habe ist ein Spaltenvektor. Werde es mal ausprobieren und dann eine Rückmeldung geben.
MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
Sky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 10.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2012, 10:27     Titel:
  Antworten mit Zitat      
Ich habe gesehen das ich eine Funktion gegeben habe auf der das alles aufbaut.

syms Io1 Io2 Iph I Rs Rp U Ut

I=Iph-Io1*(exp((U+I*Rs)/Ut)-1)-Io2*exp((U+I*Rs)/Ut)-1)-(U+I*Rs)/Rp;

diff(I,U)

crit_pts=solve(ans)

So die erste Ableitung ist für Matlab kein Problem, aber wenn ich dann versuche die Extrempunkte zu bestimmen kommt folgende Fehlermeldung:

Warning: Explicit solution could not be found
crit_pts=[empty sym]

Muss ich das dann nummerisch Ableiten? Und wenn ja wie geht das.

MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.04.2012, 10:53     Titel:
  Antworten mit Zitat      
Hallo,

ich würde die Ableitung schon noch symbolisch bilden.
Dann (oder auch davor; sollte keinen Unterschied machen) mit SUBS die Werte für die anderen Variablen einsetzen, mit MATLABFUNCTION in ein Function Handle umwandeln und dann mit FZERO oder FSOLVE die Gleichung lösen.

Oder, da es anscheinend um eine Minimum-/Maximumsuche geht, direkt mit beispielsweise FMINUNC oder FMINBND arbeiten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 10.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2012, 14:26     Titel:
  Antworten mit Zitat      
Hey,
also irgendwo klemmt es noch mit der Funktion subs.

Ich schreibe:

subs(f,[I Iph Is1 Is2 N1 N2 Rp Rs U Ut],[dann die jeweiligen Werte])

Jedoch setzt er in der Formel den Wert für I nicht ein, jedoch alle anderen. Verstehe nicht warum Shocked
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.04.2012, 20:11     Titel:
  Antworten mit Zitat      
Hallo,

stimmt die Anzahl der Werte?
Ich kann das Problem jedenfalls so nicht reproduzieren. Beispielcode wäre hilfreich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 10.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2012, 06:56     Titel:
  Antworten mit Zitat      
Code:

syms I Iph Is1 Is2 N1 N2 Rp Rs U Ut
I=Iph*Is1*(exp((U+I*Rs)/N1*Ut)-1)*Is2*(exp((U+I*Rs)/N2*Ut)-1)*-((U+I*Rs)/Rp);

Ableitung=diff(I,U);

subs(Ableitung,[I Iph Is1 Is2 N1 N2 Rp Rs U Ut],[0.5 3.7 2.7^-3 4.9^-3 0.5 0.7 100 0.007 0.02 1.99])


Nun werden in dem Ergebnis von Ableitung alle Werte bis auf I eingesetzt.

MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
Sky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 10.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2012, 07:16     Titel:
  Antworten mit Zitat      
Problem fürs erste gelöst. Hatte gestern wohl einen Knick in der Optik. Habe die Formel für I falsch in Matlab übertragen Embarassed . Jetzt funktioniert es.
Vielen Dank für die Hilfe.

Aber ich meld mich bestimmt bald wieder.

MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
Sky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 10.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2012, 12:43     Titel:
  Antworten mit Zitat      
Hallo,
jetzt habe ich nochmal eine Frage zu finden von lokalen Minimas.
Im anhang findet Ihr eine IU-Kennlinie. In dieser ist ein Minimum zu sehen. Dieses möchte ich finden. Die Grafik bekomme ich durch die beiden Zeilenvektoren Imodul (1,10000) und Umodul (1,10000).
Ich habe folgende Funktion dafür verwendet:
Code:

minimum=Umodul(1,([(diff(sign(diff([0,diff([Imodul(1,:)]),0,0])))>0)]));
 


Da kommen dann aber Werte raus.
20.1291353883817 20.8089031503706 21.2052631976545 21.4034432211181 21.7998032676886 22.3943433366524 22.5925233594026 22.9888834045461 23.3852434492141 23.5834234713697 24.1779635371230 24.5743235803640 25.1688636443338 25.5652236863857 25.9615837279620 26.5561237894347 26.7543038096878 27.1506638498372 27.5470238895110 27.7452039091695 28.1415639481299 28.5379239866146 28.9342840246237 29.1324640434498 32.0331115145454

Wobei das Minima aus Grafik wenn ich diese vergrößere bei 20,2 und 36,5 liegen.

Hat da jemand eine Lösung?

MFG

IU-Kennlinie.png
 Beschreibung:

Download
 Dateiname:  IU-Kennlinie.png
 Dateigröße:  2.34 MB
 Heruntergeladen:  545 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 15.05.2012, 13:37     Titel:
  Antworten mit Zitat      
Hallo,

lokale Extremwerte findet man über Vorzeichenwechsel. Hier ein Beispiel:

Code:

x = [0:0.001:2*pi];
y=cos(x);  
d = sign(diff(y));              
ind=find(d ~= [d(1) d(1: end - 1)]);
x(ind) %Ausgabe
 


Um lokale Maxima zu finden kann statt des ~= ein < verwendet werden und für die Minima ein >.

Grüße, Marc
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.