Verfasst am: 15.01.2015, 03:24
Titel: Vektorisierung einer Funktion mit Summenzeichen
Hallo liebe Forumsmitglieder,
ich bin seit einigen Monate passiver Mitleser eures Forums und möchte mich zuallererst einmal bei euch für eure wirklich hilfreichen Posts bedanken!
Für folgendes Problem bin ich leider nicht fündig geworden. Vieleicht kann mir ja jemand weiterhelfen:
Um meinen Code effizienter zu machen, muss eine Funktion vektorisiert werden. Hier ein Minibeispiel der ursprünglichen Funktion:
da die Funktion so recht ungewöhnlich ist, bitte auch nochmal die Funktion an sich überprüfen.
Code:
function[result] = VektorFunktion( a_vec ,b_vec)
N = size(a_vec, 2); % oder N = 2? Wie soll das für a_vec mit > 2 Spalten aussehen?
result=sum(a_vec, 2) + N*b_vec;
end
Hallo Harald, Hallo Martin,
vielen Dank für eure Vorschläge. Die Schleife wird wohl nicht in Frage kommen, da ich so wieder die Effizienz der Vektoroperation verlieren würde. Haralds Vorschlag muss ich nochmal genau ansehen, bin mir aber gerade noch nicht sicher ob sich das ganze so auf meine Funktion übertragen lässt.
Ich glaube aber mir bleibt fast nichts anderes übrig, als die Summe auszuschreiben.
bin mir aber gerade noch nicht sicher ob sich das ganze so auf meine Funktion übertragen lässt.
Bei deinem Testbeispiel erhältst du damit das gewünschte Ergebnis.
Wenn du in anderen Beispielen nicht das gewünschte Ergebnis erhältst, dann bitte ein solches Beispiel zur Verfügung stellen.
ist das nun Code, der die gewünschten Ergebnisse liefert? Dann wäre das Problem ja erledigt.
Oder Code, der nicht die gewünschten Ergebnisse liefern? Dann wäre die Frage, wie die Ergebnisse in diesem Fall aussehen sollen (und, falls es nicht ganz offensichtlich ist, wie man auf diese Ergebnisse kommt). Also die Informationen, die du eingangs zur Verfügung gestellt hast, nur mit einem etwas komplexeren Beispiel.
result=VektorFunktion(a,b,c);
% "result" sollte dann so aussehen: (macht es aber nicht) % result(1)=min(5,max(7-1,0))+min(5,max(7-2,0))=10; % result(2)=min(6,max(8-3,0))+min(6,max(8-4,0))=9;
In deinem Beispiel ist die Matrix, die summiert wird, symmetrisch. Das bedeutet, dass Zeilen- und Spaltensumme gleich ist. Mir ist also nicht klar, was du in allgemeinen Fällen erhalten möchtest.
Grüße,
Harald
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.