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

Befehl find gibt leere Matrix (1 by 0) aus

 

Gast1987

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2014, 02:23     Titel: Befehl find gibt leere Matrix (1 by 0) aus
  Antworten mit Zitat      
Kann mir bitte Jemand helfen, bin kurz vorm heulen. Wenn ich in den unten abgebildeten Coden den ganz unten stehenden Befehl find verwende, bekomme ich keinen Index Wert, sondern lediglich eine leere Matrix (1 by 0). Wo liegt mein Fehler? Hab schon in anderen Foren gelesen, das es ein Rundungsfehler sein soll... Es erscheint keine Fehlermeldung oder Warnung!

Code:

%% Konstanten

x=0.35:0.01:0.48;
y=1.5;          
Di=11;      

%% Berechnung diverser Werte
b=x*Di;          
h=y*Di;

Da=Di/2+b+Di/2 ;            

AFe=pi/4*Di^2;  

lFe= 2*Di*(x+y);

AW= x*y*Di^2;    

lm=pi*Di*(1+x);  

AO=pi*Di^2*(y*(1+2*x)+.25*(1+2*x).^2);      

VFe= pi/2*Di^3*(y+x+(x.^2)+0.5);        

VCu= pi*Di^3*y*x.*(1-x);      

   %% Ergebnisse und Ergebnissweitergabe
 
index_optimal= find(x==0.4);

 


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 28.03.2014, 08:55     Titel:
  Antworten mit Zitat      
Hallo,
das ist ein Rundungsproblem von Matlab.
Du erzeugst einen Vektor, wenn du diesen anschaust, siehst du aber, dass nicht 0.35 0.36 0.37 usw da steht. Sondern jeweils noch Nullen dahinter stehen. Dass ist ein Zeichen dafür, dass diese Zahl nicht exakt nur 2 Stellen hat.
Nimm z.B. mal das von dir gesucht x == 0.4, also x(6) und führe folgendes durch:
Code:

format long;
x = 0.35:0.01:0.48;
X = x-0.4;
X(6)
 

Es wird dir der sehr sehr kleine REst angezeigt, der bewirkt, dass x(6) eben nicht gleich 0.4 ist.

Die schnellste Lösung, die mir jetzt einfällt ist, die Vektorerzeugung mit exakt 2-stelligen Zahlen zu erzwingen:
Code:

x = (ceil((0.35:0.01:0.48)*100)/100);
X = x-0.4;
X(6)

hier siehst du, dass der Rest von x(6) - 0.4 = 0 ist, so wie du es möchtest.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

eine andere Möglichkeit: nicht auf Gleichheit testen, sondern auf geringe Abweichung, z.B.

Code:
index_optimal= find(abs(x-0.4) < 1e-12);


Bitte Beispiele möglichst auf den nötigen Code beschränken. Hier sind ja nur zwei Befehlszeilen wirklich relevant.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2014, 11:26     Titel:
  Antworten mit Zitat      
Super, beide Lösungen können mir helfen. Vielen Dank euch beiden Exclamation Exclamation Very Happy
 
robbog
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 21.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2014, 23:16     Titel:
  Antworten mit Zitat      
alternatvi kann man auch mit

Code:


arbeiten. Dabei wird bei Zahlen die Bankenschreibweise mit lediglich 2 Nachkommastellen verwendet. Allerdings nimmt der Befehl Einfluss auf alle derzeitigen Werte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Ju

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2014, 10:01     Titel: find Befehl => Too many output arguments.
  Antworten mit Zitat      
Ich häng mich einfach mal hier an den Thread mit ran, da mein Problem auch den find Befehl betrifft.
Eigentlich ganz simpel: ich habe ein 179*71 Werte großes Feld in einem geladenen matfile und will alle Werte in einem bestimmten Intervall finden.
Auf die Zeile
x = find(-0.5 < NAO_PC & NAO_PC < 0.5);

reagiert Matlab mit der Meldung:

??? Error using ==> NAO_PC
Too many output arguments.

Error in ==> korrelation at 41
x = find(-0.5 < NAO_PC & NAO_PC < 0.5);

Wo ist der Fehler?? Sad

Besten Dank schonmal,
Juju
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.04.2014, 10:19     Titel:
  Antworten mit Zitat      
Hallo,

find ist aber auch das einzige, was deine Frage mit der ursprünglichen zu tun hat ;) Ein neuer Thread wäre also geschickter gewesen.

Was ist denn NAO_PC? Eine Variable, ein Skript, eine Funktion?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2014, 10:25     Titel:
  Antworten mit Zitat      
Sorry Embarassed

NAO_PC ist eine Variable. Besteht im Wesentlichen aus Werten zwischen -5.00 und 5.00.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.04.2014, 10:29     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung legt nahe, dass NAO_PC eben keine Variable, sondern ein Skript oder eine Funktion ohne Rückgabeargumente ist. Bitte überprüfen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2014, 10:43     Titel:
  Antworten mit Zitat      
Aha, der Hund war schon im mat-file selbst drin. Neues gemacht, jetzt läufts.
Danke!
 
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.