Avatar billede sth Novice
04. november 2001 - 14:44 Der er 9 kommentarer og
1 løsning

Pression i beregninger:

antal: 3
middel_y: 853,333333333333
middel_x: 853,333333333333
spredning_x: 1426,19540503163
spredning_y: 1426,19540503163
SAK_x: 4068066,66666667
SAK_y: 4068066,66666667
SAP_xy: 4068066,66666667
b: 1
a: -2,27373675443232E-13
Bedste rette linie: -0,0000+(1,0000*X)
Avatar billede sth Novice
04. november 2001 - 14:45 #1
Nå fik da ikke det hele med, komer her
Er der en bestemt måde hvormed kan sikre pressionen  i sine regninger ?

Jeg har noget kode der giver et forkert resultat !
Resultatet skulle have været dettte:

antal: 3
middel_y: 853,333333333333
middel_x: 853,333333333333
spredning_x: 1426,19540503163
spredning_y: 1426,19540503163
SAK_x: 4068066,66666667
SAK_y: 4068066,66666667
SAP_xy: 4068066,66666667
b: 1
a: 0
Bedste rette linie: 0,0000+(1,0000*X)

men jeg får dette:

antal: 3
middel_y: 853,333333333333
middel_x: 853,333333333333
spredning_x: 1426,19540503163
spredning_y: 1426,19540503163
SAK_x: 4068066,66666667
SAK_y: 4068066,66666667
SAP_xy: 4068066,66666667
b: 1
a: -2,27373675443232E-13
Bedste rette linie: -0,0000+(1,0000*X)

det kunne se ud til at der bliver afrundet forkert, hvad sker der

hvis i har brug for noget kode kan i også få lov til at se dette, så sig bare til
Avatar billede sth Novice
04. november 2001 - 14:47 #2
jeg kan da lige oplyse at:
Y-værdiernerne er: 10  50  2500
X-værdiernerne er: 10  50  2500

Alle værdier hentes fra en Access db
Avatar billede somaliomar Praktikant
04. november 2001 - 14:51 #3
1. Hvad er det koden gør?
2. Hvad betyder pressionen? Mener du præcision?
Avatar billede www.net-ware.dk Nybegynder
04. november 2001 - 16:56 #4
middelværde er summen af værdierne/antal
SAK er summenen af kvadrattet på (værdi- middelværdi)
Spredning er kvadratrodden af følgende
((antalværdier gannge summen af kvadratet på værdierne) minus (kvadratet af summen af værdierne)). Alt dette skal divideres med antalet gange (antalet minus 1)

A og b er værdierne i liniesligning. Den formel vil jeg gerne sende til dig ( kan ikke læses hvis jeg skriver den ind). og billeder kan ikke indsættes.
Hvis du sender en mail til lbl@net-ware.dk så skal jeg sende dig alle formelerne

Avatar billede sth Novice
04. november 2001 - 18:01 #5
min kode ser sådan ud
<%
Session(\"beregn_id\")=1



Set conn = server.CreateObject(\"adodb.Connection\")
conn.open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath (\"halstat_db.mdb\")
\'***********find antal*************
Sqlantal = \"SELECT Count(ID) As antal From data_hist WHERE data_hist_beregn_nr=\"&Session(\"beregn_id\")
Conn.Execute Sqlantal

Set rs = conn.Execute(Sqlantal)
antal=rs(\"antal\")
response.write \"antal:&nbsp;\"&antal
response.write \"<BR>\"



\'***********find gennemsnit på Y (sandværdi)*************
Sqlmiddel_y = \"SELECT avg(sand) As middel_y From data_hist WHERE data_hist_beregn_nr=\"&Session(\"beregn_id\")
Conn.Execute Sqlmiddel_y

Set rs = conn.Execute(Sqlmiddel_y)
middel_y=rs(\"middel_y\")




response.write \"middel_y:&nbsp;\"&middel_y
response.write \"<BR>\"


\'***********find gennemsnit på X (sandværdi)*************
Sqlmiddel_x = \"SELECT avg(malt) As middel_x From data_hist WHERE data_hist_beregn_nr=\"&Session(\"beregn_id\")
Conn.Execute Sqlmiddel_x

Set rs = conn.Execute(Sqlmiddel_x)
middel_x=rs(\"middel_x\")

response.write \"middel_x:&nbsp;\"&middel_x
response.write \"<BR>\"








\'***********find spredning på X (måltværdi)*************
spredning_x=0
Sqlspredning_x = \"SELECT * From data_hist WHERE data_hist_beregn_nr=\"&Session(\"beregn_id\")
Conn.Execute Sqlspredning_x

Set rs = conn.Execute(Sqlspredning_x)
  DO WHILE NOT rs.EOF
spredning_x=spredning_x +((rs(\"malt\")-middel_x)^2)

  rs.MoveNext
  LOOP
RS.Close
spredning_x=sqr (spredning_x/(antal-1))
response.write \"spredning_x:&nbsp;\"&spredning_x
response.write \"<BR>\"


\'***********find spredning på Y (sandværdi)*************
spredning_y=0
Sqlspredning_y = \"SELECT * From data_hist WHERE data_hist_beregn_nr=\"&Session(\"beregn_id\")
Conn.Execute Sqlspredning_y

Set rs = conn.Execute(Sqlspredning_y)
  DO WHILE NOT rs.EOF
spredning_y=spredning_y +((rs(\"sand\")-middel_y)^2)

  rs.MoveNext
  LOOP
RS.Close
spredning_y=sqr (spredning_y/(antal-1))
response.write \"spredning_y:&nbsp;\"&spredning_y
response.write \"<BR>\"


\'***********find SAK x*************

SAK_x = (((spredning_x)^2)*(antal-1))
response.write \"SAK_x:&nbsp;\"&SAK_x
response.write \"<BR>\"
\'***********find SAK y*************

SAK_y = (((spredning_y)^2)*(antal-1))
response.write \"SAK_y:&nbsp;\"&SAK_y
response.write \"<BR>\"

\'***********find SAP xy*************


Sqlspredning_y = \"SELECT * From data_hist WHERE data_hist_beregn_nr=\"&Session(\"beregn_id\")
Conn.Execute Sqlspredning_y

Set rs = conn.Execute(Sqlspredning_y)
  DO WHILE NOT rs.EOF
SAP_xy=SAP_xy +((rs(\"sand\")-middel_y)*(rs(\"malt\")-middel_x))

  rs.MoveNext
  LOOP
RS.Close
response.write \"SAP_xy:&nbsp;\"&SAP_xy
response.write \"<BR>\"

\'***********find b *************

b=sap_xy/sak_x

response.write \"b:&nbsp;\"&b
response.write \"<BR>\"

\'***********find a *************

a = middel_y-(middel_x*b)

response.write \"a:&nbsp;\"&a
response.write \"<BR>\"


\'***********Bedste rette linie *************

a = middel_y-(middel_x*b)
Bedste_rette_linie=Formatnumber((a),4) & \"+(\" & Formatnumber((b),4) &\"*X)\"
response.write \"Bedste rette linie:&nbsp;\"&Bedste_rette_linie
response.write \"<BR>\"


\'***********find SAK_res *************

SAK_res=sak_y-((sap_xy^2)/sak_x)


response.write \"SAK_res:&nbsp;\"&SAK_res
response.write \"<BR>\"

\'***********find Sm *************

Sm=sqr(SAK_res/(antal-2))


response.write \"Sm:&nbsp;\"&Sm
response.write \"<BR>\"


Sqlmax_x = \"SELECT max(malt) As max_x From data_hist WHERE data_hist_beregn_nr=\"&Session(\"beregn_id\")
Conn.Execute Sqlmax_x

Set rs = conn.Execute(Sqlmax_x)
max_x=rs(\"max_x\")
response.write \"max_x:&nbsp;\"&max_x
response.write \"<BR>\"


\'***********find t 0,975 (antal-2 *************
sqlt0975 = \"SELECT verdi From t0975 WHERE antal=\"&antal-2
Conn.Execute sqlt0975

Set rs = conn.Execute(sqlt0975)
t0975=rs(\"verdi\")
response.write \"t0975:&nbsp;\"&t0975
response.write \"<BR>\"



\'***********find 95% konfidensinterval plus *************

konfidensinterval_plus=a+(b*max_x)+t0975*Sm*sqr((1/antal)+(((max_x-middel_x)^2)/SAK_x))



response.write \"konfidensinterval_plus:&nbsp;\"&Formatnumber((konfidensinterval_plus),4)
response.write \"<BR>\"


\'***********find 95% konfidensinterval minus *************

konfidensinterval_minus=a+(b*max_x)-t0975*Sm*sqr((1/antal)+(((max_x-middel_x)^2)/SAK_x))



response.write \"konfidensinterval_minus:&nbsp;\"& Formatnumber((konfidensinterval_minus),4)
response.write \"<BR>\"

\'***********største beregnede fejl for reg*************

max_reg_fejl=konfidensinterval_plus-max_x


response.write \"max_reg_fejl +/-:&nbsp;\"& Formatnumber((max_reg_fejl),4)
response.write \"<BR>\"
%>

databasen indeholder følgende felter:
ID                   
data_hist_beregn_nr
sand
malt

Avatar billede www.net-ware.dk Nybegynder
04. november 2001 - 19:32 #6
Nu hvor jeg læser dit spørgsmål igen. Det som du spøgerger efter er jo præsition i resultateterne. Da det er nøjagtigheden i den datatype du arbejder med som er afgørende, så er der 2 muligheder enten at kode om og regne med \"brøker\" indtil du slutter. eller fastlægge et niveau for præcisionen. i det sidste tilfælde kan du anvende
Round( værdi, decimaler)
Det bliver nok svært at arbejde helt igennem med brøker da du arbejder med kvadratrod som et element
Derfor bør du måske vælge at arbejde med double se præsicionen nedenfor
du kan så afslutningsvis bruge en funktion der afrunder resultatet før det præsenteres.

Jeg tror ikke det er mulig at komme et svar nærmere


Long
Contains integer in the range -2,147,483,648 to 2,147,483,647.
Single
Contains a single-precision, floating-point number in the range -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values.

Double
Contains a double-precision, floating-point number in the range -1.79769313486232E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values.
Avatar billede sth Novice
04. november 2001 - 21:15 #7
jeg har prøvet at køre med Dobbelt reelt tal
mewn det hjælper ikke, jeg har en ide om at det evt er beregningen af avg ,altså \"avg(sand) As middel_y\" der laver fejlen, jeg vil prøve selv at beregne middel, så må vi jo se
Avatar billede www.net-ware.dk Nybegynder
04. november 2001 - 21:25 #8
Du kan jo også bede den om at skrive alle mellem resultater til skærmen ( debugging a lá Bill Gates ).
Så kan du se hvor den ikke anvender det \"pæne\" tal

Du er med på at her står noget der er rimeligt tæt på nul.
a: -2,27373675443232E-13
Avatar billede sth Novice
05. november 2001 - 12:03 #9
Ja problemet er at det skulle have givet nul !!!
men efter hvad jeg har testet, så virker det hvis jeg skriver : middel_y=round(rs(\"middel_y\"),6)
på alle de data jeg henter.

og det er nok den løsning jeg må bruge, men om jeg fatter det !!!! det er sq da fordumt at det ikke er muligt at få asp til at regne rigtig !

Nå men point til dig
og tak for hjælpen

mvh sth
ps. havde du noget kode der laver ca. det samme ?

hvis ja vil jeg da meget gerne se det, du kunne evt sende det til mig på sth@halstat.dk
Avatar billede www.net-ware.dk Nybegynder
06. november 2001 - 00:52 #10
Jeg har ikke en kode i asp til dette problem, men indledningsvis troede jeg at du ikke kendte formelerne, fordi jeg ikke læste dit spm ordentligt. Jeg blev klogere da jeg så din kode. Den er i øvrigt meget pæn

mvh
Lars
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