2016-04-19 5 views
1

Ich habe eine Matrix A als real :: A(7,8) deklariert und initialisiert, so dass alle Einträge 0.0 sind.Was macht `A (:: 2,3) = -1.0` in Fortran?

Der folgende Befehl bietet keine Kompilierungsfehler.

A(::2,3) = -1.0 

Ich stelle fest, dass die betroffenen Spalten nur Spalte 3. Was ist mit den Reihen sein wird? Sind ::2 Zeilen 1 und 2? Oder etwas anderes?

Ich druckte die Matrix aus, konnte aber das erzeugte Muster nicht verstehen.

hier (auf Vollständigkeit):

do, i=1,7 
    write(*, "(f5.2)") (A(i,j), j=1,8) 
enddo 

0.00 i = 1 
0.00 
-1.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 2 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 3 
0.00 
-1.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 4 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 5 
0.00 
-1.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 6 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 7 
0.00 
-1.00 
0.00 
0.00 
0.00 
0.00 
0.00 

es Betrachtet man nun sieht es aus wie es bei i=1 beginnt und fügt 2-i, bis sie die Grenzen der Matrix erreicht. Ist das richtig? ?

Bedeutet dies, dass ::2-1:7:2 entspricht ("1 bis 7 mit einem Schritt von 2)

+0

Verwenden Tag auf -1 [tag: fortran] für bessere sichtbarkeit. Fortran 90 ist nur eine bestimmte (und alte) Version. –

Antwort

1

am documentation Sehen, sehen wir:

print array-expression [first-expression : last-expression : stride-expression] 

Wo:

array-expression Ausdruck, der zu einem Array-Typ ausgewertet werden sollte

first-expression Erstes Element in einer Reihe, auch erstes Element gedruckt werden. Standardmäßig wird die Grenze verringert.

last-expression Last-Element in einem Bereich, aber vielleicht nicht das letzte Element zu gedruckt werden, wenn stride auf 1 zu Defaults oberen gebunden nicht gleich ist.

stride-expression Länge des Schritts. Der Standardwert ist 1.

Also, wenn first-expression und last-expression weggelassen werden, standardmäßig sie gebunden unteren und oberen bzw. gebunden.

0

Ja, das ist richtig - es ist das gleiche wie 1: 7: 2, wie man sich von der Ausgabe sehen kann, ist es in der Untergruppe das dritte Elements Einstellung für jeden zweiten Subarray