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

Matrizenrechnung mit struct

 

ansc
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2015, 15:16     Titel: Matrizenrechnung mit struct
  Antworten mit Zitat      
Hallo alle miteinander,
neue Woche, neues Problem Smile

Ich habe ein struct mit 8 Feldern und einigen tausend Zeillen. Für die Rechnung die ich durchführen möchte benötige ich nur 3 dieser Felder(azAng,elAng und radVel). Hierbei sind in den einzelnen Feldern von azAng und elAng immer nx1 double array und in radVel nxm.

Als Ausgangsformel habe ich diese kurze Übung geschrieben.
Code:

a = 30; %elAng
b = 40; %azAng
c = 20; %azAng
d = 10; %azAng


V = [5 4 3 4; 6 1 3 5; 4 7 2 3];
A = [sind(a)*sind(b) sind(a)*cosd(b) cosd(a);...
    sind(a)*sind(c) sind(a)*cosd(c) cosd(a);...
    sind(a)*sind(d) sind(a)*cosd(d) cosd(a)];


x = A\V;


So ist das ja alles noch schön einfach. Ich möchte diese Rechnung nun mit meinen oben benannten Spalten ausführen.
Der Inhalt der Spalte radVel ist dabei das V aus dem vereinfachten Beispiel.
Mein derzeitiges Problem liegt bei der Matrix A.
Diese müsste ja nun auf grund meines Datensatzes wieder über 1000 Zeilen haben, da werde ich sicher eine Schleife anwenden müssen.

Ich habe mal so angefangen:
Code:
Vr = transpose({N.radVel});
a = transpose({N.elAng});  
b = transpose({N.azAng});  
x = cell2mat(Vr);
y = cell2mat(a);
z = cell2mat(b); % Matrizen habe ich hier gebildet, da bei Verwendung des structs im nächsten Schritt immer die Fehlermeldung : Undefined function 'sind' for input arguments of type 'struct'. kam

for k = 1:length(N)
A(k) = [sind(y)*sind(z) sind(y)*cosd(z) cosd(y)];
end
 


Hier bekomme ich jetzt die Fehlermeldung:
Error using *
Inner matrix dimensions must agree.

Könnte das daran liegen, das ich noch auf die einzelnen Felder zugreifen muss?

Ich bin mir einfach sehr unsicher, ob das was ich versucht habe so überhaupt Sinn ergibt, oder ob man diese Berechnung auch so ausführen kann, dass ich nicht wieder die Spalten aus meinem struct in eine Matrix umwandeln muss.

Ich bedanke mich schonmal für Anmerkungen und Hilfe von Euch Smile
Und falls ich mich zu undeutlich ausgedrückt hab, dann tut mir das leid und ich werde gerne nochmal versuchen mein Problem genauer zu schildern.
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: 02.11.2015, 15:39     Titel: Re: Matrizenrechnung mit struct
  Antworten mit Zitat      
Hallo ansc,
Zitat:
Code:
A(k) = [sind(y)*sind(z) sind(y)*cosd(z) cosd(y)];


Hier bekomme ich jetzt die Fehlermeldung:
Error using *
Inner matrix dimensions must agree.

Die Fehlermeldung ist eindeutig: Die Multiplikation von Arrays benötigt Matrizen mit passenden Dimensionen. Die Multiplikation eines [1xN] Vektors mit einem [1xN] Vektor ist z.B. nicht definiert. [1xN] * [Nx1] ist dagegen das normale DOT-Produkt.

Nun ist noch nicht klar, welchen Wert Du denn für A(k) erwartest.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
ansc
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2015, 15:50     Titel:
  Antworten mit Zitat      
Hallo Jan,

wenn ich nochmal von dem einfachen Beispiel ausgehe bekomme ich ja für A eine 3x3 Matrix raus. Also müsste ich meines Erachtens nach für mein jetziges A eine wesentlich größere Matrix rausbekommen. y und z sind derzeit beide 90000x1 double darauf basierend müsste ich dann ja ein 90000x3 double für A rausbekommen.

Ich hoffe, dass das deine Frage beantwortet
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: 02.11.2015, 16:04     Titel:
  Antworten mit Zitat      
Hallo,

du verwendest k in der rechten Seite der for-Schleife nicht.
Die Frage ist nicht nur, welche Dimensionen A haben soll, sondern auch welchen Inhalt. Ich könnte mir z.B. vorstellen

Code:
A = [sind(y).*sind(z) sind(y).*cosd(z) cosd(y)];


Wenn y und z Vektoren der Länge 90000 sind, ist A dann 90000x3.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2015, 11:59     Titel:
  Antworten mit Zitat      
Hallo nochmal und schonmal danke für die Antworten,

ich habe mittlerweile festgestellt, dass ich einen Denkfehler begangen habe. Deswegen jetzt nochmal von vorne:


Code:
A = [sind(Phi)*sind(Teta) sind(Phi)*cosd(Teta) cosd(Phi)];

Phi kommt aus der elAng Spalte des structs und Teta aus der azAng Spalte.
A sollte jetzt jede menge Zeilen bekommen und es sollte so aussehen, das in der ersten Zeile die Phi und Teta Werte aus der ersten Zeile und daraus der erste Wert sind, also Zb. in der ersten zeile von azAng und elAng steht 160x1 double dann sollen aus diesen 160 Werten jeweils der erste für die Rechnung benutzt werden, in der nächsten Zeile von A dann der zweite Wert und soweiter bis alle 160 Werte durch sind und danach soll es in die nächste Zeile von azAng und elAng springen (80x1) und dann dort genauso vorgehen.

Ich hoffe ihr versteht was ich meine. Ich dachte das wäre einfacher mit Matrizen, so wie gestern beschrieben, aber ich glaube da habe ich einen großen Denkfehler begangen.

Lieben Gruß
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.