【2023国赛A题】定日镜场的优化设计(试题+实现)

目录

1、试题

2、问题一模型建立与求解

Python 代码示例

MATLAB 代码


1、试题

2、问题一模型建立与求解

为计算定日镜场的年平均光学效率、年平均输出热功率和单位镜面面积年平均输出热功率,我们可以按照以下步骤进行计算:

步骤 1:确定太阳在每个时刻的位置和入射角度 根据给定的经纬度和日期时间,可以使用天文算法计算得到太阳在每个时刻的位置和入射角度。

步骤 2:计算每个定日镜的法向 根据定日镜位置和太阳位置,可以计算得到每个定日镜的法向矢量,即定日镜中心指向太阳中心的方向。

步骤 3:计算每个定日镜的投影面积 由于定日镜形状为矩形,可以根据镜面高度和宽度计算得到每个定日镜的投影面积。

步骤 4:计算每个定日镜的日均光学效率和输出热功率 根据太阳辐照度数据和定日镜的法向矢量,可以计算得到每个定日镜在每个时刻的光学效率和输出热功率。

步骤 5:计算整个定日镜场的年平均光学效率、年平均输出热功率和单位镜面面积年平均输出热功率 将所有定日镜的光学效率和输出热功率加权平均,得到整个定日镜场的年平均光学效率和年平均输出热功率。单位镜面面积年平均输出热功率可以通过将年平均输出热功率除以定日镜场的总投影面积得到。

Python 代码示例

以下是一个简单的 Python 代码示例,用于计算圆形定日镜场的年平均光学效率、年平均输出热功率和单位镜面面积年平均输出热功率。在运行之前,请先下载数据文件(定日镜位置数据和太阳辐照度数据)并保存到本地。

import math
import pandas as pd

# 圆形定日镜场参数
radius = 350    # 圆形区域半径
center_lat = 39.4  # 中心点纬度
center_lon = 98.5  # 中心点经度
abs_height = 3000   # 海拔高度
tower_height = 80   # 吸收塔高度
tower_radius = 3.5  # 吸收塔半径
mirror_height = 4   # 定日镜安装高度
mirror_size = 6     # 定日镜尺寸

# 加载定日镜位置数据
mirror_data = pd.read_csv('mirror_positions.csv')
num_mirrors = len(mirror_data)

# 加载太阳辐照度数据
df = pd.read_csv('solar_radiation.csv')

# 定义计算函数
def calc_optical_efficiency(sun_pos, mirror_pos):
    # 计算定日镜的法向矢量
    mirror_dir = [sun_pos[0]-mirror_pos[0], sun_pos[1]-mirror_pos[1], sun_pos[2]-mirror_pos[2]]
    mirror_len = math.sqrt(mirror_dir[0]**2 + mirror_dir[1]**2 + mirror_dir[2]**2)
    mirror_norm = [mirror_dir[0]/mirror_len, mirror_dir[1]/mirror_len, mirror_dir[2]/mirror_len]
    
    # 计算入射角度
    cos_theta = (mirror_norm[0]*sun_pos[3] + mirror_norm[1]*sun_pos[4] + mirror_norm[2]*sun_pos[5])
    
    if cos_theta <= 0:
        # 太阳高度角小于零,即太阳在地平线下,无法照射到定日镜上
        return 0, 0
    else:
        # 计算光学效率和输出热功率
        mirror_area = mirror_size * mirror_size
        optical_efficiency = cos_theta * mirror_area / math.pi / (radius**2)
        output_power = optical_efficiency * df[sun_pos[6]][sun_pos[7]] * mirror_area
        
        return optical_efficiency, output_power

# 计算每个定日镜的光学效率和输出热功率
optical_efficiencies = []
output_powers = []
for i in range(num_mirrors):
    mirror_pos = [mirror_data['x'][i], mirror_data['y'][i], abs_height+mirror_height]
    eff, power = calc_optical_efficiency(df.iloc[i,:], mirror_pos)
    optical_efficiencies.append(eff)
    output_powers.append(power)

# 计算年平均光学效率和输出热功率
mean_optical_efficiency = sum(optical_efficiencies) / num_mirrors
mean_output_power = sum(output_powers) / 5   # 5个时刻,分别为9:00、10:30、12:00、13:30、15:00

# 计算单位镜面面积年平均输出热功率
unit_output_power = mean_output_power / (num_mirrors * mirror_size * mirror_size)

# 输出结果
print('年平均光学效率:{:.3f}'.format(mean_optical_efficiency))
print('年平均输出热功率:{:.1f} MW'.format(mean_output_power / 1000000))
print('单位镜面面积年平均输出热功率:{:.2f} W/m2'.format(unit_output_power))

MATLAB 代码

  1. 加载定日镜位置数据和太阳辐照度数据。
  2. 定义计算函数 calc_optical_efficiency,用于计算每个定日镜的光学效率和输出热功率。
  3. 计算每个定日镜的光学效率和输出热功率,并将结果存储在对应的列表中。
  4. 计算年平均光学效率、年平均输出热功率和单位镜面面积年平均输出热功率。
  5. 输出结果。
% 圆形定日镜场参数
radius = 350;       % 圆形区域半径
center_lat = 39.4;  % 中心点纬度
center_lon = 98.5;  % 中心点经度
abs_height = 3000;  % 海拔高度
tower_height = 80;  % 吸收塔高度
tower_radius = 3.5; % 吸收塔半径
mirror_height = 4;  % 定日镜安装高度
mirror_size = 6;    % 定日镜尺寸

% 加载定日镜位置数据
mirror_data = readtable('mirror_positions.csv');
num_mirrors = height(mirror_data);

% 加载太阳辐照度数据
df = readtable('solar_radiation.csv');

% 定义计算函数
calc_optical_efficiency = @(sun_pos, mirror_pos) ...
    calcOpticalEfficiency(sun_pos, mirror_pos, df, radius, mirror_size);

% 计算每个定日镜的光学效率和输出热功率
optical_efficiencies = zeros(num_mirrors, 1);
output_powers = zeros(num_mirrors, 1);
for i = 1:num_mirrors
    mirror_pos = [mirror_data.x(i), mirror_data.y(i), abs_height + mirror_height];
    [eff, power] = calc_optical_efficiency(df(i,:), mirror_pos);
    optical_efficiencies(i) = eff;
    output_powers(i) = power;
end

% 计算年平均光学效率和输出热功率
mean_optical_efficiency = mean(optical_efficiencies);
mean_output_power = mean(output_powers); % 5个时刻取平均值

% 计算单位镜面面积年平均输出热功率
unit_output_power = mean_output_power / (num_mirrors * mirror_size * mirror_size);

% 输出结果
fprintf('年平均光学效率:%.3f\n', mean_optical_efficiency);
fprintf('年平均输出热功率:%.1f MW\n', mean_output_power / 1000000);
fprintf('单位镜面面积年平均输出热功率:%.2f W/m2\n', unit_output_power);

猜你喜欢

转载自blog.csdn.net/fanjufei123456/article/details/132747104