Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan > Algorithmen & Lehrreiches

Algorithmen & Lehrreiches Algorithmen & Lehrreiches...

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag [Windows XP-32 bit] Ihr Konto wird gesperrt...
Aufrufe: 25, Antworten: 4
Gehe zum ersten neuen Beitrag Suche Programm um Werbung zu...
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag Serienempfehlung gewünscht :)
Aufrufe: 1935, Antworten: 27
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26436, Antworten: 4179
Gehe zum ersten neuen Beitrag [Verkaufe] HTC Desire "S"
Aufrufe: 21, Antworten: 0
Gehe zum ersten neuen Beitrag Probleme mit Internet...
Aufrufe: 301, Antworten: 11
Gehe zum ersten neuen Beitrag Schnäppchen Thread ... von...
Aufrufe: 7363, Antworten: 36
Gehe zum ersten neuen Beitrag Vier Jahre Haft für...
Aufrufe: 35, Antworten: 0
Gehe zum ersten neuen Beitrag Wie öffnet man mehrere...
Aufrufe: 203, Antworten: 13
Gehe zum ersten neuen Beitrag Soundprobleme
Aufrufe: 32, Antworten: 1
Zeige:





Thema geschlossen
 
LinkBack Themen-Optionen Ansicht
Alt 11.09.2011, 20:57   #1 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.078
Standard

Abt. Matrixmultiplikation, traditionelle Methode
==============================
Beschleunigung wäre sehr wünschenswert (Stichwort "Physikrechnen").
Dieser traditionelle Algorithmus ist nur bei eher voll belegten Matrizen sinnvoll. Für sogenannte 'Sparse-Matrizen' (schwach - meist entlang der Haupt- oder Nebendiagonale besetzte Matrizen; solche treten insb. im Bereich Finite Elemente Methode bei Statikberechnungen auf) gibt es schnellere Methoden:
Code:
' Traditionelle Matrixmultiplikation V1.3beta (Demo by P.Specht. Nur zu Timingzwecken gedacht!)
' HIER GEWÜNSCHTE TESTDIMENSIONEN EINGEBEN:
' Zeilen,Spalten von A / Gestürzte Spalten s&, gestürzte Zeilen t& von B

  var z&= 1000 : var s&= 100 : var t&= 100

' Vorbereitung
WindowTitle "Traditionelle Matrixmultiplikation (Nur für Timingzwecke)"
Font 2:@Set("RandSeed",10):Cls rnd(8^8)
set("Decimals",18)
Declare A![z&,s&],B![s&,t&],C![z&,t&],i&,j&,k&,w!,tm&,a$


' Matrix A traditionell mit Zufallswerten <> 0 belegen
Print " Erforderlicher Speicherplatz: ";int(((z&*s&+s&*t&+z&*t&)*8));" Byte"
Print " Matrix-Zufallsbelegung..."


tm&=&GetTickCount
i&=1:While i&<=z&
  j&=1:While j&<=s&
    w!=(50000000-rnd(100000000))/rnd(50000000)+1
    A![i&,j&]=w!
  inc j&:Endwhile
inc i&:Endwhile
tm&=&GetTickCount-tm&
Print " Matrix A ("+str$(int(s&*z&))+" Elemente) traditionell belegt in "+str$(tm&)+" ms."



' &Index hier genullt, da er nur als schnelle Schleife benötigt wird:
tm&=&GetTickCount
b![]=rnd(99999+0*&Index)+1
tm&=&GetTickCount-tm&
Print " Matrix B ("+str$(int(s&*t&))+" Elemente) Highspeed-zufallsbelegt in "+str$(tm&)+" ms."



' Möglichkeit zur Überprüfung der Matrixfunktion an Hand einfacher Matrizen:
If 0  ' Funktionstest 0 = Off , 1 = ON
  z&=2 : s&=2 : t&=2
' Matrix A =
  A![1,1]=2 : A![1,2]=0
  A![2,1]=0 : A![2,2]=1
' Matrix B =
  B![1,1]=2 : B![1,2]=0
  B![2,1]=0 : B![2,2]=1
Endif


Print " Die Matrizen sind verlinkt in Breite "+str$(s&)+" A-Spalten=B-Zeilen."
Beep
Print " ";int(z&*s&*t&);" Multiplikationen und Additionen erforderlich."
print "\n Zum Start der Matrixmultiplikation Taste drücken!"
SetTimer 12000 : WaitInput : killtimer
Print "\n Berechnung der "+str$(int(z&*t&))+" Elemente von C läuft."
Print " Ein Punkt steht jeweils für "+str$(int(t&))+" fertige Elemente."
print " Das wird ca. "+str$(int(z&/61+1))+" Zeilen benötigen."


if 0
$MAKE CL
endif
' Traditionelle Matrixmultiplikation
tm&=&GetTickCount
W!=0
i&=1:While i&<=z&
   k&=1:While k&<=t&
      w!=0
      j&=1:While j&<=s&
          w!=w!+A![i&,j&]*B![j&,k&]
      inc j&:Endwhile
      C![i&,k&]=w!
  inc k&:Endwhile
  print ".";
  case %pos>61:print
  case %csrlin>22:cls
inc i&:Endwhile:print
tm&=&GetTickCount-tm&


Beep
Print " 2 Matrizen multipliziert in "+ if( tm& > 9000 , str$(tm&\1000)+" sec." ,str$(tm&)+" ms." )
Print "\n Ergebnis C ausgeben?"
WaitInput
case IsKey(27):end
case IsKey(78):end
' Ausgabe der Ergebnis-Matrix C
CLS


tm&=&GetTickCount
i&=1:While i&<=z&
   print "********* Zeile "+trim$(str$(i&))+" von "+trim$(str$(z&))+":  *********"
   k&=1:While k&<=t&
     if %csrlin>22:SetTimer 700: WaitInput :Killtimer:cls:endif
     Print "S"+trim$(str$(k&))+":"+format$("%e",C![i&,k&]),
     case %pos > 50:print
   inc k&:Endwhile :print 
inc i&:Endwhile
tm&=&GetTickCount-tm&
Print "\n Matrix C ausgegeben in " + if( tm& > 9000 , str$(tm&\1000)+" sec." , str$(tm&)+" ms." )


WaitInput
End
EDIT: In V1.3beta noch etwas beschleunigt und deutlich gesprächiger gemacht...
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3
p. specht ist offline  
Werbung

Windows 7 Tipps und Tricks in Bildern

Thema geschlossen

  Paules-PC-Forum.de > Programmierung > XProfan > Algorithmen & Lehrreiches

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
C++ Methode (?) nach XProfan Frabbing XProfan 7 18.11.2010 16:30
abstrakte methode in konkreter klasse - java Unregistriert Sonstige Programmiersprachen 1 18.09.2009 16:28
Gutmann-Methode wie anwenden? derClown Linux 1 27.10.2007 18:42
Funktionspointer auf beliebige Methode Herb C/C++, Visual C++, Visual C++.NET 1 13.09.2006 09:41
Neue Phishing-Methode! schotti111 Aktuelle Meldungen 0 16.03.2006 12:55



Alle Zeitangaben in WEZ +2. Es ist jetzt 16:01 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2