Standardabweichung
-
Hallo zusammen,
wir sollen in einer Funktion die Standard abweichung programmieren.
In meinem Kopf funktioniert auch alles. Nur sagt die Fehlerliste "Nicht mit mir, du hast nen Fehler..."double FldSum(double dFld[], int nDim) { int n; double dSum=dFld[0]; for(n=1;n<nDim;n++) { dSum=dSum+dFld[n]; } return dSum; } double FldMit(double dFld[], int nDim) { double dMit=(FldSum(dFld, nDim)/nDim); return dMit; } double FldStw(double dFld[], int nDim) { int n; double dStw; for(n=1;n<nDim;n++) { dStw=sqrt(1/(nDim-1)*FldSum((FldMit(dFld,nDim)-dFld[n])*(FldMit(dFld,nDim)-dFld[n]),nDim)); } return dStw; }und zwar sagt er mir bei dem Aufruf von FldSum im letzten Block, Fehler: "error C2664: 'FldSum': Konvertierung des Parameters 1 von 'double' in 'double []' nicht möglich"
Die Größe der Felder habe ich in der mein per malloc festgelegt.Schonmal Danke und falls ich irgendwas nicht richtig erklärt haben sollte gebt bescheid

-
Dein Compiler sagt dir ja, dass:
(FldMit(dFld,nDim)-dFld[n])*(FldMit(dFld,nDim)-dFld[n])kein Array ist.
-
und wie kriege ich das zu einem?
-
Leider kommen mir bei Deinem Code die Tränen. Statt die Formel zu korrigieren, hab ichs mal eingetippt, wie mir es eher einfacllen würde.
double berechneStandardabweichung(double feld[],int anzahl) { double mittelwert=berechneMittelwert(feld,anzahl); double summeDerFehlerquadrate=0; for(int i=0;i!=anzahl;++i) summeDerFehlerquadrate+=quadrat(feld[i]-mittelwert); double varianz=summeDerFehlerquadrate/(anzahl-1); double standardAbweichung=sqrt(varianz); return standardAbweichung; }
-
Der erste Parameter deiner FLdSum Funktion ist ja ein double Array, aber anscheinend rufst du die Funktion mit einem double auf. (ist jetzt nur ne annahme von mir)
Vorschlag:
- Schau dir nochmal genau die Stellen an wo du die Funktion aufrufst und achte darauf, dass der erste Parameter auch ein double Array ist.
-
Indem du überlegst was du genau machen willst. Und was du von dem Stück dort überhaupt erhoffst.
Am besten fängst du nochmal von vorne an und machst Stück für Stück was du genau haben willst. Kannst dich ja mal an volkards Beispiel richten.
-
Naja unser Dozent ist da ein wenig eigenwillig... Da kann man auch nichts mehr dran ändern glaube ich. Wir regen uns auch immer drüber auf.
-
BBaller51 schrieb:
Naja unser Dozent ist da ein wenig eigenwillig... Da kann man auch nichts mehr dran ändern glaube ich. Wir regen uns auch immer drüber auf.
Trotzdem darfst Du bestimmt lokale Variablen für Zwischenergebnisse nehmen und das Ergebnis Stück für Stück aufbauen. Uglifizieren kann man dann ja immer noch. Zum Beispiel alle unnötigen Vokale wegmachen, Variablen groß schreiben, UN wiederbeleben,
double brchnStndrdbwchng(double adFld[],int nNzhl) { double dMttlwrt=brchnMttlwrt(adFld,nNzhl); double dSmmeDrFhlrqdrt=0; for(int i=0;i!=nNzhl;++i) dSmmDrFhlrqdrt+=sqrt(adFld[i]-dMttlwrt); double dVrnz=smmDrFhlrqdrt/(nNzhl-1); double dStndrdbwchng=sqrt(dVrnz); return dStndrdbwchng; }So, sieht schon genau aus wie das vom Dozenten, ist aber leichter zu lesen, finde ich.
-
Immer diese Dozenten, die 1871 prgrmn glrnt hbn

-
Verwendest du tatsächlich die N-1-Methode zur Berechnung der Standardabweichung oder ist
n=1beifor(n=1;n<nDim;n++)ein Fehler?