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

Integer-Zahl

 

lukel
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 27.08.15
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 23.11.2016, 17:12     Titel: Integer-Zahl
  Antworten mit Zitat      
Hallo Leute,

ich erstelle eine recht große leere Matrix bevor ich diese Fülle. Dafür berechne ich mir die benötigte Anzahl an Zeilen o.
Bei den ausgewählten Zahlen kommt für o=9,35361e+05 raus.

Ich bekomme als ERROR:

Error using zeros
Size inputs must be integers.

Error in exp_qua_Reg (line 25)
RegressionsErgebnisse=zeros(o,5);

Ich glaube es liegt daran das o mit e+05 angegeben wird.
Bei anderen Ausgangswerten bekomm ich aber zum Beispiel o=11333311 raus und dann klappt es. Dort hat das Ergebnis kein e+... obowhl der Wert größer ist.

Wo liegt der Fehler, dass das nicht immer funktioniert?

Code:

aSt=1830; % Erhöhen
Schritta=1;
aEn=1850;
bSt=-6.6; % Verringern
Schrittb=-0.01;
bEn=-6.8;
cSt=0.08; % Erhöhen in kleinen Schritten
Schrittc=0.001;
cEn=0.1;
dSt=0; % Erhöhen
Schrittd=0.1;
dEn=10;

o=((aEn-aSt)/Schritta+1)*((bEn-bSt)/Schrittb+1)*((cEn-cSt)/Schrittc+1)*((dEn-dSt)/Schrittd+1);
RegressionsErgebnisse=zeros(o,5);
 


Mit freundlichen Grüßen

Lukas
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: 23.11.2016, 18:51     Titel: Re: Integer-Zahl
  Antworten mit Zitat      
Hallo lukel,

Das "e+XY" stammt nur aus der Anzeige am Bildschirm. Intern werden die Zahlen im DOUBLE-Format gespeichert, da kommt also kein "e+" drin vor. Wie die Zaheln im Command-Window angezeigt werden, kann man mit dem format Befehl einstellen. Intern ändert das aber nichts an den Werten.

Das Problem ist in der Fehlermeldung bereits eindeutig beschrieben:
"Size inputs must be integers."
Die Werte sind dann keine Integer, also keine ganzen Zahlen.
Code:
o = ((aEn-aSt)/Schritta+1)*((bEn-bSt)/Schrittb+1)*((cEn-cSt)/Schrittc+1)*((dEn-dSt)/Schrittd+1);

if o ~= round(o)
  fprintf('Wir haben ein Problem: o ist nicht ganz-zahlig: %.16g\n', o);
end
RegressionsErgebnisse=zeros(o,5);

round , ceil oder floor können aus o eine Ganz-Zahl machen. Welcher Befehl davon geeignet ist, hängt von Deinem Problem ab.

"o" ist übrigens ein Variablen-Namen, den man gerne vermeidet, genau wie "l", um die Verwechselungen mit 0 ind 1 zu umgehen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 27.08.15
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 23.11.2016, 20:37     Titel:
  Antworten mit Zitat      
Hey Jan,

Danke. Das hatte ich auch als erstes überprüft, dann aber verworfen. Jetzt aber nochmal genauer hingesehen und weit hinter dem Komme noch eine Stelle gefunden. aber die kann ich ja wegrunden.

Kannst du mir trotzdem sagen warum das so ist. Die kommt aus dem Faktor

(cEn-cSt)/Schrittc+1

Wenn ich da die Zahlen einsetze:

(0,1-0,0Cool/0,001+1

ist per Hand gleich 21.

Matlab gibt mir für den Term aber 21.000000000000004 raus.
Warum?
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: 24.11.2016, 13:34     Titel:
  Antworten mit Zitat      
Hallo lukel,

Das ist der zu erwartende Effekt beim Rechnen mit begrenzter Precision. In Matlab werden Zahlen (wie üblich bei Programmiersprachen) im IEEE754-Format gespeichert. Das ist eine binäre Darstellung und fast alle Dezimal-Zahlen haben darin keine exakte Darstellung. Das gilt übrigens auch umgekehrt, ist also keine Besonderheit des Binär-Systems. Ein typisches Beispiel ist:
Code:
0:0.1:1 == 0.3

Da 0.1 keine exakte Darstellung im Binärsystem mit begrenzter Stellenzahl hat, ist 0.1+0.1+0.1 nicht exakt 0.3 (bzw. dessen Darstelluing im Binärsystem).
Das kann auch große Auswirkungen haben:
Code:
1e17 + 1 - 1e17

Das ergibt nicht 1, sondern 0, da 1e17 mehr als die etwa 16 Stellen hat und 1 dazu zu addieren keinen Auswirkungen hat. Es kommt beim Summieren also auf die Reihenfolge der Summanden an, im Gegensatz zur mathematischen Definition.

Bei numerischen Algorithmen muss man das unbedingt berücksichtigen, z.B. wenn man einen Differenzen-Quotienten zur Näherung der Ableitung verwendet. Hier können bei zu kleinen Abständen die Ergebnisse vollkommen zufällig werden, da man durch eine winzige Zahl teilt.

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 - 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.