WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

vektorielles Programmieren statt for-Schleifen

 

Motu
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 15.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2015, 21:13     Titel: vektorielles Programmieren statt for-Schleifen
  Antworten mit Zitat      
Hallo Zusammen,

ich habe folgende Funktion.
Code:
function f = f_n(xMatrix, MatrixX)
n=size(MatrixX,2);
hn=0.5
for i=1:size(xMatrix,2)
    xi=xMatrix(:,i);
    sume = ones(1, size(xMatrix,2));
    sume(i)=0;
    for j=1:n;
        Xj=MatrixX(:,j);
      g= norm((xi-Xj)./hn);
      sume(i) = sume(i) + g;
    end
end
f=sume/(n*(hn^3));

Im Anhang findet ihr die Formel, die ich versucht habe zu implementieren.
Die Beschreibung:
xMatrix ist eine 3x100000 Matrix und MatrixX ist eine 3x200 Matrix. Ich möchte eine Spalte der xMatrix festhalten, davon zunächst eine Spalte der MatrixX dann die Norm davon bilden. Dann möchte ich die restlichen Spalten der MatrixX von der gewählten Spalte der xMatrix abziehen und da auch jeweils die Norm bilden. diese werte der Norm werden zu einer Zahl addiert. Diese Zahl wird dann in einem Array gespeichert, was am Ende ausgegeben werden soll.
Das Ziel ist es für jede der Spalten von xMatrix so eine Zahl auszurechnen. Nun habe ich gemerkt, dass meine Funktion relativ langsam ist. Ich habe gehört, dass ich statt der For-schleifen vektoriell das ganze programmieren kann. Leider weiß ich nicht, wie es funktioniert. Kann mir bitte jemand helfen?
Danke und Grüße
Motu

Capture.PNG
 Beschreibung:

Download
 Dateiname:  Capture.PNG
 Dateigröße:  5.61 KB
 Heruntergeladen:  295 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.07.2015, 00:01     Titel: Re: vektorielles Programmieren statt for-Schleifen
  Antworten mit Zitat      
Hallo Motu,

Bevor man die Laufzeit eines Codes optimiert, sollte er erfolgreich getestet sein und das richtiger Ergebnis liefern.
Bist Du sicher, dass in jeder Iteration der "for i"_Schleife die Variable "sume" wieder auf "ones()" gesetzt werden soll? In diesem Fall könnte man nämlich die Schleife über i weglassen, da nur die letzte Iterations Auswirkungen auf das Endergebnis hat.

Ich rate mal, dass sume nicht überschrieben werden soll:
Code:
function f = f_n(X, Y)
n    = size(Y,2);
hn   = 2;
sume = zeros(1, size(X,2));
for i = 1:size(X,2)/10
   xi = X(:,i);
   s  = 0;
   for j = 1:n
      Xj = Y(:,j);
      g  = norm((xi - Xj) * hn);
      s  = s + g;
   end
   sume(i) = s;
end
f = sume / (n*(hn^3));

Erzeugt das das gewünschte Ergebnis?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.