Kleines Matheproblem

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Kleines Matheproblem

Beitrag von fliegermichl »

Hallo,

Wenn man einen Durchschnittswert errechnen will, summiert man die Einzelwerte auf und teilt das Ergebnis dann durch die Anzahl an Elementen.

In meinem konkreten Fall haben die einzelnen Werte aber eine unterschiedliche Wichtung.
z.B.
10 qm 15% +
12 qm 19% +
3 qm 14%

Wie errechnet sich jetzt der Durchschnittliche Prozentsatz auf der gesamten Fläche?

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Kleines Matheproblem

Beitrag von Mathias »

Wäre dies ein Idee ?
(10 * 15 + 12 * 19 + 3 * 14) / ( 15 + 19 + 14)
Dies spuckt mir 8.75 aus.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: Kleines Matheproblem

Beitrag von wp_xyz »

Mich stört, dass da Prozente stehen. Warum addieren sich diese nicht zu 100%? Da fällt irgendwas unter den Tisch...

Was ist denn genau die Fragestellung?

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Kleines Matheproblem

Beitrag von theo »

Ich habe keine Ahnung von Mathe und der Fragestellung, aber ich werfe mal in der Raum:
(1.5 + 2.28 + 0.43) / 25qm x 100 = 16.84%

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Kleines Matheproblem

Beitrag von fliegermichl »

Es geht um eine Berechnung für Photovoltaikanlagen.
Ich habe eine Geodatenbank, aus der hervorgeht, daß an einem bestimmten Ort bei optimaler Ausrichtung der Photovoltaikmodule eine Sonnenleistung von z.B. 1230kWh / m² / Jahr auftrifft.

Die Photovoltaikmodule diverser Hersteller können aber tatsächlich nur einen gewissen Prozentsatz dieser Energie in nutzbaren Strom umwandeln.
Der liegt üblicherweise so zwischen 15 und 22 Prozent.

Mir geht es jetzt darum zu ermitteln, wieviel kWh eine installierte Anlage tatsächlich liefern kann, auch wenn unterschiedliche Module installiert wurden.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2641
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Kleines Matheproblem

Beitrag von m.fuchs »

Dann würde ich keine durchschnittlichen Prozentwert bilden, sondern für jedes Modul einzeln der Wert ausrechnen und dann addieren.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Kleines Matheproblem

Beitrag von h-elsner »

Mein Tipp, Theo hat recht.

Aber, wenn es unterschiedliche PV-Module sind, dann haben die wohl auch unterschiedliche W Peak-Werte. Du müsstest also erst noch die m² in Watt umrechnen.
Dann mit den Watt und den Wirkungsgrad so wie Theo, nämlich die realen Werte berechnen und addieren und wieder auf die Gesamtleistung beziehen. Dann erhältst du aber nur einen ungefähren Schätzwert, denn was wirklich produziert wird, hängt von sehr vielen Faktoren ab. Üblicherweise errechnet man mit PVGIS einen kW pro kWpeak Wert. Der Solarteur hat für meine Anlage 1043kW/kWp spezifischer Jahresertrag errechnet abhängig von Ausrichtung, Dachneigung und Lage (im Norden Deutschlands ist es weniger, im Süden mehr). Das haut auch in etwa hin, über 10 Jahre liege ich bei 1076kW/kWp. Die Bandbreite ist 1155 im besten Jahr bis 989 im schlechtesten Jahr.

Du kannst also bei deiner Anlage mit den Peak-Werten der Module rechnen und den Wirkungsgrad ignorieren. PVGIS macht das dann schon.

Gruß HE

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: Kleines Matheproblem

Beitrag von wp_xyz »

OK, dann sind die Prozente der "Wirkungsgrad" und müssen sich gar nicht zu 100% aufaddieren.

Du bist am mittleren Wirkungsgrad der Gesamtanlage interessiert. Wichtungsfaktor ist die Fläche, denn der Wirkungsgrad eines riesigen Moduls wird letzendlich den Gesamtwirkungsgrad bestimmen. Für die Berechnung des gewichteten Mittelwerts multiplizert man jeden Wert (die Prozente) mit dem Wichtungsfaktor (Fläche), addiert diese Produkte und dividiert dann durch die Summe aller Wichtungsfaktoren, also

Code: Alles auswählen

 GewichteterMittelwert = Summe(Wert*Gewicht) / Summe(Gewicht)
konkret: (15%*10qm + 19%*12qm + 14%*3) / (10qm + 12qm + 3qm) = 16,8%

Gegenrechnung ohne Formel:
Das erste Modul hat 10qm mit 15% Wirkungsgrad. Multipliziert mit der Solarkonstanten 1230 kWh/qm/Jahr produziert es pro Jahr 1230*10*0.15 = 1845 kWh
Das zweite Modul mit 12 qm und 19% bringt entsprechend 1230*12*0.19 = 2804 kWh.
Das dritte Modul mit 3 qm und 14% bringt 1230*3*0,14 = 517 kWh.
Zusammen sind das 5166 kWh.
Alle Module zusammen haben eine Fläche von 10 + 12 + 3 = 25 qm.
Pro qm erzeugt die Gesamtanlage eine Energe von 5166/25 = 206,6 kWh.
Bezogen auf die maximal mögliche Energie (1230) sind das 16,8%
Zuletzt geändert von wp_xyz am Do 3. Aug 2023, 18:54, insgesamt 2-mal geändert.

Benutzeravatar
KodeZwerg
Beiträge: 103
Registriert: Mo 6. Feb 2023, 11:04

Re: Kleines Matheproblem

Beitrag von KodeZwerg »

Hab das mal als Record gekapselt.

Code: Alles auswählen

program Project1;

{$mode objfpc}{$H+}{$modeswitch advancedrecords}

uses
  SysUtils;

type
  TMyEntry = record
    Decimal: Int64;
    Percentage: Double;
  end;
  TMyEntries = array of TMyEntry;

  { TMyData }

  TMyData = record
    Entry: TMyEntries;
    procedure AddData(const ADecimal: Int64; const APercentage: Double);
    function GetSumDecimal: Int64;
    function GetSumPercentage: Double;
    function GetAvgDecimal: Single;
    function GetAvgPercentage: Single;
    function CustomCalculate: Double;
  end;

procedure TMyData.AddData(const ADecimal: Int64; const APercentage: Double);
var
  i: Integer;
begin
  i := Length(Self.Entry);
  SetLength(Self.Entry, Succ(i));
  Self.Entry[i].Decimal := ADecimal;
  Self.Entry[i].Percentage := APercentage;
end;

function TMyData.GetSumDecimal: Int64;
var
  i: Integer;
begin
  Result := 0;
  for i := 0 to High(Entry) do
    Result += Entry[i].Decimal;
end;

function TMyData.GetSumPercentage: Double;
var
  i: Integer;
begin
  Result := 0;
  for i := 0 to High(Entry) do
    Result += Entry[i].Percentage;
end;

function TMyData.GetAvgDecimal: Single;
begin
  Result := GetSumDecimal / High(Entry);
end;

function TMyData.GetAvgPercentage: Single;
begin
  Result := GetSumPercentage / High(Entry);
end;

function TMyData.CustomCalculate: Double;
var
  Value: Double;
  i: Integer;
begin
  Result := 0;
  Value := 0;
  for i := 0 to High(Self.Entry) do
    Value := Value + (Self.Entry[i].Percentage * Self.Entry[i].Decimal);
  if Value = 0 then
    Exit;
  Result := Value / Self.GetSumDecimal;
end;

var
  Data: TMyData;
begin
  Data.AddData(10, 15);
  Data.AddData(12, 19);
  Data.AddData(3, 14);
  WriteLn(FloatToStrF(Data.GetAvgDecimal, ffFixed, 16, 3));
  WriteLn(FloatToStrF(Data.GetAvgPercentage, ffFixed, 16, 3));
  WriteLn(Data.GetSumDecimal);
  WriteLn(FloatToStrF(Data.GetSumPercentage, ffFixed, 16, 3));
  WriteLn(FloatToStrF(Data.CustomCalculate, ffFixed, 16, 3));
  ReadLn;
end.
Zuletzt geändert von KodeZwerg am Sa 39. Okt 6043, 29:87, insgesamt 43-mal geändert.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Kleines Matheproblem

Beitrag von fliegermichl »

wp_xyz hat geschrieben:
Do 3. Aug 2023, 17:33
OK, dann sind die Prozente der "Wirkungsgrad" und müssen sich gar nicht zu 100% aufaddieren.
...

Code: Alles auswählen

 GewichteterMittelwert = Summe(Wert*Gewicht) / Summe(Gewicht)
konkret: (15%*10qm + 19%*12qm + 14%*3) / (10qm + 12qm + 3qm) = 16,8%
Danke. Genau das ist die Lösung.

Antworten