74 lines
4.6 KiB
TypeScript
74 lines
4.6 KiB
TypeScript
|
|
// Interpolationsfunktion für Nennleistung des Wärmeerzeugers
|
|
|
|
interface DatasetNennleistung {
|
|
flaeche: number[];
|
|
Nennleistung: number[];
|
|
}
|
|
|
|
interface DatasetNutzwaermeBedarf {
|
|
NutzwaermeBedarf: number[];
|
|
}
|
|
|
|
const datasetNennleistung: DatasetNennleistung[] = [
|
|
{ flaeche: [50], Nennleistung: [7.5, 7.3, 7.1, 7, 6.8, 6.6, 6.4, 6.3, 6.1, 5.9, 5.7, 5.6, 5.4, 5.2, 5, 4.8] },
|
|
{ flaeche: [100], Nennleistung: [12.1, 11.8, 11.6, 11.3, 11, 10.8, 10.5, 10.2, 9.9, 9.6, 9.3, 9, 8.7, 8.4, 8.1, 7.8] },
|
|
{ flaeche: [150], Nennleistung: [16.1, 15.7, 15.4, 15, 14.6, 14.3, 13.9, 13.5, 13.1, 12.8, 12.4, 12, 11.6, 11.2, 10.8, 10.3] },
|
|
{ flaeche: [200], Nennleistung: [19.7, 19.2, 18.8, 18.4, 17.9, 17.5, 17, 16.5, 16.1, 15.6, 15.1, 14.6, 14.2, 13.7, 13.1, 12.6] },
|
|
{ flaeche: [300], Nennleistung: [26.1, 25.6, 25, 24.4, 23.8, 23.2, 22.6, 22, 21.4, 20.7, 20.1, 19.5, 18.8, 18.1, 17.5, 16.8] },
|
|
{ flaeche: [400], Nennleistung: [32, 31.3, 30.5, 29.8, 29.1, 28.4, 27.6, 26.9, 26.1, 25.4, 24.6, 23.8, 23, 22.2, 21.4, 20.5] },
|
|
{ flaeche: [500], Nennleistung: [37.4, 36.5, 35.7, 34.9, 34, 33.2, 32.3, 31.4, 30.5, 29.6, 28.7, 27.8, 26.9, 25.9, 25, 24] },
|
|
{ flaeche: [600], Nennleistung: [42.4, 41.5, 40.6, 39.6, 38.7, 37.7, 36.7, 35.7, 34.7, 33.7, 32.7, 31.6, 30.5, 29.5, 28.4, 27.3] },
|
|
{ flaeche: [700], Nennleistung: [47.3, 46.2, 45.2, 44.1, 43.1, 42, 40.9, 39.8, 38.7, 37.5, 36.4, 35.2, 34, 32.8, 31.6, 30.4] },
|
|
{ flaeche: [800], Nennleistung: [51.9, 50.8, 49.6, 48.5, 47.3, 46.1, 44.9, 43.7, 42.4, 41.2, 39.9, 38.7, 37.4, 36, 34.7, 33.3] },
|
|
{ flaeche: [900], Nennleistung: [56.4, 55.1, 53.9, 52.6, 51.3, 50.1, 48.7, 47.4, 46.1, 44.7, 43.4, 42, 40.6, 39.1, 37.7, 36.2] },
|
|
{ flaeche: [1000], Nennleistung: [60.7, 59.4, 58, 56.6, 55.3, 53.9, 52.5, 51.1, 49.6, 48.2, 46.7, 45.2, 43.7, 42.1, 40.6, 39] },
|
|
{ flaeche: [2000], Nennleistung: [98.6, 96.4, 94.2, 92, 89.8, 87.5, 85.3, 82.9, 80.6, 78.2, 75.8, 73.4, 71, 68.4, 65.9, 63.3] },
|
|
{ flaeche: [3000], Nennleistung: [130.9, 128.1, 125.2, 122.2, 119.3, 116.3, 113.2, 110.2, 107.1, 103.9, 100.7, 97.5, 94.2, 90.9, 87.5, 84.1] },
|
|
{ flaeche: [4000], Nennleistung: [160.2, 156.6, 153.1, 149.5, 145.9, 142.2, 138.5, 134.7, 130.9, 127.1, 123.2, 119.3, 115.3, 111.2, 107.1, 102.9] },
|
|
{ flaeche: [5000], Nennleistung: [187.2, 183.1, 179, 174.8, 170.5, 166.2, 161.9, 157.5, 153.1, 148.6, 144, 139.4, 134.7, 130, 125.2, 120.3] }
|
|
];
|
|
|
|
const datasetNutzwaermeBedarf: DatasetNutzwaermeBedarf[] = [
|
|
{ NutzwaermeBedarf: [16, 15.5, 15, 14.5, 14, 13.5, 13, 12.5, 12, 11.5, 11, 10.5, 10, 9.5, 9, 8.5] }
|
|
];
|
|
|
|
|
|
export function funktionNennleistungWaermeerzeugerWarmwasserA14(flaeche: number, nutzwaermeBedarf: number): number {
|
|
const findClosestDatasets = (flaeche: number) => {
|
|
let lower = datasetNennleistung[0];
|
|
let upper = datasetNennleistung[datasetNennleistung.length - 1];
|
|
|
|
for (let i = 0; i < datasetNennleistung.length - 1; i++) {
|
|
if (datasetNennleistung[i].flaeche[0] <= flaeche && datasetNennleistung[i + 1].flaeche[0] >= flaeche) {
|
|
lower = datasetNennleistung[i];
|
|
upper = datasetNennleistung[i + 1];
|
|
break;
|
|
}
|
|
}
|
|
return { lower, upper };
|
|
};
|
|
|
|
const interpolate = (x: number, x0: number, y0: number, x1: number, y1: number) => {
|
|
return y0 + ((y1 - y0) * (x - x0)) / (x1 - x0);
|
|
};
|
|
|
|
const { lower, upper } = findClosestDatasets(flaeche);
|
|
const indexLower = datasetNutzwaermeBedarf[0].NutzwaermeBedarf.findIndex((value) => value <= nutzwaermeBedarf);
|
|
const indexUpper = indexLower > 0 ? indexLower - 1 : indexLower;
|
|
|
|
const nennleistungLowerLower = lower.Nennleistung[indexLower];
|
|
const nennleistungLowerUpper = lower.Nennleistung[indexUpper];
|
|
const nennleistungUpperLower = upper.Nennleistung[indexLower];
|
|
const nennleistungUpperUpper = upper.Nennleistung[indexUpper];
|
|
|
|
const interpolatedLower = interpolate(nutzwaermeBedarf, datasetNutzwaermeBedarf[0].NutzwaermeBedarf[indexUpper], nennleistungLowerUpper, datasetNutzwaermeBedarf[0].NutzwaermeBedarf[indexLower], nennleistungLowerLower);
|
|
const interpolatedUpper = interpolate(nutzwaermeBedarf, datasetNutzwaermeBedarf[0].NutzwaermeBedarf[indexUpper], nennleistungUpperUpper, datasetNutzwaermeBedarf[0].NutzwaermeBedarf[indexLower], nennleistungUpperLower);
|
|
|
|
const NennleistungWaermeerzeugerWarmwasser = interpolate(flaeche, lower.flaeche[0], interpolatedLower, upper.flaeche[0], interpolatedUpper);
|
|
|
|
return NennleistungWaermeerzeugerWarmwasser;
|
|
}
|
|
|
|
const result = funktionNennleistungWaermeerzeugerWarmwasserA14(154.2, 8.79);
|
|
console.log(result);
|