Verfasst am: 20.05.2011, 11:40
Titel: Startwert von funktion zu funktion übergeben
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;];
%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;
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?
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:
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)
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;
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;
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.
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
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.