Avatar billede brianb Nybegynder
03. maj 2008 - 15:20 Der er 4 kommentarer og
1 løsning

Beregning af spredning i Java (metode)

Hejsa eksperter,

Jeg sidder her og er igang med at lave en metode i java som kaldes spredning, men den er ved at give mig grå hår fordi den kommer med nogle forkerte værdier.

Nu kommer det matematiske lige først.
Først beregnes middelværdien(gennemsnit)
(samlet sum / antal)

fx ved et array = {1,2,3,4} som så er 10/4 = 2,5

Herefter beregnes spredningen ved hjælp af formelm

(1-2,5)^2+(2-2,5)^2+(3-2,5)^2+(4-2,5)^2 = ?

Til sidste tages kvadratroden af den samlede summasion, men jeg får nogle forkerte værdier efter at have beregnet middelværdien?

area = awt.Liste

if (e.getSource() == spredning)
                {

                    double sum = 0;
                    double middelværdi = 0;
                   
                    String[] items = area.getItems();
                    for(int i = 0; i < items.length; i++)
                    {
                        sum += Double.parseDouble(items[i]);
                    }
                    System.out.println("Sum: "+sum);
                   
                    middelværdi = sum/area.getItemCount();
                   
                    System.out.println("Middelværdi "+middelværdi);
                   
                    String[] item = area.getItems();
                    for(int i = 0; i < item.length; i++)
                    {
                        sum += Math.pow((Double.parseDouble(item[i])-middelværdi),2);
                        System.out.println(sum += Math.pow((Double.parseDouble(items[i])-middelværdi),2));
                    }
                    System.out.println("Sum "+sum);
                    sum = sum/area.getItemCount();
                    System.out.println("Ny Sum "+sum);
                    area.add("Spredning: "+(Math.sqrt(sum)));
                    System.out.println("Spredning: "+Math.sqrt((sum)));   
                }


Her har jeg lige lavet nogle system.out.println for 10 tal

Sum: 25.0
Middelværdi 2.5
25.5 <- HER ER FEJLEN, den starter med et så højt tal? Hvorfor?
30.0
30.5
35.0
35.5
36.0
40.5
45.0
45.5
70.0
Sum 70.0
Ny Sum 7.0
Spredning: 2.6457513110645907
Avatar billede arne_v Ekspert
03. maj 2008 - 15:24 #1
Prøv og lav en:

sum = 0;

mellem de to opsummeringer.
Avatar billede brianb Nybegynder
03. maj 2008 - 15:40 #2
Lige en tilføjelse til koden

for(int i = 0; i < item.length; i++)
                    {
                        sum += Math.pow((Double.parseDouble(item[i])-middelværdi),2);
                        System.out.println(sum += Math.pow((Double.parseDouble(items[i])-middelværdi),2));
                    }

sum = sum/(area.getItemCount()-1); // den her linje inden.
Avatar billede _carsten Nybegynder
03. maj 2008 - 16:16 #3
Har du prøvet denne

                    for(int i = 0; i < items.length; i++)
                    {  System.out.println(items[i]);
                        sum += Double.parseDouble(items[i]);
                    }

Du må næsten have flere værdier i items end du forventer
Avatar billede brianb Nybegynder
03. maj 2008 - 16:26 #4
Nå well jeg fandt fejlen kan dog ikke forklare hvad der går galt, og Arne du havde også delvist ret, jeg skulle åbenbart dividere med 2 så passer det, hvorfor? Det aner jeg ikke.

sum += Math.pow(((Double.parseDouble(item[i]))-middelværdi),2)/2;

Smid et svar arne :)
Avatar billede arne_v Ekspert
12. maj 2008 - 04:24 #5
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester