|
|
|
Berechnung der Anzahl der Operationen |
|
| bandchef |

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.12.2011, 17:37
Titel: Berechnung der Anzahl der Operationen
|
 |
| |
 |
|
Hi Leute!
Gleich mal vorweg: ICH ERWARTE KEINE LÖSUNG DER AUFGABE SONDERN NUR EIN PAAR ANTWORTEN/TIPS AUF MEINE FRAGEN!
Ich hab hier folgende Aufgabe
Die beiden Matrizen A und B seien in Matlab mit einer vorgegebenen positiven ganzen Zahl
M folgendermaßen definiert: A = rand(M); B = rand(M);
(a) Berechnen Sie mit Matlab-Anweisungen die Produkte C = A'*B'*B*A und D = (B*A)'*(B*A)
stellen Sie dabei fest, wie viele Gleitpunktoperationen jeweils anfallen, wenn man die
beiden Formeln möglichst effizient auswertet. Geben Sie die Zahl der Gleitpunktoperationen
als Formel in Abhängigkeit von M an. Welche der beiden Matrizen C, D ist aufwändiger
zu berechnen?
(b) Theoretisch müsste C = D herauskommen. Überprüfen Sie mit Matlab-Anweisungen, mit
wie vielen Dezimalstellen die Koeffizienten der Matrizen C und D in etwa übereinstimmen.
Zu b)
Wie ich nun herausgefunden habe ergebn sich diese Anzahl von Flops:
Der Exponent ist mir klar. Das ist einfach die Zahl der im Code verwendeten Floatingpoint-Operationen, sprich die 3 Multiplikationen. Wie aber komm ich im Fall C auf den Vorfaktor 6 und im Fall D auf den Vorfaktor 4?
|
|
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 27.12.2011, 18:50
Titel: Re: Berechnung der Anzahl der Operationen
|
 |
Hallo bandchef,
Die Aufgabe ist nicht wirklich sinnvoll.
Selbstverständlich kann man A'*B' geschickt und ungeschickt implementieren. Bei geschickter Implementierung benötigt A'*B' genauso viele Operationen wie A*B. Deswegen benötigen beide Ausdrücke auch die gleiche Rechenzeit in (modernen) Matlab(-Versionen).
Falls wirklich 50% mehr Flops benötigt würden, wäre doch ein deutlicher Laufzeitunterschied zu bemerken.
Intern werden in Matlab BLAS-Funktionen aufgerufen. Und dabei kann man bei jeder Matrix-Multiplikation ein Flag übergeben, ob die jeweilige Matrix transponiert werden soll - eine explizite Transponierung findet dabei nicht statt! Deshalb benötigt man für beide Ausdrücke lediglich drei Matrix-Multiplikationen, die die Transposition berücksichtigen.
Gruß, Jan
|
|
|
|
| bandchef |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.12.2011, 20:05
Titel:
|
 |
Danke für deine Antwort! Das hat mich schon mal sehr weitergebracht.
Wie aber kommt meine Lösung auf diese Ergebnisse Flops_C = 6*M^3 und Flops_D = 4*M^3?
Wie schon gesagt der Exponent ist mir klar, nicht aber die 6 bzw. die 4 als Vorfaktor!
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 27.12.2011, 21:24
Titel:
|
 |
Hallo bandchef,
Man benötigt Integer-Multiplikationen für eine explizite Transposition und für die Schleifen zur Multiplikation.
Ein Detail habe ich übersehen: Für "(B*A)'*(B*A)" wird man "B*A" nur einmal berechnen und benötigt eine Transposition weniger. Also:
Damit hat man 3 Matrix-Multiplikationen im ersten Fall, aber nur 2 im zweiten.
Gruß, Jan
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|