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

if-abfrage

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2012, 20:34     Titel: if-abfrage
  Antworten mit Zitat      
Hallo zusammen!

Irgendwie hab ich ein großes Problem mit einem Programm und irgendwie steh ich komplett auf den Schlauch!

aa_sum ist eine (822x411) matrix, entf ein 1x65 vektor und angle ist auch ein 1x65 vektor. Ich habe jetzt versucht, mir die aa_sum ausgeben zu lassen, für die die Bedingungen enft und angle stimmen und erhalte einen 1x70 vektor. soweit hat das auch funktioniert.

Code:

for k = 1:65
a(k) = aa_sum((entf(k)), (angle(k)));
end

 


Jetzt mein Problem, ich will nicht nur die aa_sum werte von entf und angle, sondern ich will einen wertebereich abfragen, also ich will das alle werte von aa_sum ausgegeben werden für die gilt: entf +/-1 und angle +/-1. Ist das irgendwie möglich?

Hoff einer kann mir dabei helfen?

danke schonmal.


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2012, 21:43     Titel:
  Antworten mit Zitat      
http://www.mathworks.de/company/new.....ing-in-MATLAB/matrix.html siehe "logical indexing"
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 09:49     Titel:
  Antworten mit Zitat      
hallo!

Danke für den link, hab mir diesen jetzt mal durchgelesen, aber irgendwie löst der mein problem nicht ganz. ich probiers mal anhand eines beispiels zu erklären:

Mein angle-vektor enthält die werte
angle = 1.02, 2.8,3.0, 4.22 ...

mein enft-vektor sieht so aus:
entf = 20, 58, 200, 201 ...

und ich will jetzt, dass matlab nicht nur auf die werte zugreift, sondern dass es alle aa_sum-werte ausgibt, die zwischen +/-1 liegen:

-1 angle +1 also 0.2 1.02 2.02 oder 1.8 2.8 3.8

ist das irgendwie möglich?

mfg
 
tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 10:03     Titel:
  Antworten mit Zitat      
Hi,

Mir ist der Zusammenhang zwischen aa_sum, entf und angle nicht klar.

Ich kann mir aber nicht vorstellen, dass dein ursprüngliches Beispiel lauffähig ist, wenn in entf und angle nicht zufällig natürliche Zahlen standen.
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.09.2012, 10:20     Titel:
  Antworten mit Zitat      
Hallo,

Ich verstehe die Aufgabe auch noch nicht.
Allgemein kann man Intervalle so bearbeiten:
Code:
x = rand(1, 20);
index = and(x >= 0.1, x <= 0.5);
x(index)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 10:35     Titel:
  Antworten mit Zitat      
@Jan: Was ja letztendlich "logical indexing" + einem vektoriellen and ist
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 11:33     Titel:
  Antworten mit Zitat      
hi leute!

Danke schonmal. so ähnlich habe ich es auch schon gehabt, hab jetzt folgendes probiert.

angle_min = angle-1;
angle_max = angle+1;
entf_min = entf-1;
entf_max = entf+1;

Code:

for i = 1:length(angle)
index_angle(i) = and(angle(i) >= angle_min(i), angle(i) < = angle_max(i))
index_entf(i) = and(entf(i) >= entf_min(i), angle(i) <= angle_max(i))
end
 


Jetzt bekomme ich aber diese fehlermeldung:
??? index_angle(i) = and(angle(i) >= angle_min(i), angle(i) < = angle_max(i))
|
Error: The expression to the left of the equals sign is not a valid target for an assignment.

Irgendwie versteh ich gar nichts mehr, an diesem Problem sitz ich jetzt schon seit tagen und ich komm einfach nicht weiter!

MFG
 
Kascho
Forum-Century

Forum-Century


Beiträge: 195
Anmeldedatum: 24.03.10
Wohnort: Jena
Version: R2008b ... :(
     Beitrag Verfasst am: 05.09.2012, 11:46     Titel:
  Antworten mit Zitat      
Also ich hab das hier nur überflogen, aber du solltest als Variable nicht "angle" verwenden, da dies eine matlabfunktion zur Berechnung des Phasenwinkels ist.

Gruß, Kascho
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.09.2012, 15:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
??? index_angle(i) = and(angle(i) >= angle_min(i), angle(i) < = angle_max(i))

Das "<=" darf kein Leerzeichen zwischen "<" und "=" enthalten.

Gruß, Jan
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.09.2012, 16:01     Titel:
  Antworten mit Zitat      
Hallo flashpixx,

Ja, ich weiß das dies Logical indexing und ein vektorisiertes AND ist.
Wenn ein Link zur Dokumentation nicht weiter hilft, ist ein konkretes Beispiel oft hilfreicher.

Viele User dieses Forums haben Verständnisprobleme bei der englisch formulierten Dokumentation und erst nach einem auf das spezielle Problem zugeschnirttenen Lösung wird die Funktionsweise eines Befehls klar.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 18:17     Titel:
  Antworten mit Zitat      
hallo nochmal!

auf was man bei matlab alles aufpassen muss, danke!!

Der Code läuft jetzt mal ohne fehlermeldung durch, nur leider bekomme ich jetzt als lösungsvektor einen 1x65 längen vektor mit lauter 1er drinnen.
Das sollte doch auch nicht sein, oder?

Eigentlich sollte matlab doch in der schleife alle werte einzlen abfragen und nur wenn die bedingungen erfüllt sind, gibt matlab mir den index aus? Oder versteh ich das falsch.

Ich schreibe euch mal den aktuellen code:


for i = 1:length(an)
index_an(i) = and(an(i) >= an_min(i), an(i) < = an_max(i)) ;
index_entf(i) = and(entf(i) >= entf_min(i), angle(i) <= angle_max(i)) ;
a = a_sum(entf(index_entf(i), an(index_an(i));

end

Matlab gibt mir jetzt für a immer den gleichen wert aus, weil ja index_enft und index_an immer 1 ist.

habe ich da irgendwo in meiner schleife einen Fehler?

MFG
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 20:53     Titel:
  Antworten mit Zitat      
Was erwartest Du?
Code:
an_min = an-1;
an_max = an+1;
index_an(i) = and(an(i) >= an_min(i), an(i) <= an_max(i)) % oder:
index_an(i) = and(an(i) >= an(i)-1, an(i) <= an(i)+1)  % also:
index_an(i) = and(0 >= -1, 0 <= +1)
index_an(i) = 1


Ich habe die Dimensionen der Matrix aa_sum immer noch nicht verstanden.
Wenn Du aa_sum(entf(k), an(k)) schreibst, heißt das doch, dass entf
ganze Zahlen zwischen 1 und 822 und an ganze Zahlen zwischen 1 und 411
enthält. Was heißt dann das Intervall +/-1? Das sind ja dann die benachbarten
Matrixelemente. An anderer Stelle schreibst Du aber an sei 1.2 oder 2.8?

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 21:40     Titel:
  Antworten mit Zitat      
hallo!

Ich will nicht, dass matlab das benachbarte matrixelement nimmt, sondern die nächste größere zahl.
Das ist so, wie in physik bei einer Fehlerangebe, man bekommt z.B. den wert 1.2 heraus und man weiss aus erfahrung, das der wahre wert irgendwo zwischen 1 und 1.4 liegt, also 1.2+/-0.2.
Und genau das, will ich jetzt, dass matlab macht. ich will nicht nur einen bestimmten wert, sondern so eine art spanne rund um eine zahl aus der matrix a_sum.

Ist irgendwie blöd zu erklären, aber vielleicht hats geholfen.

MFG
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.09.2012, 10:16     Titel:
  Antworten mit Zitat      
Hallo,

Also ich verstehe immer noch nicht, was Du genau erreichen möchtest.
Soweit ich das verstehe würdest Du für jedes Paar aus "entf" und "angle" eine andere Anzahl von Punkten erhalten. Richtig?

Mir wird aber nicht klar, welches der Werte-Bereich ist, in dem Du die Intervalle um "entf(i)" und "angle(i)" suchst.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Tusor
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 02.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2012, 10:57     Titel:
  Antworten mit Zitat      
Da hier offenbar keiner weiß wie deine Daten aussehen würde ich mal drum bitten, die drei Variablen hier zur Verfügung zu stellen (aa_sum, entf, an). Dann kann man vielleicht herausfinden, was du genau vor hast. Aber eine reelle Zahl als Index für eine Matrix zu verwenden erscheint mir wirklich unlogisch. Vielleicht liegt da auch schon das Problem?
Also was ist aa_sum? Was bedeuten die Dimensionen von aa_sum? Was ist entf? Was sagt die Länge von entf? Und das gleiche nochmal für an/angle.
Wenn du den wahren Inhalt nicht verraten kannst/darfst dann bitte ich um ein Minimalbeispiel mit anderen Bezeichnungen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.