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

Fehlerquelle bei einfacher Rechnung

 

Juwe88
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 16.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2013, 22:31     Titel: Fehlerquelle bei einfacher Rechnung
  Antworten mit Zitat      
N'abend Leute

Ich sitz wieder vor meinem Programm und suche Fehler raus.
Ich schilder euch mal mein Problem.
Im folgendem Programm hab ich ein Kollektiv. Ich möchte, dass wenn gewisse Werte zur Kollektivgrenze passen, diese aus "Kollektiv" entnommen werden und zu "c" addiert werden. Zum Schluss wird dieses in "Haeufigkeit" gespeichert. Jedoch ist es so, dass wenn ich die Grenze "Ende" kleiner mache, dass nur noch weniger Werte berechnet werden. Normal sind 12.2. Wenn ich "Ende" nun auf 17 stelle, rechnet er mir nur noch bis 11.8. Kennt einer von euch vllt das Problem oder sieht das Problem in meinem Programm. Ich sitzt schon seit zwei Stunden dran.

Code:
Beginn=6.6;   Ende=20;    Skala=0.2;  [m,n]=size(Schiff);   Kollektiv=zeros(m,6);

a=((Ende-Beginn)/Skala)+1;  [m,n]=size(Kollektiv); Haeufigkeit=zeros(a,6);H_D2=zeros(a,1);
for i=1:1:a
       Haeufigkeit(i,1)=Beginn;
       H_D1(i,1)=Beginn;
       c=0;

    for j=1:1:m
    b=Kollektiv(j,1);

    if b==Beginn
        bb=Schiff{j,1};
        c=c+bb;
    end

    end

    Haeufigkeit(i,2)=c;
    H_D2(i,1)=c;
   Beginn=Beginn+Skala;
end


[EDITED, Jan, Bitte Code-Umgebung benutzen - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 27.05.2013, 23:42     Titel:
  Antworten mit Zitat      
bis wohin soll er denn bei 17 rechnen? wenn a durch ende beeinflusst wird und du bis a rechnest sollte man schon ne Änderung durch Endeänderung erwarten.
Schon mal was von Einrückungen gehört? Wink
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 27.05.2013, 23:46     Titel:
  Antworten mit Zitat      
kann ich so nicht nachvollzihen da der code ohne Schiff nicht lauffähig ist.
und bitte die code umgebung verwenden. und dein kollektiv enthällt nur nullen damit ist b==begin nie erfüllt, häufigkeit hat die dimension ax6 aber du benutz nur ax2 versteh ich auch nicht
Private Nachricht senden Benutzer-Profile anzeigen
 
Juwe88
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 16.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2013, 10:19     Titel:
  Antworten mit Zitat      
Guten Morgen.

Meine Berechnung soll mit "Beginn" beginnen und mit "Ende" enden. Soll heißen, dass wenn ich 17 in Ende eingebe, dieser dann auch bis 17 rechnet.
Durch diese Zeile
Code:
Haeufigkeit(i,1)=Beginn;

wird ja auch bis 17 die Grenzen in Haeufigkeit geschrieben. Nur leider rechnet er den Rest nur bis 11.8.

Die Datei "Schiff" ist sowas wie eine große Datenbank. Das "Kollektiv" hat genauso viele Spalten, wie "Schiff". Im "Kollektiv" sind nur die Tiefgänge auf gewisse Grenzen auf- oder abgerundet worden.
Den Code
Code:
Kollektiv=zeros(m,6);

vergesst ihr am besten wieder. Das ist nicht der Fehler, weil ich das nur für's Verständnis hingeschrieben habe.

Ich versuch jetzt nochmal den Code etwas übersichtlicher hinzuschreiben
Code:

Beginn=6.6;   Ende=20;    Skala=0.2;  [m,n]=size(Schiff);  

a=((Ende-Beginn)/Skala)+1;  [m,n]=size(Kollektiv); Haeufigkeit=zeros(a,6);         H_D2=zeros(a,1);
for i=1:1:a
       Haeufigkeit(i,1)=Beginn;
       H_D1(i,1)=Beginn;
       c=0;
       for j=1:1:m
             b=Kollektiv(j,1);

             if b==Beginn
                   bb=Schiff{j,1};
                   c=c+bb;
             end

         end
         Haeufigkeit(i,2)=c;
         H_D2(i,1)=c;
         Beginn=Beginn+Skala;
end


Den Befehl
Code:

Haeufigkeit=zeros(a,6);

mit der 6 ist egal. Ich benötige das später noch.

Und wäre nett, dass mir jemand erklärt, wie ich die Code-Umgebung nutze. Will irgendwie nicht klappen. Danke
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: 28.05.2013, 11:26     Titel:
  Antworten mit Zitat      
Hallo Juwe88,

Ich habe das Häckchen vor "BBCode in diesem Beitrag deaktivieren" in Deiner Nachricht entfernt. Denn BBCode ist für die Anzeige der Code-Umgebung notwendig.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 16.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2013, 11:48     Titel:
  Antworten mit Zitat      
Danke Jan

Eine Sache ist mir bei dem Programm noch aufgefallen.
Wenn ich die Grenzen einstelle, würden z.b. 36 Zeilen berechnet werden.
Das Programm rechnet aber nur bis 18. Also genau die hälfte. Das scheint mir kein Zufall mehr zu sein, aber der Fehler ist mir immernoch unklar.
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2013, 08:08     Titel:
  Antworten mit Zitat      
Hallo Juwe88,

dein Codefragment rechnet auf jedenfall bis Ende.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2013, 08:39     Titel:
  Antworten mit Zitat      
Hallo Juwe88,

ich würde das sowieso anders machen.
statt ein a=((Ende-Beginn)/Skala)+1; auszurechnen einfach

Code:

k=1
for i=Beginn:Skala:Ende
Haeufigkeit(k,1)=i;
k = k + 1;
end
 


Weil bei Deinem Aufaddieren von doubles im Matlab eine Ungenauigkeit passiert.
Deine Werte durch Aufsummieren (Beginn=Beginn+Skala;):
Code:
[6.8 7 7.2 7.4 7.6 7.8 8 8.2 8.4 8.6 8.8 9 9.2 9.4 9.59999999999999
 9.79999999999999 9.99999999999999 10.2 10.4 10.6 10.8 11 11.2 11.4
 11.6 11.8 12 12.2 12.4 12.6 12.8 13 13.2 13.4 13.6 13.8 14 14.2 14.4
 14.6 14.8 15 15.2 15.4 15.6 15.8 16 16.2 16.4 16.6]


Werte mit der Schleife von mir:
Code:
[6.8 7 7.2 7.4 7.6 7.8 8 8.2 8.4 8.6 8.8 9 9.2 9.4 9.6 9.8 10 10.2 10.4
 10.6 10.8 11 11.2 11.4 11.6 11.8 12 12.2 12.4 12.6 12.8 13 13.2 13.4
 13.6 13.8 14 14.2 14.4 14.6 14.8 15 15.2 15.4 15.6 15.8 16 16.2 16.4
 16.6]



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