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

Vektoren mit variablen Einträgen definieren

 

Nic123
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2011, 11:47     Titel: Vektoren mit variablen Einträgen definieren
  Antworten mit Zitat      
Hi!

Ich möchte eine Funktion in Abhängigkeit von 4 Variablen maximieren. Die Funktion kommt von der mehrdimensionalen Normalverteilung, es stehen also Vektoren und Matrizen in der Funktion.
Meine Frage ist, wie ich Vektoren (bzw. Matrizen) definieren kann, die Variablen als Einträge haben. Bzgl. dieser Variablen möchte ich dann später maximieren. Also z.B. mit 'fminsearch' oder ähnlichen Befehlen.

Wie definiere ich also z.B. die Matrix
diag(a,2,5,b)
wobei a und b keine festen Werte zugewiesen sind...

Danke!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.05.2011, 15:29     Titel:
  Antworten mit Zitat      
Hallo,

es ist natürlich möglich, mit der Symbolic Math Toolbox Einträge von Vektoren als Variablen zu definieren:
Code:
syms a b
v = [a; 2; 5; b]


Es ist also die Frage:
- Möchtest du, dass du z.B. das b bekommst, was den Ausdruck in Abhängigkeit von a maximiert (also b = f(a) )? Dann musst du Methoden aus der Symbolic Math Toolbox verwenden
- Möchtest du, dass fminsearch oder was auch immer a und b variiert und dir optimale Kombinationen zurückgibt? Dann musst du mit einem Vektor der zu optimierenden Parameter arbeiten (siehe Beispiele in der Doku zu fminsearch) und die zusätzlichen Parameter anderweitig zur Verfügung stellen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2011, 15:46     Titel:
  Antworten mit Zitat      
Danke. Bin vorhin auch auf die Symbolic Math Toolbox gestoßen. Leider ist das Uninetz etwas überlastet und der Download geht etwas langsam. Hatte die Toolbox damals nicht mitinstalliert Wink

Werde es jetzt damit versuchen. Letztlich will ich einen Ausdruck maximieren, der von 4 Variablen abhängt. Also die zweite Variante, die du vorgeschlagen hast.

Ich melde mich, falls währenddessen weitere Fragen auftauchen... Es sollte ja kein Problem sein, bei 'fminsearch' dann genau diese Symbole a,b als Variablen zu benutzen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.05.2011, 16:15     Titel:
  Antworten mit Zitat      
Hallo,

ich sollte noch klarstellen: bei der Verwendung von fminsearch und ähnlichen ist es eben nicht nötig, die Variablen symbolisch zu definieren. Siehe auch die Beispiele in der Dokumentation.
Wichtig ist, dass die festen und die veränderlichen Parameter getrennt werden müssen. fminsearch und ähnliche gehen davon aus, dass alle Parameter veränderlich sind; etwaige feste Parameter müssen also separat zur Verfügung gestellt werden.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2011, 19:06     Titel:
  Antworten mit Zitat      
Es geht weiter mit meinen Problemen...
Folgende Situation:

Code:
% Hier klappt alles gut
fct=@(a) (a-3)^2
fminsearch(fct,1)


Jetzt das ganze in Abhängigkeit von 2 Parametern:

Code:
%Hier nicht
fct=@(ab) (a-3)^2+(b-2)^2
fminsearch(fct,[1 3]) %Diese Zeile ist falsch.
 


Wie kann ich das korrekt schreiben, damit das Gleiche passiert wie oben?

Ich muss das über solche Variablen machen, da die Variablen in meiner eigentlichen Funktion sehr kompliziert auftauchen. Ich hänge mal ein Beispiel an, in dem man die Funktion sehen kann. Ich möchte den Ausdruck in der letzten Zeile maximieren. Der hängt nur von (l,w,a,b) ab. Irgendwelche Ideen?

Code:

function garch(y,in) % 'y' und 'in' sind Vektoren mit 250 Einträgen

syms l w a b;
f=zeros(250,1);
sigma=zeros(250);
mu=(1/250)*sum(y)*ones(250,1);

for k=1:250
    f(k)=in(k)-(1/250)*sum(in);
end

x=y-mu-l*f;

sigma(1,1)=w;
for i=2:250
    sigma(i,i)=w+a*(x(i-1)^2)+b*sigma(i-1,i-1);
end

(1/(((2*pi)^125)*(det(sigma)^0.5)))*exp(-0.5*x'*((sigma)^(-1))*x);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.05.2011, 19:36     Titel:
  Antworten mit Zitat      
Hallo,

das geht an sich aus dem Beispiel in der Doku klar hervor, dass es so aussehen muss:
Code:
fct=@(x) (x(1)-3)^2+(x(2)-2)^2
fminsearch(fct,[1 3]) %Diese Zeile funktioniert jetzt auch.


Sprich, die Funktion muss so aussehen:
Code:
function y = f(x, p1, p2, ...)

wobei x ein Vektor der zu bestimmenden Größen und p1, p2, ... Parameter sind. Aufruf dann mit:
Code:
fminsearch(@(x) f(x, p1, p2, ...) , x0)


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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2011, 22:42     Titel:
  Antworten mit Zitat      
Danke. Mit x und dann den Variablen x(1),x(2),... hab ich das natürlich in der Hilfe auch gesehen. Aber mein Problem ist ja, dass die 4 Variablen (l,w,a,b) noch nicht mal direkt in der Funktion auftauchen, sondern in den Vektoren stehen.

Ich muss also so wie von dir angegeben eine 'function' definieren, wobei x der Vektor (l,w,a,b) ist, oder?

Grüße und einen schönen Abend noch!
Private Nachricht senden Benutzer-Profile anzeigen
 
Nic123
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2011, 11:36     Titel:
  Antworten mit Zitat      
Habe es dann mittlerweile auch geschafft Wink Hab wohl zu analytisch gedacht mit der Symbolic Math Toolbox...

Edit: Habe ein neues Problem. Die Funktion findet ein Minimum, auch wenn das abhängig ist vom Startvektor, aber das macht nichts.

Ich lasse diese Minimierung jetzt 100mal laufen jeweils mit anderem Input. Dann kommt die Fehlermeldung, dass die 'MaxFunEval' und 'MaxIter' zu gering sind. Das wundert mich etwas, denn bei jeder einzelnen Ausführung von fminsearch findet er Ergbnisse. Hier mal mein Code, der die 100 Ausführungen machen soll...

Code:

function [lambda]=garch2(Y,in) % 'Y' 250x100 Matrix, 'in' 250x1 Vektor

lambda=zeros(250,1);
A=zeros(100,4);

for i=1:100
    A(i,:)=fminsearch(@(x) garch(Y(:,i),in,x(1),x(2),x(3),x(4)),[1 1/250 0.3 0.1]);
end

for k=1:100
    lambda(k)=A(k,1);
end
 
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.