Ich habe den folgenden MATLAB-Code, der Folgendes tut.Wie schreibt man das in Fortran?
Angenommen, ich habe 3 Investitionen von 10 Einheiten. Die Matrix exits
hat den Wert 1, wenn die Investition beendet wird. Matrix pos
sagt mir die Rendite jeder der drei Investitionen. Dann berechnet die letzte Zeile des Codes das gesamte Geld, das bei veräußerten Anlagen verdient wird.
Ich versuche, eine ähnliche Codezeilen in Fortran zu schreiben. Auch unter meinem Fortran-Versuch.
clear all
X = 10;
ret(1,1) = -0.05;
ret(2,1) = 0.15;
exits = [1 0 1];
pos = [1 1 2];
ret1 = (pos == 1) .* ret(1,1) + (pos == 2) .* ret(2,1);
inv = sum(X * ones(1,3) .* (exits) .* exp(ret1));
Mein Fortran-Code:
PROGRAM Matlab_replication
IMPLICIT NONE
INTEGER, DIMENSION(1,1) :: X = 10
REAL, DIMENSION(2,1) :: ret
INTEGER, DIMENSION(1,3) :: exits
INTEGER, DIMENSION(1,3) :: pos
REAL, DIMENSION(1,3) :: ret1
REAL, DIMENSION(1,3) :: ret2
REAL, DIMENSION(1,3) :: ones = 1.0
REAL, DIMENSION(1,3) :: X1
REAL :: inv
ret(1,1) = -0.05
ret(2,1) = 0.15
exits(1,1) = 1
exits(1,2) = 0
exits(1,3) = 1
pos(1,1) = 1
pos(1,2) = 1
pos(1,3) = 2
X1(1,:) = X(1,1) * ones(1,:)
ret1 = (pos == 1) * ret(1,1) + (pos == 2) * ret(2,1)
ret2(1,:) = exp(ret1(1,:))
inv = sum(X1(1,:) * exits(1,:)* ret2(1,:))
end program
Irgendwie die Linie ret1 = (pos == 1) * ret(1,1) + (pos == 2) * ret(2,1)
nicht liefern, was ich suche. Außerdem musste ich zwei zusätzliche Variablen gegen den MATLAB-Code X1
und ret2
erstellen. Kann ich das vermeiden?
Was ist Ihre Ausgabe? Was macht es, wenn es nicht das liefert, wonach Sie suchen? Betrachten Sie einen aussagekräftigeren Titel. –
Ich bin mir nicht sicher. Das Problem scheint auf der logischen Indizierung von ret1 zu liegen. Ich habe ein paar Korrekturen am Fortran-Code vorgenommen, damit es genau mit dem Matlab übereinstimmt. Aber die Ausgabe ist nicht die gleiche. – phdstudent
Also zeigen Sie die Ausgabe, das ist was ich verlange! –