编辑代码

import random
import math

group_heating_index_value = []      # 分组取暖指数集合
suijishu = []  # 先定义一个空列表存放准备生成未知数,    相当于定义一个空集合,这个空集合将包含一些数;
ut_value = [1.284543, 1.863815]     # vt集合
sub_temperature_value = []      # 18-作差温度集合
temperature_value = []  # x天温度集合

times = 10000    # x天总共循环次数
group = 60    # 天数


def _max(temp_list):
    factor = 18.0
    for j in range(len(temp_list)):
        temp = factor - temp_list[j]
        if temp >= 0:
            temp_list[j] = temp
        else:
            temp_list[j] = 0
    return temp_list


def zhubu(group, times):
    for t in range(times):
        for i in range(group):
            z1 = random.gauss(0, 1)  # 生成正态分布的随机数                 random.gauss(均值, 标准差)
            suijishu.append(z1)
            if (i - 1) < 0:  # 这里控制第一个西格玛t-1
                xgm1 = 0
            else:
                xgm1 = suijishu[i - 1]
            if (i - 2) < 0:  # 这理控制第二个西格玛t-2
                xgm2 = 0
            else:
                xgm2 = suijishu[i - 2]
            ut = 1.432788 * xgm1 - 0.4505976 * xgm2 - 0.6001734 * ut_value[i + 1] - 0.2699453 * ut_value[i] + suijishu[i]   # 公式1
            ut_value.append(ut)
            T = 4.912044 - 20.2049 * math.sin((2 * math.pi / 365) * (4016 + i)) - 4.427545 * math.cos(
                (2 * math.pi / 365) * (4016 + i)) + ut      # 计算温度
            temperature_value.append(T)
        sub_temperature_value = _max(temperature_value)
        heating_index = sum(sub_temperature_value)
        group_heating_index_value.append(heating_index)
        suijishu.clear()        # 清空所有元素 = 重置列表
        temperature_value.clear()       # 清空所有元素 = 重置列表


zhubu(group, times)
print(group_heating_index_value, "\n")  # x天重复y次的数据集合
print(sum(group_heating_index_value)/times)     # x天重复y次,求得取暖指数的总和求平均