Verfasst am: 03.05.2010, 09:00
Titel: MatLab-code läuft nicht in Octave
Hallo,
ich habe einen Code in MatLab geschrieben, den ich jetzt gerne in Octave weiter bearbeiten möchte, allerdings meldet mir Octave fehler, dass "Colums" nicht korrekt sind. Aber in MatLab läuft der Code.
Ist das ein generelles Problem?
Ich möchte folgenden Code Umsetzen, bzw. als Basis zur Erweiterung für meine eigene Arbeit verwenden; und genau dieser Code läuft in octave nicht. Die %-zeichen habe ich schon durch #-Zeichen ersetzt, das brachte leider keinen erfolg!
Code:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Longstaff Schwartz for American Put Option % by markus leippold @2005
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% basic inputs % clear all % randn('seed',128) % you may want to use different seeds... closeall
n = 1000; % numbers of paths to simulate
N = 16; % number of exercise points
T = 1; % time to maturity
dt = T/N;
S0 = 100; % initial stock price
K = 100; % xrsice price
r = 0.05; % interest rate
sig = 0.2; % stock price vola
dW = sqrt(dt)*randn(N-1,n); % standard Brownian increments
disc = exp(-r*dt); % discout factor
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% simulate asset processes
S = S0*exp(cumsum((r - 1/2*sig^2)*dt + sig*dW));
S = [ones(1,n)*S0; S ]';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
P = zeros(n,N); % initialize payoff matrix
P(:,N) = max(0,S(:,N)-K); % American put option
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for nn = N-1:-1:2
y = max(0,-K+S(:,nn)); % payoff of put option
yex = [];
X = [];
Y = [];
for i = 1:n
if y(i) > 0% if in-the-money, then...
yex = [yex; y(i)]; % exercise values
X = [X; S(i,nn)]; % stock prices at exercise values
Y = [Y;(disc.^[1:N-nn])*P(i,nn+1:N)']; % discount the cash flows to time step nn end end % basis functions 1, X, X^2
A = [ones(size(yex)) X X.*X] ;
% Least-Square Regression: [U,W,V] = svd(A);
b = V*(W\(U'*Y));
% continuation value
yco = A*b;
% stopping rule
j = 1;
for i = 1:n
if y(i)>0 if(yex(j) > yco(j))
P(i,:) = 0;
P(i,nn) = yex(j);
end
j = j+1;
end end end
price = sum(P*disc.^[0:N-1]')/n % final price of the American contract
ich habe deinen Code (ausser dem published in Matlab) in einen Texteditor kopiert und alle Prozentzeichen durch # ersetzt.
Die Datei habe ich in einem Ocatve-bekannten Verzeichnis als Datei "americanput.m" gespeichert.
Danach habe ich QtOctave gestartet (Version 0.7.2).
Bei mir scheint der Code zu laufen. Wenn ich in der Kommandozeile americanput eingebe, erscheint nach ca. 2 sec die Ergebnisausgabe
price = 10 +/- Delta.
Was und wo genau funktioniert bei Dir nicht ? Vielleicht liegt es an der verwendeten Octave-Version ?
also erst mal vielen Dank dafür. Ich habe den Bildschirmdialog gesehen, was für eine Octave-Version ist das. Ich habe bei mir nur ein Command Fenster. Das wäre für mich interessant. Oder ist der dort abgebildete Screenshoot nur ein Editor für octave?
der Screenshot zeigt QtOctave. Das ist in weiterem Sinne eine GUI-Erweiterung der Command-Oberfläche, wie Du sie hast.
Insgesamt sieht damit QtOctave "fast" so aus wie eine MatLab-Oberfläche.
Mit der "normalen" Octave-Version (Command-Oberfläche) 3.2.3 habe ich Deine Routine ebenfalls ausprobiert. Da läuft es auch (siehe Screenshot).
Ich hänge mal meine americanput.m an die Message. Vielleicht hast Du etwas vergessen ?
vielen Dank für die vielen nützlichen Hinweise. Das hat mir sehr geholfen. Es hat jetzt alles funktioniert. ich werde mich jetzt weiter in den MatLab/Octave Synthax einarbeiten und hoffe, dass ich damit vorankomme, um dieses Modell entsprechend zu erweitern.
Vielen Dank & viele Grüße,
Thomas
Einstellungen und Berechtigungen
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.