Fortran95 programmierung

Von: , Frage gestellt am Mi, 29. Apr 2009

Hallo,

ich schreibe mit Fortran95 eine Programm, dass das Gaussche Eliminationsverfahren durchführen soll. die Funktion bekommt dabei u.a. die Koeffizientenmatrix als

real, dimension(:,:) :: A

übergeben, also mit unbekannter Größe. Sobald ich allerdings auf irgendein Element zugreifen möchte (Z.B. A(1,1)), erhalte ich sofort einen segmentation fault, auch wenn das übergeben array tatsächlich diese Indizes besitzt. Sobald ich die Dimensionen festlege (z.B. dimension(3,3)), funktioniert es plötzlich einwandfrei.

Muss ich hier noch Speicher alloziieren oder woran liegt das?

Wie ermittle ich die Ausmaße der übergebenen Matrix?


Ich hoffe es gibt noch alte Fortran-Veteranen, die mir hier helfen können :)


gruß

Frederic

2 Antworten zu dieser Frage

  1. Antwort von nach 16 Minuten 0 hilfreich
    Re: Fortran95 programmierung

    Hallo, ich schreibe mit Fortran95 eine Programm, dass das Gaussche
    Eliminationsverfahren durchführen soll.
    Zu Uebungszwecken?
    Ich hoffe du weisst, dass es schon genug solcher Programme gibt. die Funktion bekommt
    dabei u.a. die Koeffizientenmatrix als

    real, dimension(:,:) :: A

    übergeben, also mit unbekannter Größe. Sobald ich allerdings
    auf irgendein Element zugreifen möchte (Z.B. A(1,1)), erhalte
    ich sofort einen segmentation fault,
    Jetzt bin ich aber gespannt - wie willst du gaussche Elimination auf einer Matrix unbekannter Groesse durchfuehren?

    Die Antwort ist vermutlich "gar nicht". Also uebergib die Groesse der Matrix als weiteren Parameter.

    Ich kenne mich mit Fortran nicht aus, aber in C muss man alle ausser der letzten Groessen der Matrix kennen um drauf zugreifen zu koennen.

    Wenn die default-Groesse 0 ist, koennte das gut einen Segfault erklaeren.

    (Ansonsten empfehle ich vor allem, dich von Fortran fern zu halten).

    Gruesse,
    Moritz

    • Antwort von nach 20 Stunden 0 hilfreich
      Re^2: Fortran95 programmierung

      Hi, Zu Uebungszwecken?
      ja, zu reinen Übungszwecken, um mich mal mit dem Klassiker Fortran zu beschäftigen. Jetzt bin ich aber gespannt - wie willst du gaussche
      Elimination auf einer Matrix unbekannter Groesse durchfuehren?

      die tatsächliche Größe kann natürlich mit der size() Funktion ermittelt werden, ansonsten wäre es ja ein "fischen im trüben". Aber an fehlenden Grenzen liegt es ja nicht - selbst bei tatsächlich korrekten Indizes bekomme ich den segmentation fault. (Ansonsten empfehle ich vor allem, dich von Fortran fern zu
      halten).
      Das werde ich auch, nachdem ich dieses Projekt mal "zum Spaß" vollendet habe. Produktive Anwendungen schreibe ich eher in C++ oder java.

      gruß

      Frederic

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!