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

Von bis Werte aus einer Matrix erhalten

 

Pat87
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 15.09.2015, 21:31     Titel: Von bis Werte aus einer Matrix erhalten
  Antworten mit Zitat      
Hallo, ich bräuchte mal einen Tipp zur Umsetzung! Hab da noch nichts drüber gefunden.

Ich habe eher mit Simulink zu tun, benötige jetzt aber Matlab, da ich das mit Simulink nicht umsetzen kann.

Ich habe alle meine Werte von Simulink in eine 6x3007 Matrix A zusammen gefasst.
Ich möchte eine 2. Matrix B schaffen, in der spezielle Zeilen von Matrix A übertragen werden. Das krieg ich auch so weit hin, in dem ich den Bereich angebe.
Wenn ich aber ein paar Parameter ändere, beginnt der Bereich früher bzw später an, müsste also die Zeilen wieder raussuchen und das ist mir zu aufwendig.

In der 1. Spalte habe ich eine Zahlenfolge und in der 2. eine Zahlenfolge, die immer zwischen 0 und 720 verläuft, aber beide laufen synchron mit gleichen Abständen.
Ich müsste Matlab sagen, das er entweder in der 1. Spalte alle Werte zwischen (ungefähr) 2 Werten ausgibt oder eine Schleife für die 2. Spalte,
in der Matlab ab der n-Wiederholung die Werte zwischen 0 und 720 ausgibt.
Wie kann man das elegant programmieren? Oder gibt es da andere Möglichkeiten (leichtere)?

Sollte man den Bereich direkt und ohne Matrix B plotten können, nehme ich da bevorzugt Vorschläge/Ideen an.

Vielen Dank schon 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: 16.09.2015, 09:34     Titel: Re: Von bis Werte aus einer Matrix erhalten
  Antworten mit Zitat      
Hallo Pat87,

Ich verstehe die Frage nicht. Die bisherige Formulierung ist dafür zu abstrakt.

Zitat:
Wenn ich aber ein paar Parameter ändere, beginnt der Bereich früher bzw später an, müsste also die Zeilen wieder raussuchen und das ist mir zu aufwendig.

Was bedeutet das?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 16.09.2015, 15:12     Titel:
  Antworten mit Zitat      
Stimmt, habe ich viel zu abstrakt erklärt ^^
Mein Modell ist ein Verbrennungsmotor, der alle 720° von vorne beginnt (einspritzen, zünden etc)
Matrix A ist stark verkürzt im Anhang. Hoffe, damit wird mein Problem klarer.
Die ersten Werte sind nicht zu gebrauchen, da meine nicht exakten Annahmen (Zustand im Zylinder) die Werte beeinflussen,
aber nach ein paar Umdrehung wird der Einfluss immer kleiner (pendelt sich ein).

Deshalb möchte ich die Werte von einem zb 5. oder 6. Zyklus haben, alle darauf folgenden Zyklen brauche ich nicht, da der Unterschied nur minimal ist.

Die Werte vom 5. Zyklus will ich plotten, deshalb hab ich eine Matrix B, in der nur die Werte vom 5. Zyklus sind.
Die Zeilen, wann dieser Zyklus beginnt/endet, sind fest in Matrix A, solange ich den Parameter Drehzahl nicht ändere.
Wenn ich die Drehzahl höher einstelle, beginnt der 5. Zyklus ein paar Zeilen früher (die Sprünge in Spalte 1 und 2 werden größer).

Deshalb müsste ich in Matrix A manuell suchen, wann der 5. Zyklus beginnt, meine Definition von Matrix B ändern und dann plotten.
Das will ich automatisieren, in dem ich Matlab in Matrix A nach Anfang und Ende des 5. Zyklus suchen lasse und das dann plotten lasse.

Hoffe, ich konnte jetzt dir weiter helfen, mir weiter zu helfen ^^

Matrix A.png
 Beschreibung:

Download
 Dateiname:  Matrix A.png
 Dateigröße:  23.45 KB
 Heruntergeladen:  265 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.09.2015, 16:11     Titel:
  Antworten mit Zitat      
du musst doch nur nach der stelle 720 in spalte C suchen und davon halt den 5. oder so. mir ist das problem noch nicht ganz klar. am besten du postest mal ein lauffähiges minimalbeispiel und zeigst daran was nicht so klappt wie du dir das vorstellst.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 16.09.2015, 19:19     Titel:
  Antworten mit Zitat      
Die Idee hatte ich auch, genauso den absoluten Winkel (Spalte B) zu verwenden, in dem ab der Zeile mit dem Wert (5*720) 3600
bis zur Zeile mit dem Wert (6*720) 4320 alle Werte in eine Matrix kommen bzw direkt geplottet werden.

Mir kommt die Idee mit dem absoluten Winkel einfacher vor, da ich keine Schleife brauche, sondern direkt nach einem Wert suche. Deswegen arbeite ich da gerade dran.
Mein Problem ist nur, die Zeilennummer als Zahl zu bekommen, mit der ich weiter arbeiten kann.
Ich finde immer nur die Lösung als Spaltenvektor [0 0 1 0 0]', ich dagegen will die Zahl 3 haben, weil es die 3. Zeile ist.
Ich weiß, dass man mit row die Zeile ausgegeben kann und das man mit find die Zeile finden kann, aber wie verbinde ich diese Befehle miteinander?

Bisher versteht Matlab mich noch nicht ^^

Wert_finden.m
 Beschreibung:
Hoffe man versteht, was ich will.
Bin im Programmieren (noch) eine Niete. ^^

Download
 Dateiname:  Wert_finden.m
 Dateigröße:  553 Bytes
 Heruntergeladen:  325 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.09.2015, 20:01     Titel:
  Antworten mit Zitat      
Zitat:
Ich weiß, dass man mit row die Zeile ausgegeben kann

der befehl row ist mir nicht bekannt.
find giebt doch den index aus
Code:
find([0 0 1 0 0])
gibt doch 3 zurück
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 17.09.2015, 00:29     Titel:
  Antworten mit Zitat      
Du hast Recht, hab das in einer kleinen Matrix ausprobiert und es funktioniert.
Hatte in meinem Modell in der Matrix A entdeckt, das es immer ein vielfaches von 720 existiert, deshalb das '==' Zeichen. Aber bei mir gab es nur das:
Code:

Zeile = find(A(:,1) == 3600)
Zeile = "Empty matrix: 0-by-1"


Da es bei kleineren Matrizen ging, hab ich kleinere Werte getestet und sehe da:
Code:

Zeile = find(A(:,1) == 180)    
Zeile = 1 % stimmt

Code:

Zeile = find(A(:,1) == 720)
Zeile = 85 % stimmt auch

Ich glaube, es liegt es daran, das ich '==' verwende und die Zahl in der Matrix [3600.00000000005] lautet. Wie kann ich Matlab sagen, er soll die Zeile nehmen, die dem Wert am dichtesten ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 17.09.2015, 00:45     Titel:
  Antworten mit Zitat      
Hab darunter natürlich was gefunden Embarassed
Code:
 
[I Zeile]=min(abs(A(:,1)-3600));
 

Das funktioniert schon mal, geht das auch ohne die Variable I? Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 17.09.2015, 09:44     Titel:
  Antworten mit Zitat      
Zitat:
geht das auch ohne die Variable I?

wenn deine matlab version nicht allzu alt ist geht
Code:
[~,Zeile]=min(abs(A(:,1)-3600));

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 17.09.2015, 23:38     Titel:
  Antworten mit Zitat      
Vielen Dank, hat geklappt ^^

Vielen Dank für die Impulse, das Problem war wirklich nicht schwer, aber irgendwie sah ich die Lösung nicht selbst Wink
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.