www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Fortran" - Do- Schleife verstehen (Summe)
Do- Schleife verstehen (Summe) < Fortran < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Fortran"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Do- Schleife verstehen (Summe): Verständnisfrage
Status: (Frage) beantwortet Status 
Datum: 05:21 Fr 01.07.2011
Autor: mathfrag

Aufgabe
Do i=1,4 !läuft von 1 bis 4
     Do j=1,6. !läuft von 1 bis 6
          A(i,j, 1:50)= A(i,j,1:50)/ B(i,j)
     Enddo
Enddo

!Bemerkung: B wurde davor ausgerechnet, nennen wir es 8


Guten Morgen,

Ich benötige etwas Hilfe beim verstehen was das o.g Programm eigentlich macht. Es wäre super, wenn ich dazu einen mathematischen ausdruck
Bekommen wurde.

Mein Gedanke:

Ich wurde das Programm so lesen:

[mm] \bruch{\summe_{i=1}^{4} x_{i}}{\summe_{z=1}^{50} x_{z}} [/mm] + [mm] \bruch{\summe_{j=1}^{6} x_{j}}{\summe_{z=1}^{50} x_{z}} [/mm] + [mm] \bruch{\summe_{z=1}^{50} x_{z}}{\summe_{z=1}^{50} x_{z}} [/mm]

Oder sehe ich das falsch? Ich verstehe die Anweisung A(i,j,1:50)=A(i,j,1:50)/B(i,j) nicht ganz. Wäre toll wenn mir jemand das in Worte erklären konnte.

Vielen Dank



        
Bezug
Do- Schleife verstehen (Summe): Antwort
Status: (Antwort) fertig Status 
Datum: 09:07 Fr 01.07.2011
Autor: Event_Horizon

Hallo!

A und B sind Arrays, keine Zahlen. Demnach macht dein B=8 auch keinen Sinn.

A ist ein 3D-Array, B ist 2D.

Dein Programm teilt jeden Wert, der im Array a an den Koordinaten i,j,k liegt, durch den Wert von B bei i,j.
i und j werden dabei durch die Schleifen bestimmt, durch die notation mit dem Doppelpunkt macht er das automatisch für alle k von 1 bis 50.


Bezug
                
Bezug
Do- Schleife verstehen (Summe): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 09:07 Sa 02.07.2011
Autor: mathfrag

Vielen Dank für deine Antwort.

Leider kann ich mir das nicht vorstellen. Wenn A und B arrays sind, kann ich mir das dann so vorstellen:


A= [mm] \pmat{ 1 & 2 & 3 & 4 \\ 1 & 2 & 3 & 4 & 5 & 6 \\ 1 & 2 & 3 & 4 & 5 & 6 & ... & 50 } [/mm]

B= [mm] \pmat{ 1 & 2 & 3 & 4 \\ 1 & 2 & 3 & 4 & 5 & 6} [/mm]

Ich ging davon aus, dass B eine zahl wird, denn am Anfang des Programs steht:

B= sum(A(1:4,1:6,1:50),3)    !Dazu Bemerkung,mit (*)vermerkt
B=B/50                                  ! Dazu Bemerkung mit (**) vermerkt

(*) ICh stelle mir vor, dass hier folgendes geacht wurde:
[mm] \summe_{i=1}^{50} x_{i} [/mm] =1275

(**)
B= 1275/50 = 25,5

Deshalb ging ich davon aus dass es Zahlen sind... ICh stehe aufm Schlauch... :(

Bezug
                        
Bezug
Do- Schleife verstehen (Summe): Antwort
Status: (Antwort) fertig Status 
Datum: 09:44 Sa 02.07.2011
Autor: novex

Die Notation von A und B ist sehr merkwürdig...hast da keine genaueren Angaben ??

Bezug
                        
Bezug
Do- Schleife verstehen (Summe): Antwort
Status: (Antwort) fertig Status 
Datum: 10:25 Sa 02.07.2011
Autor: Event_Horizon

Hallo!

B kann keine Zahl sein, weil da ja ein B(i,j) steht, und damit spricht man ein einzelnes Element eines (2D) Arrays an.

Und zu deiner Vorstellung:

A ist ein 3D-Array, wenn du so willst, sind das in dem Fall 50 Tabellen mit jeweils 4 Spalten und 6 Zeilen.
Diese Größen sind Mindestangaben, denn ich habe nicht gesehen, wie A definiert wird. Aber dein Code greift auf diese 4x6x50 Felder zu, daher müssen zumindest die existieren. Es ist auch noch nicht bekannt, welche Werte in A drin stehen, da die bisher noch nirgends explizit gesetzt werden.


Nochmal zur Erläuterung:

Do i=1,4
             A(i,3, 10:12)= A(i,3, 10:12) / 5.0
     Enddo

Dieser Code teilt die Werte der Spalten 1-4 der dritten Zeile durch 5 - und zwar in der 10, 11, und 12. "Tabelle".

man könnte das auch so schreiben:

Do i=1,4
   Do k=10,12
          A(i,3, k)= A(i,3, k) / 5.0
   Enddo
Enddo

oder ganz kurz:

A(1:4,3, 10:12)= A(1:4,3, 10:12) / 5.0

jetzt zu dem SUM:


B=sum(A(1:4,1:6,1:50)) würde dir tatächlich die Summe aller Werte im Array A zurück geben. Aber

B=sum(A(1:4,1:6,1:50), 3) liefert dir ein Array zurück, in dem alle Werte in der 3. Dimension aufaddiert werden. Das heißt anschaulich, du bekommst eine Tabelle mit 4 Spalten und 6 Zeilen, und in jeder Zelle steht dann die Summe der Werte aus den 50 einzelnen Tabellen von A, die an der gleichen Position stehen.

Vielleicht mal mathematisch:

[mm] A\in\IR^3, B\in\IR^2 [/mm]

[mm] B_{i,j}=\sum_{k=1}^{50}A_{i,j,k} [/mm]






Bezug
                                
Bezug
Do- Schleife verstehen (Summe): Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 14:47 Sa 02.07.2011
Autor: mathfrag

Vielen Dank, du hast mir wirklich sehr geholfen. Jetzt wird einiges klarer. Ich möchte sicher gehen das ich es 100% verstanden habe und habe das ganze noch einmal vereinfacht. Ich bitte dich noch einmal drüber zu schaeun und mir zu sagen ob ich richtig liege.


Wir nehmen nun ein vereinfachtes Beispiel an:

B=SUM(A(1:3,1:4,1:2)3)

soweit ich das verstanden habe, bedeutet das also folgendes (Tabellen werden durch || getrennt, werte in der Tabelle sind die Werte des Feldes)


[mm] \vmat{ 5 & 10 & 5 \\ 15 & 20 & 15 \\ 5 & 10 & 15 } [/mm] + [mm] \vmat{ 15 & 10 & 10\\ 15 & 20 & 5 \\ 5 & 5 & 15 } [/mm] = [mm] \vmat{ 20 & 20 & 15 \\ 30 & 40 & 20 \\ 10 & 15 & 30 } [/mm]

mit B=B/5 erhalte ich also

[mm] \vmat{ 4 & 4 & 3 \\ 6 & 8 & 4 \\ 2 & 3 & 6 } [/mm]

weiter mit

A(1:3,1:4,1:2)=A(1:3,1:4,1:2)/B(1:3,1:4)

habe ich also:

[mm] \vmat{ 5 & 10 & 5 \\ 15 & 20 & 15 \\ 5 & 10 & 15 } \vmat{ 15 & 10 & 10\\ 15 & 20 & 5 \\ 5 & 5 & 15 } [/mm]
und diese 2 Tabellen jeweils teilen mit

B(1:3,1:4)= [mm] \vmat{ 4 & 4 & 3 \\ 6 & 8 & 4 \\ 2 & 3 & 6 } [/mm]

somit habe ich bekomme ich 2 Tabellen zurück mit:

[mm] \vmat{ 5/4 & 10/4 & 5/3 \\ 15/6 & 20/8 & 15/4 \\ 5/2 & 10/3 & 15/6 } \vmat{ 15/4 & 10/4 & 10/3\\ 15/6 & 20/8 & 5/4 \\ 5/2 & 5/3 & 15/6 } [/mm]


stimmt das?

Bezug
                                        
Bezug
Do- Schleife verstehen (Summe): Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:25 Mo 04.07.2011
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
                                
Bezug
Do- Schleife verstehen (Summe): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:37 Sa 02.07.2011
Autor: mathfrag

Hallo,

nochmals vielen Dank.

Was ist wenn eine 4te Dimension dazu kommt? Wie darf ich mir das dann vorstellen?

zB   C(a,b,c,d)

dann sind es c Tabellen mit jeweils b Zeilen, a Spalte und wofür steht das "d"?


ICh danke vielmals!!!

Bezug
                                        
Bezug
Do- Schleife verstehen (Summe): Keine Vorstellung mehr
Status: (Antwort) fertig Status 
Datum: 19:25 Sa 02.07.2011
Autor: Infinit

Hallo mathfrag,
an dem Prinzip ändert sich nichts, allerdings haben wir Menschen Schwierigkeiten beim Vorstellen von vier Dimensionen, eine anschauliche räumliche Beschreibung kann ich Dir deswegen auch nicht geben. Die Frage ist ja auch mehr, was in solchen "Hypertabellen" abgespeichert würde und da kann man sich natürlich aus der Physik heraus einiges vorstellen. Ein räumliches Gebilde, das für Dich anschaulich ist, kannst Du damit aber nicht mehr verbinden.
Viele Grüße,
Infinit


Bezug
                                                
Bezug
Do- Schleife verstehen (Summe): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:31 Sa 02.07.2011
Autor: mathfrag

Danke...

aber wie kann ich es dann berechnen, wenn ich es z.B "per Hand" ausrechnen möchte?


diese 2 Fragen gehen mir nicht aus dem Kopf:

1)
was ist eigentlich der unterschied zwischen (:) und (1:5).
(1:5) bedeutet z.B, dass i von 1 bis 5 läuft, aber was bedeutet nur (:) ? Ist das ähnlich?

2)
was bedeuten / in einer Klammer... zum Beipsiel

wo ist der unterschied zwischen:
lendim= (/3,4,q,2/)   und lendim(3,4,q,2)

Ich danke euch vielmals!!!!




Bezug
                                                        
Bezug
Do- Schleife verstehen (Summe): Laufindizes
Status: (Antwort) fertig Status 
Datum: 09:40 So 03.07.2011
Autor: Infinit

Hallo mathfrag,
bei der Initialisierung von Feldern kann man diese gleich mit Werten belegen, dies ist die (/ ... /)-Schreibweise.
Der Doppelpunkt ist eine Kurzschreibweise, die einfach besagt, dass alle Werte des Laufindex dieser Dimension benutzt werden sollen. Diese müssen woanders jedoch zugeordnet worden sein. Das wird gerne beim Ansprechen von Teilfeldern benutzt.
Einen recht schönen Überblick findest Du []hier.
Viele Grüße von einem, der noch mit Fortran 77 anfing,
Infinit

Bezug
                                                                
Bezug
Do- Schleife verstehen (Summe): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:11 So 03.07.2011
Autor: mathfrag



vielen Dank für deine ausführlichen Antworten. Leider drehe ich mich im Kreiss. Kannst du mir einen Tipp geben, wie ich Fortranschleifen in mathematischen Ausdrücke umformulieren kann und umgekehrt?

zum Beispiel:

wenn ich  die



dann schreibe ich bestimmt

do i=1,500
  x(:)=x+i  (oder so ähnlich)

aber wie lese ich es umgekehrt? Ich arbeite zum ersten mal mit Fortran und habe große schwierigkeiten.

Mein HAuptproblem:

wie schreibe ich zum Beispiel folgendes in Forel um:

x=sum(a(1:4,1:5,1:6)3)    (*)
x= x/6                               (*)
do i=:4
  do i=1:5
    a(i,j,1:10)=a(i,j,1:10)/x(i,j)     (**)
  endo
endo

kann ich das so aufschreiben?

x=    

für (*), wenn i=1:4, j=1:5, k=1,6

und für (**) ?? :(

Bezug
                                                                        
Bezug
Do- Schleife verstehen (Summe): Anders herum
Status: (Antwort) fertig Status 
Datum: 18:01 So 03.07.2011
Autor: Infinit

Hallo mathfrag,
auf Deine Interpretationsrichtung bin ich bisher noch nie gestoßen, schließlich ist Fortran ja die Abkürzung for Formula Translator. Generell kann man sagen, dass es sich bei verschachtelten Schleifen lohnt, diese von der inneren bis zur äußeren Schleife aufzulösen. Das Gleichheitszeichen hat ja nicht die Aufgabe, eine mathematische Gleichheit herzustellen, sondern es ist nur der Hinweis, dass der Wert eines Ausdrucks einer Variablen zugeordnet wird. So etwas wie
do i = 1, 10
  do j = 1, i
    do k = -4, 5
b(i) = a(j,k)/ 5
     end do
  end do
end do

könnte man schreiben als
b(i) für alle i in [1,10] =: a(j,k) / 5 für alle k in [-4,5] und j in [1, i]
aber warum sollte ich so etwas tun wollen? Normalerweise habe ich ein mathematisches Problem und versuche es, in Fortran umzusetzen.
Ich weiss, dass dies am Anfang gewöhnungsbedürftig ist, aber hier hilft nur üben.
Viel Erfolg und viel Spaß dabei,
Infinit


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Fortran"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.mathebank.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]