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

Mysteriöse Probleme mit Vergleichsoperatoren (<, >, &

 

Hiro
Forum-Anfänger

Forum-Anfänger



Beiträge: 23
Anmeldedatum: 10.12.08
Wohnort: ---
Version: RC2009a (7.7.0)
     Beitrag Verfasst am: 22.07.2009, 16:07     Titel: Mysteriöse Probleme mit Vergleichsoperatoren (<, >, &
  Antworten mit Zitat      
Hallo Leute,

jetzt bin ich ehrlich verwirrt.
Warum meldet MatLab mir bei folgendem Code

Code:

for times < 0
    times = times+year_length;
end
 


den Fehler "Unexpected MATLAB operator." für den "<"-Operator?

Private Nachricht senden Benutzer-Profile anzeigen


Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2009, 16:17     Titel:
  Antworten mit Zitat      
schau doch mal mit dem Befehl

Code:


welcher Datentyp 'times' überhaupt ist...

das müßte der Fehler sein

oder gib mal ein bischen mehr als beispiel code
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2009, 16:20     Titel:
  Antworten mit Zitat      
Hallo,

verwende anstelle von for das while schlüsselwort:
Code:

while times < 0
    times = times+year_length;
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.07.2009, 17:55     Titel:
  Antworten mit Zitat      
Hallo,

weil FOR erwartet eine Zuweisung keine Bedingung.
Deswegen hat Matlab FOR gleiche Eigenschaft wie FOREACH
Code:

% Zähl-Indizierung kann so
for id=1:1:10
   fprintf('Schritt-%d\n',id)
end
% oder so geschehen
run_id=[1:1:10];
for id=run_id
   fprintf('Schritt-%d\n',id)
end
 


Darum verwende besser WHILE-Loop, wenn du Bedingung hast, genau so, wie LittleX es vorgeschlagen hat
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiro
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 23
Anmeldedatum: 10.12.08
Wohnort: ---
Version: RC2009a (7.7.0)
     Beitrag Verfasst am: 23.07.2009, 13:34     Titel:
  Antworten mit Zitat      
Mit "while" funzt es.

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiro
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 23
Anmeldedatum: 10.12.08
Wohnort: ---
Version: RC2009a (7.7.0)
     Beitrag Verfasst am: 19.08.2009, 15:52     Titel:
  Antworten mit Zitat      
Idefix_1024 hat Folgendes geschrieben:

welcher Datentyp 'times' überhaupt ist...

das müßte der Fehler sein


*wiederausgrab*

times ist "single" und ein Vektor:

Code:

final_t=interp1(ls_cont, time_cont, sol_long);

times=[(final_t-(steps-1)*delta_t):delta_t:steps]';

% if times are less than 0 find the equivalent time of year positive value

while (times < 0)
   times = times+year_length;
end;
 


Aber du hast recht, der Fehler muss in "times" liegen.
Nachdem ich die Interpolation von "final_t" (x und Y waren vertauscht) korrigiert habe, wird "times" nun nicht mehr erstellt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiro
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 23
Anmeldedatum: 10.12.08
Wohnort: ---
Version: RC2009a (7.7.0)
     Beitrag Verfasst am: 20.08.2009, 10:40     Titel:
  Antworten mit Zitat      
Was ich nicht verstehe, ist, warum alle meine auf diese Art und Weise

Code:
times=[(final_t-(steps-1)*delta_t):delta_t:steps]';


erstellten Variablen "single" sind. Sollten sie nicht "double" sein, weil sie Spaltenvekoren sind?

Private Nachricht senden Benutzer-Profile anzeigen
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2009, 14:12     Titel:
  Antworten mit Zitat      
hatte dieses Thema in der Tat nicht mehr verfolgt... danke für die Nachricht!

tja hmm

da würde ich sagen ist vom Prinzip her schon irgendwas faul...

wenn ich
Code:

final_t = 10.0;
steps   = 10.0;
delta_t = 1.0;

times=[(final_t-(steps-1)*delta_t):delta_t:steps]'

whos times
 


ausführe, dann erhalte ich eine Variable "times" als double...

brich mal dein Programm auf was sehr kleines (wie zB das von mir angegebene) runter und poste das nochmal... evtl findet man so einen Ansatzpunkt...
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiro
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 23
Anmeldedatum: 10.12.08
Wohnort: ---
Version: RC2009a (7.7.0)
     Beitrag Verfasst am: 21.08.2009, 15:13     Titel:
  Antworten mit Zitat      
Danke, Idefix!

Hier die Parameter, wenn ich mein Problem so durchlaufen lasse:
Code:

whos times final_t steps delta_t
Name         Size          Bytes  Class

delta_t        1x1                 4  single
final_t        1x1                 4  single
steps          1x1                 4  single
times          0x1                 0  single
 


delta_t = 246.5970
final_t = 34467644
steps = 24840

Du hast recht. Für kleine "steps", "final_t" und "delta_t" funzt es einwandfrei -- ich habe es bis 10^5 für "steps" und "final_t" versucht.
Für 10^6 funzt es wieder nicht mehr.

Ist also der MatLab-Speicher zu klein dafür? Kann man den vergrößern?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.08.2009, 15:14     Titel:
  Antworten mit Zitat      
Hallo

ist eine Variable als single definiert, ist das Ergebnis automatisch single.
Code:

final_t = single(10.0);
steps   = 10.0;
delta_t = 1.0;

times=[(final_t-(steps-1)*delta_t):delta_t:steps]'

whos times
 


Aber ich verstehe nicht, warum sollte es hier Problem darstellen?
sinlge sind doch auch float-Zahlen, aber mit kleineren Präzision
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiro
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 23
Anmeldedatum: 10.12.08
Wohnort: ---
Version: RC2009a (7.7.0)
     Beitrag Verfasst am: 21.08.2009, 15:21     Titel:
  Antworten mit Zitat      
Das Problem ist, dass "times" in meinem Programm nicht erstellt wird.
Ein Symptom davon scheint zu sein, dass "times" "single" ist.

Idefix hat es als erster vermutet und ich stimme ihm inzwischen zu, das das Problem darin liegt (oder damit zu tun hat), dass "times" als "single" erstellt wird. Denn eigentlich sollte ein erstellter Vektor unabhängig von seinen Komponenten doch standardmäßig "double" sein, oder irre ich mich?

Daraus ergibt sich, dass bei der Berechnung und Erstellung des "times"-Vektors irgend was falsch läuft, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2009, 15:26     Titel:
  Antworten mit Zitat      
wenn du nicht selbst diese Variable erzeugst aber gerne hättest, dass die Variable vom Typ double ist... warum "castest" du die Variable nicht einfach so wie du sie willst

Code:

test    = 10;
whos test
test    = cast(test,'single')
whos test
test    = cast(test,'double')
whos test
 


vielleicht hilft das ja weiter....

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.08.2009, 15:27     Titel:
  Antworten mit Zitat      
delta_t = 246.5970
final_t = 34467644
steps = 24840

Bei solchen Werten wird es doch nie funktionieren:
Code:

% weil Start_Punkt  größer als End-Punkt
(final_t-(steps-1)*delta_t):delta_t:steps

% ich meine du kriegst so was wie
% (final_t-(steps-1)*delta_t) = 2.8342e+007
%
% und es soll es dir von 2Mio bis 20.000 hochzählen?
 


Zuletzt bearbeitet von denny am 21.08.2009, 15:34, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiro
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 23
Anmeldedatum: 10.12.08
Wohnort: ---
Version: RC2009a (7.7.0)
     Beitrag Verfasst am: 21.08.2009, 15:34     Titel:
  Antworten mit Zitat      
Ah, Hiro



Danke, denny!

Mal sehen...

Zuletzt bearbeitet von Hiro am 21.08.2009, 15:36, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.08.2009, 15:36     Titel:
  Antworten mit Zitat      
Dieser Ausdruck ist einfach falsch
Code:

times=[(final_t-(steps-1)*delta_t):delta_t:steps]'
 
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 - 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.