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

Startwert von funktion zu funktion übergeben

 

nelros
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2011, 11:40     Titel: Startwert von funktion zu funktion übergeben
  Antworten mit Zitat      
Hi,
ich habe 3 m-files, davon 2 mit einer function und eine mit dem Aufrufbefehl:
Wie schaffe ich es, dass mein Startwert t0 (Schätzwert für Minimumsuche) an die Funtion Maximum 3 übergeben wird, sodass mit diesem t0 in der Funktion Nullstelle gerechnet wird?? (Vom Aufruf-file zur Funktion Maximum3 und weiter zur Funktion Nullstelle)

Code:
%file mit Aufrufbefehl
%
%
t = [3.03079605102539;4.12517577409744;5.17341524362564;6.25200390815735;7.40981191396713;8.70086997747421;10.2052026987076;12.0690551400185;14.6334379911423;19.1680216789246;];

t0 = t(1,1)/2;          
options=optimset('Display','iter');  
[t,fval] = fminsearch(@Maximum3,t0,options);  

%file mit Funktion Maximum3, das ruft die 2te Funktion auf
%
%
function [L] = Maximum3(t0)
b0 = 0.5;          
options=optimset('Display','iter');  
[b,fval] = fsolve(@Nullstelle,b0,options);


u = 0;
t = [3.03079605102539;4.12517577409744;5.17341524362564;6.25200390815735;7.40981191396713;8.70086997747421;10.2052026987076;12.0690551400185;14.6334379911423;19.1680216789246;];
for i = 1:10
    u = u + (t(i,1)-t0)^b;
end;
n = (1/10 *u)^(1/b);


w = 0;
for i = 1:10
    w = w + ((b-1)*log(t(i,1)-t0) - ((t(1,1)-t0)/n)^b);
    L = -(10 * log(b/(n^b))+ w);
end;

 

%file mit Funktion Nullstelle
%
%
function [y] = Nullstelle(b)
g = 0;
y = 0;
t = [3.03079605102539;4.12517577409744;5.17341524362564;6.25200390815735;7.40981191396713;8.70086997747421;10.2052026987076;12.0690551400185;14.6334379911423;19.1680216789246;];


    for z = 1:10
        for i = 1:10
            g = g + (t(i,1) - t0)^b;
        end;
         y = y + ((1-b)/(t(z,1)-t0) + 10*b*(t(z,1)-t0)^(b-1)/g);
    end;
 


Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 20.05.2011, 15:09     Titel:
  Antworten mit Zitat      
Hallo,

z.B. mittels:
Code:

Code:

t0 = t(1,1)/2;
setappdata(0,'t0',t0);
.
.
.
function [y] = Nullstelle(b)
t0 = getappdata(0,'t0');
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
nelros
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2011, 10:12     Titel:
  Antworten mit Zitat      
Hi,
danke für den Tipp erstmal!
Ich habs ausprobiert, aber ich glaube das gibt bei jedem Iterationsschritt t0 weiter. Ich brauche t0 aber als Startwert, damit matlab mit fminsearch mir den das t0 findet, mit dem L maximal wird.
Ne andere Idee, wie ich das anstellen sollte?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 23.05.2011, 16:23     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Ich habs ausprobiert, aber ich glaube das gibt bei jedem Iterationsschritt t0 weiter.

Natuerlich gibt es immer den Wert t0 weiter, so hatte ich deine Frage auch verstanden. Du legtst t0 fest, uebergibst es an die Funktion Maximum mittels:
Code:

[L] = Maximum3(t0)
 

und verwendest t0 auch in der Funktion Nullstelle mittels getappdata.
Zitat:

Ich brauche t0 aber als Startwert, damit matlab mit fminsearch mir den das t0 findet, mit dem L maximal wird.

Sorry, aber das verstehe ich nicht. Du willst t0 als Startwert aber auch danach wieder ermitteln? Versuch doch bitte es nochmal genauer zu erklaeren.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
nelros
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2011, 19:54     Titel:
  Antworten mit Zitat      
Hi,
ich habe meine Aufabenstellung beigefügt. Darin stehen die Rechenschritte, die ich versuche zu programmieren. (Das ist der E-Step des EM-Algorithmus)


Hier rufe ich die Funktion Nullstelle auf und übergebe ihr den Startwert für b für die Iteration mit fsolve (Startwert=b0)

Code:
b0 = 0.5;
[b,fval] = fsolve(@Nullstelle,b0);  

function [y] = Nullstelle(b)
g = 0;
y = 0;
T = [1;2;3;4;5;6;7;8;9;10]
for z = 1:10
        for i = 1:10
            g = g + (T(i,1) - t)^b;
        end;
         y = y + ((1-b)/(T(z,1)-t) + 10*b*(T(z,1)-t)^(b-1)/g);
    end;

 



Die zweite Iteation:

Code:
u = 0 ;
t0 = t(1,1)/2;  
[t,fval] = fminsearch(@Maximum3,t0);

function [L] = Maximum3(t)
u = 0;
for i = 1:10
    u = u + (t(i,1)-t0)^b;
end;
n = (1/10 *u)^(1/b);


w = 0;
T = [1;2;3;4;5;6;7;8;9;10];
for i = 1:10
    w = w + ((b-1)*log(t(i,1)-t0)/ln - ((t(1,1)-t0)/n)^b);
    L = -(10 * log(b/(n^b))/ln+ w);
end;


Da ich die beiden Iterationen verschachteln muss, mache ich folgendes:

Code:
u = 0 ;
t0 = t(1,1)/2;  
[t,fval] = fminsearch(@Maximum3,t0);

function [L] = Maximum3(t)

b0 = 0.5;
[b,fval] = fsolve(@Nullstelle,b0);  

u = 0;
for i = 1:10
    u = u + (t(i,1)-t0)^b;
end;
n = (1/10 *u)^(1/b);


w = 0;
T = [1;2;3;4;5;6;7;8;9;10];
for i = 1:10
    w = w + ((b-1)*log(t(i,1)-t0)/ln - ((t(1,1)-t0)/n)^b);
    L = -(10 * log(b/(n^b))/ln+ w);


function [y] = Nullstelle(b)
g = 0;
y = 0;
T = [1;2;3;4;5;6;7;8;9;10]
for z = 1:10
        for i = 1:10
            g = g + (T(i,1) - t)^b;
        end;
         y = y + ((1-b)/(T(z,1)-t) + 10*b*(T(z,1)-t)^(b-1)/g);
    end;
end;


Mein Hauptproblem:
Die Callfunktion:
Code:
t0 = t(1,1)/2;  
[t,fval] = fminsearch(@Maximum3,t0);

ruft Maximum3 auf und übergibt dieser Funktion den Startwert für t.
In dieser Funktion Maximum3 befindet sich die Callfunktion für Nullstelle:
Code:
b0 = 0.5;
[b,fval] = fsolve(@Nullstelle,b0);

Dieser Übergibt b0 als Startwert für b an die Funktion Nullstelle weiter, aber der Startwert für t wird hier nicht weitergegeben. Das ist das Problem.
Da ich eine Iteration habe, darf ich keinen festen Wert für t zuweisen, sondern nur einen Startwert t0.

WP_000087.jpg
 Beschreibung:
Gleichungen

Download
 Dateiname:  WP_000087.jpg
 Dateigröße:  669.84 KB
 Heruntergeladen:  324 mal
WP_000086.jpg
 Beschreibung:
Arbeitsanweisung

Download
 Dateiname:  WP_000086.jpg
 Dateigröße:  677.93 KB
 Heruntergeladen:  326 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.