AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Standardabweichung berechnen?

Ein Thema von mat72 · begonnen am 31. Mär 2012 · letzter Beitrag vom 1. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
mat72

Registriert seit: 15. Mär 2012
35 Beiträge
 
#1

Standardabweichung berechnen?

  Alt 31. Mär 2012, 14:21
Delphi-Version: 5
Hallo,
ich wollte die Standardabweichung von 8 eingegebenen Zahlen berechnen, aber irgendwie komme ich zu keinem brauchbaren Ergebnis.
Die Zahlen bekomme ich über ein Textfeld, welches ich in eine Zahl umwandel. Die Formel die ich für die Standardabweichung benutze ist
x:=sqrt((1/8)*(((x1-ave_x)*(x1-ave_x))+((x2-ave_x)*(x2-ave_x))+((x3-ave_x)*(x3-ave_x))+((x4-ave_x)*(x4-ave_x))+((x5-ave_x)*(x5-ave_x))+((x6-ave_x)*(x6-ave_x))+((x7-ave_x)*(x7-ave_x))+((x8-ave_x)*(x8-ave_x)))) ist die Formel richtig?
Wenn ich meine Berechnung mit Excel vergleiche, ist mein Wert immer größer.
Vielen Dank für eure Hilfe.
Gruß
Mat
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#2

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 15:58
Warum benutzt du nicht die fertige Function StdDev aus der Unit Math ?
Glückauf
  Mit Zitat antworten Zitat
mat72

Registriert seit: 15. Mär 2012
35 Beiträge
 
#3

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 19:24
Wenn ich die Funktion StdDev verwende , bekomme ich die Meldung
[Fehler] globallevelingacc.pas(426): Inkompatible Typen: 'Array' und 'Extended'
Gibt es da eine Moeglichkeit, die Funktion zu nutzen, trotz Deklaration als Extended.
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 19:36
Bei einem Freiwert (Mittelwert) steht da 1/(n-1) --> 1/7
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 19:36
Das sind jetzt "viel zu viele" Infos, als dass wir damit etwas anfangen könnten .
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mat72

Registriert seit: 15. Mär 2012
35 Beiträge
 
#6

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 19:48
Hallo,
ich lese jede Zahl via Textfeld ein und wandele sie mit StrToFloat in eine Zahl um.
Im Anhang mein Programm.
Delphi-Quellcode:
unit globallevelingacc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, jpeg, ExtCtrls, shellapi, math;

type
  TForm11 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    MainMenu1: TMainMenu;
    MainMenu2: TMenuItem;
    Help1: TMenuItem;
    Exit1: TMenuItem;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Button1: TButton;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    Button5: TButton;
    Label34: TLabel;
    procedure Exit1Click(Sender: TObject);
    procedure Help1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2Exit(Sender: TObject);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3Exit(Sender: TObject);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4Exit(Sender: TObject);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure Edit5Exit(Sender: TObject);
    procedure Edit5KeyPress(Sender: TObject; var Key: Char);
    procedure Edit6Exit(Sender: TObject);
    procedure Edit6KeyPress(Sender: TObject; var Key: Char);
    procedure Edit7Exit(Sender: TObject);
    procedure Edit7KeyPress(Sender: TObject; var Key: Char);
    procedure Edit8Exit(Sender: TObject);
    procedure Edit8KeyPress(Sender: TObject; var Key: Char);
    procedure Edit9Exit(Sender: TObject);
    procedure Edit9KeyPress(Sender: TObject; var Key: Char);
    procedure Edit10Exit(Sender: TObject);
    procedure Edit10KeyPress(Sender: TObject; var Key: Char);
    procedure Edit11Exit(Sender: TObject);
    procedure Edit11KeyPress(Sender: TObject; var Key: Char);
    procedure Edit12Exit(Sender: TObject);
    procedure Edit12KeyPress(Sender: TObject; var Key: Char);
    procedure Edit13Exit(Sender: TObject);
    procedure Edit13KeyPress(Sender: TObject; var Key: Char);
    procedure Edit14Exit(Sender: TObject);
    procedure Edit14KeyPress(Sender: TObject; var Key: Char);
    procedure Edit15Exit(Sender: TObject);
    procedure Edit15KeyPress(Sender: TObject; var Key: Char);
    procedure Edit16Exit(Sender: TObject);
    procedure Edit16KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form11: TForm11;
  x1,x2,x3,x4,x5,x6,x7,x8,y1,y2,y3,y4,y5,y6,y7,y8,ave_x,ave_y,x,y :extended;
implementation

{$R *.dfm}

procedure TForm11.Exit1Click(Sender: TObject);
begin
close();
end;

procedure TForm11.Help1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', '.\help\GlobalLevelingAccuracy.html', nil, nil, SW_SHOW); //hier wird die Hilfe aufgerufen
end;



procedure TForm11.Button5Click(Sender: TObject);
begin
close();
end;

procedure TForm11.Edit1Exit(Sender: TObject);
begin
    try
       x1:=StrToFloat(Edit1.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit1.Clear;
          Edit1.SetFocus;
    end;
end;

procedure TForm11.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit2.SetFocus;
end;

procedure TForm11.Edit2Exit(Sender: TObject);
begin
    try
       y1:=StrToFloat(Edit2.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit2.Clear;
          Edit2.SetFocus;
    end;
end;

procedure TForm11.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit3.SetFocus;
end;

procedure TForm11.Edit3Exit(Sender: TObject);
begin
    try
       x2:=StrToFloat(Edit3.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit3.Clear;
          Edit3.SetFocus;
    end;
end;

procedure TForm11.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit4.SetFocus;
end;

procedure TForm11.Edit4Exit(Sender: TObject);
begin
    try
       y2:=StrToFloat(Edit4.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit4.Clear;
          Edit4.SetFocus;
    end;
end;

procedure TForm11.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit5.SetFocus;
end;

procedure TForm11.Edit5Exit(Sender: TObject);
begin
    try
       x3:=StrToFloat(Edit5.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit5.Clear;
          Edit5.SetFocus;
    end;
end;

procedure TForm11.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit6.SetFocus;
end;

procedure TForm11.Edit6Exit(Sender: TObject);
begin
    try
       y3:=StrToFloat(Edit6.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit6.Clear;
          Edit6.SetFocus;
    end;
end;

procedure TForm11.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit7.SetFocus;
end;

procedure TForm11.Edit7Exit(Sender: TObject);
begin
    try
       x4:=StrToFloat(Edit7.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit7.Clear;
          Edit7.SetFocus;
    end;
end;

procedure TForm11.Edit7KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit8.SetFocus;
end;

procedure TForm11.Edit8Exit(Sender: TObject);
begin
    try
       y4:=StrToFloat(Edit8.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit8.Clear;
          Edit8.SetFocus;
    end;
end;

procedure TForm11.Edit8KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit9.SetFocus;
end;

procedure TForm11.Edit9Exit(Sender: TObject);
begin
    try
       x5:=StrToFloat(Edit9.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit9.Clear;
          Edit9.SetFocus;
    end;
end;

procedure TForm11.Edit9KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit10.SetFocus;
end;

procedure TForm11.Edit10Exit(Sender: TObject);
begin
    try
       y5:=StrToFloat(Edit10.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit10.Clear;
          Edit10.SetFocus;
    end;
end;

procedure TForm11.Edit10KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit11.SetFocus;
end;

procedure TForm11.Edit11Exit(Sender: TObject);
begin
    try
       x6:=StrToFloat(Edit11.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit11.Clear;
          Edit11.SetFocus;
    end;
end;

procedure TForm11.Edit11KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit12.SetFocus;
end;

procedure TForm11.Edit12Exit(Sender: TObject);
begin
    try
       y6:=StrToFloat(Edit12.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit12.Clear;
          Edit12.SetFocus;
    end;
end;

procedure TForm11.Edit12KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit13.SetFocus;
end;

procedure TForm11.Edit13Exit(Sender: TObject);
begin
    try
       x7:=StrToFloat(Edit13.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit13.Clear;
          Edit13.SetFocus;
    end;
end;

procedure TForm11.Edit13KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit14.SetFocus;
end;

procedure TForm11.Edit14Exit(Sender: TObject);
begin
    try
       y7:=StrToFloat(Edit14.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit14.Clear;
          Edit14.SetFocus;
    end;
end;

procedure TForm11.Edit14KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit15.SetFocus;
end;

procedure TForm11.Edit15Exit(Sender: TObject);
begin
    try
       x8:=StrToFloat(Edit15.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit15.Clear;
          Edit15.SetFocus;
    end;
end;

procedure TForm11.Edit15KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit16.SetFocus;
end;

procedure TForm11.Edit16Exit(Sender: TObject);
begin
    try
       y8:=StrToFloat(Edit16.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit16.Clear;
          Edit16.SetFocus;
    end;
end;

procedure TForm11.Edit16KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit1.SetFocus;
end;

procedure TForm11.Button1Click(Sender: TObject);
begin
Label34.Caption := (' ');
//x:=stddev(x1,x2,x3,x4,x5,x6,x7,x8);
ave_x:=(x1+x2+x3+x4+x5+x6+x7+x8)/8;
ave_y:=(y1+y2+y3+y4+y5+y6+y7+y8)/8;
x:=3*(sqrt((1/8)*(((x1-ave_x)*(x1-ave_x))+((x2-ave_x)*(x2-ave_x))+((x3-ave_x)*(x3-ave_x))+((x4-ave_x)*(x4-ave_x))+((x5-ave_x)*(x5-ave_x))+((x6-ave_x)*(x6-ave_x))+((x7-ave_x)*(x7-ave_x))+((x8-ave_x)*(x8-ave_x)))));
y:=3*(sqrt((1/8)*(((y1-ave_y)*(y1-ave_y))+((y2-ave_y)*(y2-ave_y))+((y3-ave_y)*(y3-ave_y))+((y4-ave_y)*(y4-ave_y))+((y5-ave_y)*(y5-ave_y))+((y6-ave_y)*(y6-ave_y))+((y7-ave_y)*(y7-ave_y))+((y8-ave_y)*(y8-ave_y)))));
Label32.Caption := FloatToStrF(x, ffNumber, 8, 3);
Label33.Caption := FloatToStrF(y, ffNumber, 8, 3);
if (x>8) or (y>8) then
Label34.Caption := ('Out of Specification!')
end;

end.
Danke fuer eure Hilfe.
Gruss
Mat
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 19:54
Zitat:
x:=stddev(x1,x2,x3,x4,x5,x6,x7,x8);
-->
x:=stddev([x1,x2,x3,x4,x5,x6,x7,x8]); Das sind nur 2 Zeichen mehr
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#8

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 19:54
Hi,

probier's mal so:
std_abw = StdDev([x1,x2,x3,x4,x5,x6,x7,x8]) Denn Delphi will ein Array als parameter und keine Liste von Extended bekommen.

In XE2 kann man auch ein "Array of Extenedd" übergeben (siehe hier), in früheren Versionen ging das noch nicht (siehe hier)
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
mat72

Registriert seit: 15. Mär 2012
35 Beiträge
 
#9

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 19:56
Danke dir.
Jetzt verstehe ich auch die Fehlermeldung.
Problem geloest.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 23:48
@mat72:
Sorry, aber ich muss es loswerden: dein Sourcecode ist ein Paradebeispiel wie man nicht programmieren sollte.
Dir fehlen offensichtlich die Grundlagen; das solltest ändern.
In fast jeder Programmiersprache gibt es Arrays und/oder Listen mit denen viele gleiche Dinge verwalten kann anstatt alle Variablen einzeln hinzuschreiben.
Deine Benutzeroberfläche ist auch eine kleine Katastrophe - für jede Zahl ein Edit und ein Label, wo soll das enden?
Nimm doch einfach ein TMemo und lass den Benutzer so viele Zahlen hineinschreiben oder kopieren wie er mag (eine Zahl pro Zeile).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz