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

NaN und Matrixberechnungen

 

cinaja
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.04.15
Wohnort: DE
Version: ---
     Beitrag Verfasst am: 25.04.2015, 02:24     Titel: NaN und Matrixberechnungen
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Figur in Matlab konstruiert, bestehend aus Punkten welche in X-, Y- und Z-Matrizen gespeichert werden. Damit die Figur passend aussieht, wurden ebenfalls leere Stellen mittels NaN definiert. Nun habe ich aber das Problem, dass ich mit den Matrizen nicht rechnen kann. Gibt es eine Möglichkeit die NaN-Stellen zu ignorieren?

Ich habe es schon mit "isnan()" versucht, leider ohne Erfolg.

Zum besseren Verständnis habe ich einen einfachen Beispielcode gescrhieben:

Code:

N = 6;
M = 4;


X = zeros(N,M);
Y = zeros(N,M);
Z = zeros(N,M);

%% X-Werte
X(1:6,1) = 1;
X(1:6,2) = 2;
X(1:6,3) = 3;
X(1:6,4) = 4;


X(2,2) = NaN;
X(5,2) = NaN;


%% Y-Werte

Y(1:3,1) = 1:3;
Y(1:3,2) = 1:3;
Y(1:3,3) = 1:3;
Y(1:3,4) = 1:3;

Y(4:6,1) = 3:-1:1;
Y(4:6,2) = 3:-1:1;
Y(4:6,3) = 3:-1:1;
Y(4:6,4) = 3:-1:1;

Y(2,2) = NaN;
Y(5,2) = NaN;


%% Z-Werte

Z(4,1:4) = 1;
Z(5,1:4) = 1;
Z(6,1:4) = 1;

Z(2,2) = NaN;
Z(5,2) = NaN;

%% Massen

m = ones(N,M);

...........




Mit den Matrizen sollen kinematische Verhalten des Körpers berechnet werden. (Trägheitst., Verschiebung...etc.)

Liebe Grüsse, cinaja
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: 25.04.2015, 03:24     Titel: Re: NaN und Matrixberechnungen
  Antworten mit Zitat      
Hallo cinaja,

Welches Problem tritt bei welcher berechnung auf? Man kann problemlos mit Matrizen rechnen, die NaNs enthalten.

Zitat:
Gibt es eine Möglichkeit die NaN-Stellen zu ignorieren?

Was bedeutet "ignorieren" genau?

Zitat:
Ich habe es schon mit "isnan()" versucht, leider ohne Erfolg.

Bitte poste, was Du versucht hast und was "ohne Erfolg" genau bedeutet. Sonst kann man keinen Verbesserungsvorschlag machen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.04.15
Wohnort: DE
Version: ---
     Beitrag Verfasst am: 25.04.2015, 10:41     Titel:
  Antworten mit Zitat      
Servus Jan S,
vielen Dank für die rasche Antwort.
Mit ignorieren meine ich, dass Matlab das NaN nicht in die Berechnung mit einbezieht. Als Beispiel folgendes:

Ich will den Mittelwert der Vektoren ausrechen. Dabei möchte ich NaN nicht mit
Code:

Q(isnan(Q)) = 0;
 

gleich Null setzten.

Code:

Q =

     [1     2     3
      3   NaN   1
      1     1     1];

mean(Q);

 


Als Resultat erhalte ich dann:

Code:

ans =

    1.6667       NaN    1.6667


Nan wird berücksichtigt und somit erhalte ich für den 2. Vektor keinen Mittelwert. Gibt es keine Möglichkeit für Matlab das NaN zu ignorieren und mir den Mittelwert der verbleibenden zwei Werte zu berechnen?
D.h.
Code:
ans =

    1.6667       1.5       1.6667


Liebe Grüsse,
cinaja
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

aus der Statistics Toolbox
Code:

bzw. mit R2015a in MATLAB direkt
Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.04.15
Wohnort: DE
Version: ---
     Beitrag Verfasst am: 25.04.2015, 11:43     Titel:
  Antworten mit Zitat      
Hallo Harald,
das hatte ich auch schon versucht. Leider sollte die Matrix immer noch eine NxM-Matrix bleiben. Mit nanmean() erhält man einfach ein array mit den Zahlenwerten.

Gruss, cinaja
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du schreibst, du möchtest von
Q =

[1 2 3
3 NaN 1
1 1 1];
als Mittelwerte dies erhalten:
1.6667 1.5 1.6667

Genau das liefert
Code:


Und natürlich, wenn man Mittelwerte berechnet, kommt keine Matrix mehr heraus. Wie auch?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.04.15
Wohnort: DE
Version: ---
     Beitrag Verfasst am: 25.04.2015, 13:42     Titel:
  Antworten mit Zitat      
Hi,
der Mittelwert war nur ein Beispiel. Lasst uns nochmal zurück gehen zum Ausgangsbeispiel (oben):

Da habe ich Punkte in X-, Y- und Z-Richtung definiert. Diese sollen mittels des surf()-Befehls einen 3D-Körper bilden. Damit der Körper die Form annimmt welche ich möchte, war es nötig, NaN-Punkte zu definieren.

Nun möchte ich von diesem Körper den Trägheitstensor (O ist im Schwerpunkt) und die neuen X-,Y- und Z-Werte berechnen, falls sich der Körper dreht.

Das Problem ist, dass alle 9 Werte des Tensors = NaN sind, was bei der Berücksichtigung der tatsächlichen Punktmassen nicht der Fall sein sollte.

Ist es nun verständlicher?

Gruss, cinaja
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: 25.04.2015, 17:11     Titel:
  Antworten mit Zitat      
Hallo cinaja,

Es ist zwar ungefähr verständlicher. Aber bei der allgemeinen Beschreibung als Text kann man auch nur allgemein in Text-Form antworten.
Wenn Du den bisherigen Code postest (einen relevanten Ausschnitt zumindest), könnte man sehr leicht Code-Vorschläge machen.

Das Beispiel mit MEAN war irreführend. Es raubt Zeit ein zu stark vereinfachtes Beispiel zu posten, dessen Lösung Dich nicht weiter bringt.

Wahrscheinlioch kannst Du bei Deiner Berechnung des Trägheitstensors die Werte von NaN auf 0 setzen, falls es sich um die Massen an den entsprechenden Punkten handelt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.04.2015, 17:44     Titel:
  Antworten mit Zitat      
Hallo,

ich habe auch den Eindruck, dass es am besten wäre, die NaN auf 0 zu setzen. Was genau spricht denn dagegen?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.04.15
Wohnort: DE
Version: ---
     Beitrag Verfasst am: 17.05.2015, 16:47     Titel:
  Antworten mit Zitat      
Hallo zusammen,
entschuldigt für die späte Antwort, war im Urlaub. Smile
Habe es nun hingekriegt, hatte einen Fehler woanders.

Vielen Dank für die Hilfe!

cinaja
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 - 2024 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.