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

Wert zwischen 2 Werten aus Matrix

 

sbmiles21
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 09:00     Titel: Wert zwischen 2 Werten aus Matrix
  Antworten mit Zitat      
Hallo,

ich habe einen Vektor mit n Einträgen.
Habe nun als Vorgabe z.B 2,2

Möchte nun wissen zwischen welchen Werten 2.1 liegt.

z.B.:
A=[
0
1.1
1.8
2.0
2.2
3
4
5
]

Die Ausgabe sollte dann sein:2.0 und 2.2 bzw. die Feldinizes würden auch reichen
mhhh...

Gruss
Private Nachricht senden Benutzer-Profile anzeigen


Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 09:20     Titel:
  Antworten mit Zitat      
Hallo,
falls der Vektor, wie in dem Beispiel, bereits sortiert ist, dann kannst du das ziemlich einfach mit
Code:

i1 = find(A>2.1,'first');
i2 = find(A<2.1,'last');
 

berechnen. i1 und i2 geben die Position in A an. Die Werte kannst du dann natürlich einfach mit A(i1) bzw. A(i2) ermitteln.
mfg

Ajax
Private Nachricht senden Benutzer-Profile anzeigen
 
sbmiles21
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 09:36     Titel:
  Antworten mit Zitat      
hey,

danke für die schnelle Antwort. Das ist gut.
Hatte vergessen: Wie mache ich es wenn ich das selbe in einer Matrix machen will, z.B in der Spalte 3 nur "suchen" ?

Danke für die Hilfe

Gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
sbmiles21
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 09:43     Titel:
  Antworten mit Zitat      
Habe es so versucht:
Code:

y=1;
k5=eval(['b.cycle',num2str(y),' (:,1)']); % suche in Spalte1
        % find indizes
        ind1 = find(k5>2,'first');
        ind2 = find(k5<2,'last');
 


Bekomme jedoch einen fehler:
??? Error using ==> find
Second argument must be a positive scalar integer.

mhh...kann ich find überhaupt sagen, suche nur in Spalte X einer Matrix?
Finde dazu nichts. Muss ich die SPalte X herauskopieren extra?
Private Nachricht senden Benutzer-Profile anzeigen
 
sbmiles21
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 11:13     Titel:
  Antworten mit Zitat      
kannst du mir nochmal helfen? Ich komme irgendwie nicht drauf Sad

Also ich habe eine struct array
b.cycle1

welches eine Matrix mit x spalten und y zeilen enthält.



Dort möchte ich nur in Spalte z.B 3 suchen.

Mein Wert ist z.B 2.1

in Spalte 3 soll e mir dann die Einträge ausgeben, die </> 2.1 sind.
Also z.B 2.0 und 2.5

Die Ind. der Zeilen würden auch reichen. Wichtig das er nur in Spalte 3 sucht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 13:09     Titel:
  Antworten mit Zitat      
Hallo,
falls du nur in einer Spalte innerhalb einer Matrix suchen willst, kannst du ganz einfach die entsprechende Spalte wie folgt angeben:
Code:

spalte = 3;
i1 = find(A(:,spalte)>2.1,'first');
i2 = find(A(:,spalte)<2.1,'last');
 

Der Wert bestimmt sich dann folgendermaßen: A(i1,spalte), A(i2,spalte).
mfg

Ajax
Private Nachricht senden Benutzer-Profile anzeigen
 
sbmiles21
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 13:22     Titel:
  Antworten mit Zitat      
Hey,
danke. Habe es getestet, aber bekomme immer noch eine Fehlermeldung Sad .
Kann ich es auch auf ein Struct-Array anwenden?

hier mein Code:
Code:

y=1;
k7=eval(['b.cycle',num2str(y),' (:,3)']) %=b.cycle1(:,3)

i1 = find(k7>2.1,'first');
i2 = find(k7<2.1,'last');
 


Fehlermeldung:
??? Error using ==> find
Second argument must be a positive scalar integer.

Error in ==> test2 at 4
i1 = find(k7>2.1,'first');

mhh...
Private Nachricht senden Benutzer-Profile anzeigen
 
sbmiles21
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 13:25     Titel:
  Antworten mit Zitat      
ahh ok super, es geht .
das "," war das Problem Smile

Danke für deine Hilfe ! Hat mir sehr geholfen

Gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
sbmiles21
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2012, 18:34     Titel: Zwischenschritte füllen
  Antworten mit Zitat      
Hallo,

bin gerade am verzweifeln:( habe x,y koordinaten gegeben.

Code:

Schritt | Wert
1   9
2   8
3   7
4   6
5   4
9   6
15   9
21   12
22   13
23   14
24   10

 

Möchte nun die fehlenden zwischen schritte mit Werten füllen.
z.B.: Schritt 5-9, dort fehlen 3 Schritte und die dazugehörigen Werte.
Bei den Werte möchte ich einfach die Diff jeweils immer dazu addieren:

5 4
6 4.5
7 5
8 5.5
9 6


Sitze schon den ganzen Tag an einem Konstrukt rum, es klappt jedoch njicht ;( Gibt es vielleicht einen Trick?

Gruss

-> Da die Ausgangsdaten in enem structarray liegen, möchte ich diese daraus auslesen und die neue Tabelle mit den gefüllten Werten/Schritten in einem neuen Struct array speichern.
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: 01.07.2012, 20:16     Titel:
  Antworten mit Zitat      
Hallo sbmiles21,

Nein! Nicht mit EVAL!
Code:
k7 = b.(sprintf('cycle%d', y))(:,3);

Falls es Dich interessiert, wieso EVAL immer ein Klotz am Bein ist, findest Du im Forum hunderte Threads zu dem Thema.

Gruß, Jan
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.