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

Selektive Matrixoperationen

 

Pinky
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2012, 19:28     Titel: Selektive Matrixoperationen
  Antworten mit Zitat      
Hallo,

eine weitere Frage von mir. Angenommen eine Matrixoperation wie zum Beispiel die Multiplikation:
Code:

A=B*C;
x=A(1:10);


Ziel ist der Vektor x, den ich durch eine Teilmenge von meiner Matrix A erhalte. Nun braucht man um x zu berechnen sowohl B als auch C vollständig, aber es ist ein ziemlicher overhead wenn ganz A berechnet wird, ich brauche ja nur die erste Zeile davon.

Leider geht es nicht wie folgt:
Code:
x=B*C(1:10)


Kennt jemand eine Möglichkeit, wie man MATLAB sagen kann, dass es nur bestimmte Elemente berechnen soll? Wichtiger ist hierbei das es die anderen Elemente NICHT berechnet als kürzerer Code.

Matrixmultiplikation wurde hier nur als einfaches Beispiel gewählt.

gruß Pinky
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2012, 20:08     Titel:
  Antworten mit Zitat      
Hallo,

ich denke nicht, dass das möglich ist. Das muss man wenn selber gezielt so programmieren.

Dein Beispiel dürfte daran gescheitert sein, dass du mit nur einem Index in Matrizen indizierst. Üblicherweise schreibt man
Code:
matrix(zeile, spalte)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2012, 10:58     Titel:
  Antworten mit Zitat      
Hallo Harald,

wie immer sehr schnell, vielen Dank.

Die Indizierung ist kein Problem, da man auch problemlos per Vektor indizieren kann. So wird die Hauptdiagonale zum Beispiel durch einen Vektor der folgenden Gestalt angesprochen:
Code:
Index_diag=1:size(A,1)+1:prod(size(A))


Das es dass nicht gibt erstaunt mich ein bisschen, da es ja die Rechenzeit bei bestimmten Problemstellungen immens verringern würde.

gruß Pinky
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.01.2012, 11:22     Titel:
  Antworten mit Zitat      
Hallo,

natürlich ist die lineare Indizierung möglich; ich behaupte jedoch, dass Zeilen-Spalten-Indizierung übersichtlicher ist.

Deine Idee ist natürlich möglich, aber du musst es halt wirklich selbst implementieren - indem du bei Matrix-Vektor-Multiplikation beispielsweise nur bestimmte Zeilen und bestimmte Spalten multiplizierst.

Code:
A = rand(10000,1000);
B = rand(1000, 500);
% Wir wollen eigentlich nur die ersten 20 Zeilen von A*B
tic
C = A * B;
Cneeded = C(1:20, :);
toc

% Dann berechnen wir eben explizit nur diese 20 Zeilen
tic
Cneeded2 = A(1:20, :) * B;
toc
% und es ist deutlich schneller

isequal(Cneeded, Cneeded2)
% und es kommt das selbe heraus


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2012, 11:25     Titel:
  Antworten mit Zitat      
Hey,

also Übersichtlichkeit ist schon ein Argument aber wenn es läuft ist es schon ok. Die manuelle Ausführung ist natürlich prinzipiell machbar, in meinem Fall will ich allerdings den Matrixexponenten bilden und da ist es leider nicht ganz so einfach.

gruß Pnky
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.01.2012, 11:43     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
in meinem Fall will ich allerdings den Matrixexponenten bilden und da ist es leider nicht ganz so einfach.


Stimmt. Entsprechend wäre das auch für den Algorithmus kompliziert und damit zeitaufwändig. Brauchst du bestimmte Exponenten?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2012, 12:04     Titel:
  Antworten mit Zitat      
Verdammt jetzt habe ich die Antwort gelöscht, naja noch einal kurz.

Es gibt ein Lösungsverfahren für SDEs genannt Local linearization. Paper findet man z.B. hier [url]rev-inv-ope.univ-paris1.fr/files/28107/io28107-5.pdf[/url].

Aussage ist:

Code:
y_(n+1) = y_n + [expm(dt+A)](1:length(y),end);

Dabei ist A eine Matrix bestehend aus f_y dem Jacobi df_y/dy und dem noise term. Ich habe momentan zwar noch kein rauschen in meinem System, aber es sollte ähnlich funktionieren.

gruß Pinky
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.