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

MatLab-code läuft nicht in Octave

 

thomas0815
Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2010, 10:00     Titel: MatLab-code läuft nicht in Octave
  Antworten mit Zitat      
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?

Viele Grüße,
Thomas
Private Nachricht senden Benutzer-Profile anzeigen


aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 03.05.2010, 12:20     Titel:
  Antworten mit Zitat      
Hallo Thomas,

Octave ist nun nicht ganz Matlab, leider !
Hie und da gibt es einige kleine Unterschiede.

Alleine die Kommentarzeichen (MatLab=%, Octave = #) machen sich bemerkbar.

Falls der Code nicht zu umfangreich ist, könntest Du ihn evtl. posten ?

Grüße
Andreas
_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2010, 08:53     Titel:
  Antworten mit Zitat      
Hallo Andreas,

ja der Code ist nicht zu umfangreich.

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...
close all
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

Published with MATLAB® 7.0


Viele Grüße,
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 07.05.2010, 13:05     Titel:
  Antworten mit Zitat      
Hallo Thomas,

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 ?

Grüße
Andreas

americanput.jpg
 Beschreibung:
Screenshot von meinem QtOctave-Fenster

Download
 Dateiname:  americanput.jpg
 Dateigröße:  296.86 KB
 Heruntergeladen:  1057 mal

_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2010, 14:35     Titel:
  Antworten mit Zitat      
Hallo Andreas,

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?

Viele Grüße,
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 07.05.2010, 20:02     Titel:
  Antworten mit Zitat      
Hallo Thomas,

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 ?

Grüße
Andreas

americanput.m
 Beschreibung:
Octave-Script mit der Endung m

Download
 Dateiname:  americanput.m
 Dateigröße:  2.26 KB
 Heruntergeladen:  918 mal
americanput-octave323.jpg
 Beschreibung:
Screenshot Octave 3.2.3

Download
 Dateiname:  americanput-octave323.jpg
 Dateigröße:  93.93 KB
 Heruntergeladen:  1097 mal

_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2010, 10:41     Titel:
  Antworten mit Zitat      
Hallo Andreas,

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
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 - 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.