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

Matrix durchsuchen und diese Werte zu weisen

 

Jimmyplot

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 22:48     Titel: Matrix durchsuchen und diese Werte zu weisen
  Antworten mit Zitat      
Hallo zusammen,
Ich habe eine unstetige DGL. -> 2 ODE Funktionen und 2 Events Funktionen. Sowie eine Funktion die das ganze Problem löst und plottet.
Einer der Eingangsparameter der Lösungs - Funktion ist ein Vektor der Länge N.
Innerhalb einer For-Schleife(Länge N) werden die ODES gelöst und als Ergebnis erhalte ich eine Matrix mit 2 Spalten und x-Zeilen.
Erste Spalte ist die Höhe die zweite Spalte ist die Geschwindigkeit.

Ich brauche einen Geschwindigkeitsvektor mit Werten bei Höhe=0.

So jetzt möchte ich die erste Spalte nach Werten gleich Null durchsuchen.
und dann mit diesen Ergebnis die gefundenen Werte als einen Vektor definieren.
Code:
k=find(x(:,1)==0); % Suche nach Werten x=0 ->ERROR

if min(size)(k)>0     % Überprüfe das k keine leere Menge ist

   
v(n)=x(k,2);   %Weise die gefundene Werte zu
a(n)=inf;             % Die Beschleunigung ist Null
end
else
    v(n)=NaN;   %
    a(n)=abs(a);
end


Das ist mein Beispielcode, so wie ich es mir vorstelle. Funzt natürlich nicht.

Vielen Dank Smile


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.03.2013, 23:48     Titel:
  Antworten mit Zitat      
Hallo,

Dein Code enthält Syntaxfehler.

Hilft dir das weiter?
Code:
x=rand(10, 2);
x(7, 1) = 0;
x(5, 2) = 0;

k=find(x(:, 1) == 0); % Suche nach Werten x=0 ->ERROR

if size(k)>0        % Überprüfe das k keine leere Menge ist
    v(n)=x(k,2);    %Weise die gefundene Werte zu
    a(n)=inf;       % Die Beschleunigung ist Null
else
    v(n)=NaN;   %
    a(n)=abs(a);
end


Grüße
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: 05.03.2013, 09:39     Titel:
  Antworten mit Zitat      
Hallo Seban,

Code:
if size(k)>0        % Überprüfe das k keine leere Menge ist

Das ist immer noch tückisch: SIZE gibt einen Vektor zurück, dessen Elemente einzeln verglichen werden. Das funktioniert zwar hier, da für Vektor-wertige IF-Bedingung automatisch ein ALL() eingefügt wird, es bleibt aber schwerer verständlich als nötig. Um genau zu sein geschieht dies:
Code:
if all(size(k) > 0) && ~isempty(size(k) > 0)

Besser:
Code:

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jimmyplot

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2013, 14:09     Titel:
  Antworten mit Zitat      
Hmmm leider habe ich keine Werte die genau Null sind, sondern nur Welche mit 0.1xx.
Kann ich die Suche irgendwie verfeinern so, dass nur werte gefunden werden
der Größe +-0.1xxx ?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.03.2013, 15:56     Titel:
  Antworten mit Zitat      
Hallo,
du könntest dann statt
Code:
k=find(x(:, 1) == 0);
folgendes verwenden:
Code:
k=find(abs(x(:, 1)) < 0.2);


Ist doch gar nicht so schwer, oder?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2013, 16:28     Titel:
  Antworten mit Zitat      
Danke, funzt! Man muss sich eben doch mehr zutrauen, dann klappt es!

Thema erledigt!!

Danke und genießt das gute Wetter!
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.03.2013, 20:28     Titel:
  Antworten mit Zitat      
Hallo Jan,
Jan S hat Folgendes geschrieben:
Besser:
Code:

Danke für die Korrektur, hab ich nicht richtig nachgedacht Sad

MfG
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.