Ist es für dieses Beispiel möglich, eine Felddefinition vorzugeben (also ähnlich wie in Excel)? So dass ich sagen kann: Nimm den Wert der Spalte an.
2. Ich will für ein bestimmtes Feld angeben, wie dieses Feld sich aus anderen Matrizen berechnet.
So wie beispielsweise die Multiplikation für Matrizen festgelegt(Zeile * Spalte) ist, so möchte ich eine eigenen Verrechnungsmethode festlegen wie zum Beispiel. Wenn A,B und C Matrizen sind, so würde ich gerne Feld C(i,j) definieren als:
Verfasst am: 03.10.2014, 18:34
Titel: Re: Felder als Funktionen definieren ohne Schleifen
Hallo einfachrolf,
Zitat:
Ist es möglich, ein Feld einer Matrix als Funktion zu definieren?
Ja, das ist einfach möglich - allerdings in Excel.
Matlab ist dafür nicht geeignet.
Zitat:
Folgende Beispielfälle, welche ich bisher immer mit For-Schleifen lösen musste:
Das verstehe ich nicht. Du hast es in Deinem Beispiel-Code ohne FOR-Schleife gelöst.
Zitat:
1. Ich will in jedem Feld stehen haben, in welcher Spalte dieses sich befindet
Das hört sich nach einem Ansatz an, der sehr indirekt ist. Statt eine solche Matrix zu erstellen, ist es viel einfachen einen Index-Vektor zu verwenden.
Es ist nicht sinnvoll eine so mächtige Sprache wie Matlab auf Biege und Brechen so verwenden zu wollen wie Excel. Theoretisch kann man zwar mit Matlab alles machen, was in Excel auch geht, aber man kann ja auch Berechnungen in PostScript-Code einbauen und den Drucker ein Differential-Gleichungs-System integrieren lassen. Es geht, ist aber nicht praktisch.
Zitat:
Ist es für dieses Beispiel möglich, eine Felddefinition vorzugeben (also ähnlich wie in Excel)? So dass ich sagen kann: Nimm den Wert der Spalte an.
Passt das? Es könnte aber auch langsamer sein, denn die temporären Array, die BSXFUN hier erstellt, benötigenm viel Speicherplatz. Probiere es also einfach mal aus, was effizienter für Deine typischen Daten ist.
Zitat:
(Ich hoffe, dass ich dafür nicht in C Programmieren muss)
Das ist lustig! In C wird es garantiert sehr viel komplizierter!
% way1 - for loop normal tic for i1 = 1:N
for i2 = 1:N
C(i1, i2) = min(A(i1, :) + B(:, i2).');
end end toc
sol1 = C;
% way2 - for loop by bsx % % tic % % Bt = B.'; % % for i1 = 1:N % % C(i1, = min(bsxfun(@plus, A(i1, , Bt), 2); % % end % % toc % % sol2 = C; % -> kommt zur Fehlermeldung: Subscripted assignment dimension mismatch.
% way3 - without loop
top_layer = zeros(1,N,N); % diesen muss ich für X Operationen nur 1 mal bereitstellen. Daher zähle ich ihn nicht zur Zeit. Matlab empfiehlt mir hier keine Preallokation, da dies scheinbar sowieso im nächsten Schritt erfolgen muss.
Weg 3 ist vermutlich nicht sofort einleuchtend. Im Prinzip kopiere ich mir Zeilen und Spalten nur mehrmals in zwei 3D-Matrizen. Durch die Drehungen kann ich diese dann einfach miteinander verrechnen.
Das seltsame ist, dass nach der ersten Ausführung Weg1 schneller ist als Weg3. Bei jeder folgenden Ausführung jedoch Weg3. Außerdem ist Weg3 nur bis zu einer bestimmten Größe für N schneller. Dann holt Weg1 nämlich wieder auf. Mich interessieren aber konkret die Fälle für N von 11 bis 48.
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
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.