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

Rekursion einer speziellen Funktion in Matlab

 

Roberzen
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2009, 17:20     Titel: Rekursion einer speziellen Funktion in Matlab
  Antworten mit Zitat      
Hallo liebes goMatlab Forum,

ich bin ein Neuling in Matlab und muss im Rahmen meiner Diplomarbeit einiges damit programmieren. Seit einer Weile hänge ich an einem spezifischen Problem und möchte um eure Hilfe bitten:

Ich möchte eine Rekursion für eine spezielle Funktion programmieren, scheitere jedoch bei der korrekten Umsetzung.

Die Funktion soll mir die Gewichtung für verschiedene Wertpapiere in einem Portfolio ermitteln. Vereinfacht ausgedrückt soll die Gewichtung alpha folgendermaßen ermittelt werden:

n = 1
alpha1 = 1

n = 2
alpha2 = -( alpha1 * Call1) / Call2

n = 3
alpha3 = -( alpha2 * Call2 + alpha1 * Call1) / Call3

n = 4
alpha4 = -( alpha3 * Call3 + alpha2 * Call2 + alpha1 * Call1) / Call4

usw. wobei Call eine andere Funktion darstellt, deren Wert ich aktuell auch korrekt abrufen kann.

Meine Funktion sieht aktuell ungefährt so aus:

function alp = alpha(n)

if n == 0
alp = 0
elseif n == 1
alp = 1
else
alp = (alpha(n-1)*Call(n-1)) / Call(n)
end

function value = Call(variables) etc.

Mein Problem besteht nun darin, dass so nur das erste Glied dieser Kette korrekt ermittelt wird, die dannachfolgenden jedoch keine Berücksichtigung finden.. Ich könnte nun mit einer Änderung von z.B.

else
alp = ((alpha(n-1)*Call(n-1)+alpha(n-2)*Call(n-2)) / Call(n)

Zwar das zweite Glied erfassen, das Problem bleibt jedoch bestehen.

Kann mir jemand weiterhelfen? Ist die Problemstellung ausreichend ausgeführt? Ich gebe gerne mehr Informationen, wenn mir dann jemand weiterhelfen kann =)

Vielen Dank für eure Bemühungen!!
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.06.2009, 19:24     Titel:
  Antworten mit Zitat      
Hallo Roberzen,

das Problem liegt darin, dass durch die Rekursion die vorher berechneten Werte nur lokal in der Funktion existierten (jeder in seinem Aufruf), aber nicht zurückgegeben werden. Mein Vorschlag ist ziemlich zusammengestoppelt und nicht schön, ich selbst hätte vermutlich eine for-Schleife genommen. Vielleicht fühlt sich jemand zum Schönmachen berufen.

Hier mein Vorschlag:
Code:
function [value,alp] = alpha(n,alp)
if  n == 1
    value = 1
else
    [value,alp] = alpha(n-1,alp);
    value = (value*Call(n-1)) / Call(n);
end
alp(n) = value;


function value = Call(variables)
value = variables * 2; % oder eben Deine Call-Funktion


Der Aufruf erfolgt mit
Code:
n = 6;
[value,alp] = alpha(n,zeros(n,1))


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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 - 2024 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.