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

Maximum eines Funktionsintervalls

 

jig
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 15.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2011, 16:53     Titel: Maximum eines Funktionsintervalls
  Antworten mit Zitat      
Hallo an euch alle.

Ich habe eine Funktion geschrieben, die endlich auch so funktioniert wie sie soll. Nun möchte ich aus ihren Berechnungen das Maximum bestimmen. Doch leider funktioniert das nicht mit dem max Befehl. Hat vielleicht jemand eine Idee.

Hier mein Code

Code:

function P = test(l)
load Stern;
X = Stern;
n = length(X);
X_mean = mean(X);
sumcos = 0;
sumsin = 0;
for t = 1:n
    sumcos = sumcos + (X(t) - X_mean) * cos(2*pi*l*t);
    sumsin = sumsin + (X(t) - X_mean) * sin(2*pi*l*t);
end;
P = 1/n * (sumcos)^2 + 1/n * (sumsin)^2;

 


Wenn ich die Funktion jetzt plotte mit:

figure; fplot('test',[0 0.5]); title('Stern');

Dann sieht sie auch genauso aus, wie sie aussehen soll. Doch leider kann ich nicht einfach mit:

max(test)

ihr Maximum bestimmen (auf dem Intervall [0, 0.5]). Kann mir vielleicht jemand eine Hilfestellung geben. Ich konnte bisher im Forum nichts ähnliches Finden.

Gruß jig
Private Nachricht senden Benutzer-Profile anzeigen


Skai
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 23.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2011, 16:59     Titel:
  Antworten mit Zitat      
Hallo,

Code:


maximum=max(test(1:5)) %speichert dir das max im Bereich von 1 bis 5

 

_________________

Grüße Skai
Private Nachricht senden Benutzer-Profile anzeigen
 
jig
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 15.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2011, 22:31     Titel:
  Antworten mit Zitat      
Hallo Skai,

leider funktioniert dieser Befehl so nicht bei mir. Es gibt die folgende Fehlermeldung:


??? Error using ==> mpower
Matrix must be square.

Error in ==> test at 16
P = 1/n * (sumcos)^2 + 1/n * (sumsin)^2;


Da die Funktion auch nur interessant ist auf dem Intervall [0,0.5] möchte ich auch nur das Maximum aus diesem Bereich. Der Plot der Funktion ist ja richtig. (Ich hab das Beispiel aus einem Buch) Und anhand des Plots erkennt man auch, dass das Maximum etwa bei 0.0345 liegt.
Mit deiner Funktion erhalte ich allerdings:

maximum =

3.0536e-027

Das ist laut Plot (und Buch) falsch. Hast du vielleicht noch eine andere Idee die mir helfen könnte.
Vielen Dank schonmal im Voraus

gruß jig
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.06.2011, 23:44     Titel:
  Antworten mit Zitat      
Hallo jig,

Zitat:
leider funktioniert dieser Befehl so nicht bei mir. Es gibt die folgende Fehlermeldung:

Zitat:
Mit deiner Funktion erhalte ich allerdings:
maximum = 3.0536e-027

Wie kann die Funktion gleichzeitig eine Fehler erzeugen und einen falschen Wert erzeugen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jig
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 15.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 08:29     Titel:
  Antworten mit Zitat      
Hallo Jan S

stimmt, ist eigentlich Blödsinn...
Ich meinte auch, dass ich bei der Eingabe:

maximum = max(test(0:0.5))

erhalte:

maximum =

3.0536e-027

das ist ja falsch. Und da hab ich gedacht vllt liegt es an dem Intervall [0 0.5] also hab ich andere Befehle ausprobiert wie:

maximum = max(test(0:0.000001:0.5))

oder

maximum = max(test(0:5))

oder

maximum = max(test(1:5))

und da erhielt ich dann den Fehler

?? Error using ==> mpower
Matrix must be square.

Error in ==> periodogramtest at 16
P = 1/n * (sumcos)^2 + 1/n * (sumsin)^2;


Ich hoffe das war jetzt verständlicher... Sorry nochmal...

Gruß jig
Private Nachricht senden Benutzer-Profile anzeigen
 
andrej13
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 05.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 08:56     Titel:
  Antworten mit Zitat      
Hallo Jig,

weil so bald du einen Vektor übergibst sind die Variablen Sumcos und sumsin auch Vektoren. Dann passt natürlich diese Funktion auch nicht mehr. P = 1/n * (sumcos)^2 + 1/n * (sumsin)^2;
Du musst diese glaub ich so schreiben
P = 1./n. * (sumcos).^2 + 1./n. * (sumsin).^2;
Private Nachricht senden Benutzer-Profile anzeigen
 
jig
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 15.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 10:00     Titel:
  Antworten mit Zitat      
Hallo andrej13

Ich habe deinen Vorschlag ausprobiert und erhalte jetzt:

>> maximum = max(test(0:0.5))

maximum =

3.0536e-027

>> maximum = max(test(0:5))

maximum =

2.0254e-024

Verstehe hier schon nicht, warum als maximaler Wert auf [0 0.5] und auf [0 5] verschiedene Werte resultieren die beide im Intervall [0 0.5] liegen???

Weiterhin erhalte ich:

>> maximum = max(test(1:5))

maximum =

2.0254e-024

Wie kann er mir einen maximalen Wert in dem Intervall [1 5] berechnen, der außerhalb dieses Intervalls liegt???

Schön ist, dass er jetzt keinen Fehler mehr ausgibt. Nur sind die Ergebnisse ja leider immer noch nicht richtig...

Möchte ich einen bestimmten Funktionswert erhalten so berechnet MATLAB:

>> test(2.0254e-024)

ans =

3.0536e-027

>> test(0.1)

ans =

1.6308

FALSCH: müsste etwa bei 0.6 liegen

>> test(0.3)

ans =

0.2109

FALSCH: müsste etwa bei 0.16 liegen

>> test(0.03)

ans =

127.6647

scheint richtig zu sein!!!

>> test(0.0345)

ans =

1.6714e+004

FALSCH: müsste etwa bei 11900 liegen

Diese Werte sind nahezu alle Falsch... Wo liegt mein Fehler... ? Wenn ich doch den Plot richtig dargestellt bekomme...?

Danke für jede Hilfe die ich bekomme

gruß jig
Private Nachricht senden Benutzer-Profile anzeigen
 
andrej13
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 05.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 13:31     Titel:
  Antworten mit Zitat      
also es sind nicht die Vektoren, die du brauchst Smile
Was steht in der Stern variable?

Also so müsste es gehen, gibts aber sicherlich eine bessere Methode.

P = 0;
for i=0:0.0001:0.5
P=[P;test(i)]
end
max(P)

Zu den Intervallen noch:
Wenn du maximum im Intervall [0 0.5] (x-Achse) suchst muss dieses doch nicht im gleichem Intervall liegen auf der y-Achse
Private Nachricht senden Benutzer-Profile anzeigen
 
jig
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 15.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 15:32     Titel:
  Antworten mit Zitat      
Also

X = Stern;

ist ein Spaltenvektor der Länge n = 600.

Letztendlich möchte ich aus der Funktion test(l) das Funktionsargument ausgegeben bekommen, dessen Funktionswert der maximale der Funktion test() ist.

Also ich hab mal jeweils den plot von "Stern" und "test von Stern" (im Intervall [0 0.5]) angehängt. In "test von Stern" sieht man deutlich 2 Peaks zwischen 0.02 und 0.05. Ich möchte jetzt, dass mir meine Funktion test(l) am Ende ausgibt:

Das Maximum von Stern liegt bei l = 0.034
(also irgendwo da in der Nähe)

Vielleicht gehe ich die Sache ja auch völlig falsch an... Mir fällt nur absolut keine Lösung für mein Problem ein...

gruß jig

test von Stern.fig
 Beschreibung:

Download
 Dateiname:  test von Stern.fig
 Dateigröße:  2.88 KB
 Heruntergeladen:  310 mal
Stern.fig
 Beschreibung:

Download
 Dateiname:  Stern.fig
 Dateigröße:  3.39 KB
 Heruntergeladen:  316 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
andrej13
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 05.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 15:54     Titel:
  Antworten mit Zitat      
Versuchs mal so:
k=0:0.001:0.5;
P=0;
for i=k
P=[P test(i)];
end
P=P(2:end);
k(P==max(P))
Private Nachricht senden Benutzer-Profile anzeigen
 
jig
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 15.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 16:39     Titel:
  Antworten mit Zitat      
Hallo andrej13,

vielen dank für deine Hilfe... Es funktioniert... ich bin ja so happy...
Auch wenn ich es noch nicht so ganz verstehe... aber jetzt beschäftige ich mich erstmal damit... Smile

wünsch dir noch einen schönen nachmittag...

gruß
jig
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.