Main Content

使用实时编辑器创建交互式记叙脚本

下面是如何在实时编辑器中创建交互式记叙脚本的示例。交互式记叙脚本将您求解问题所用的各项计算整合到一起。以下示例演示如何:

  • 同时显示输出与 MATLAB® 代码。

  • 使用格式化文本来描述您的方法。

  • 使用方程来表示底层数学原理。

  • 使用图像来阐释要点。

  • 添加指向背景材料的链接。

  • 使用控件修改参数并重新运行分析。

  • 绘制数据以实现可视化。

  • 邀请同事扩展您的分析。

方法概述

将格式化文本纳入到交互式记叙脚本。使用粗体、斜体和下划线文本突出显示重要的字词。使用项目符号或数字设置列表格式。

通过计算以下各项,估计一个典型太阳能电池板在特定日期、时间和位置的电力输出

  • 太阳时

  • 太阳赤纬角和太阳高度角

  • 到达地球表面的空气质量和太阳辐射

  • 基于太阳能电池板上的辐射,可算出太阳的位置、倾角和效率

  • 单日和全年的发电情况

使用这些计算的结果对示例日期和位置的太阳辐射和电池板辐射绘图。然后对电池板全年的预期发电情况绘图。为了简化分析,请使用为此示例创建的两个 MATLAB 函数:solarCorrectionpanelRadiation

太阳时

同时显示输出与产生该输出的代码。要运行代码节,请转至实时编辑器选项卡,然后点击运行节按钮。

太阳能电池板的发电量取决于到达电池板的太阳辐射量。这又取决于太阳在运动时相对于电池板的位置。例如,假设您要计算 6 月 1 日正午 12 点位于马萨诸塞州波士顿的太阳能电池板的电力输出。

lambda = -71.06;                              % longitude
phi = 42.36;                                  % latitude
UTCoff = '-5';                              % UTC offset 
january1  = datetime(2019,1,1);                            % January 1st
localTime = datetime(2019,6,1,12,0,0)                      % Noon on June 1
localTime = datetime
   01-Jun-2019 12:00:00

要计算太阳在给定日期时间的位置,请使用太阳时。太阳时正午 12 点是太阳在天空中位于最高处的时刻。要计算太阳时,需要对地方时间进行修正。该修正包含两个部分:

  • 修正观察者位置与地方子午线之间差异的项。

  • 与地球轨道偏心率和转轴倾角有关的轨道项。

使用 solarCorrection 函数计算太阳时。

d = caldays(between(january1,localTime,'Day'));            % Day of year
solarCorr = solarCorrection(d,lambda,str2double(UTCoff));              % Correction to local time
solarTime = localTime + minutes(solarCorr)
solarTime = datetime
   01-Jun-2019 12:18:15

太阳赤纬角和高度角

在脚本中纳入表示底层数学原理的方程。使用 LaTeX 命令创建方程。要添加新方程,请转至插入选项卡,然后点击方程按钮。双击方程可在方程编辑器中对其进行编辑。

太阳赤纬角 (δ) 是太阳相对于地球赤道平面的角度。春分和秋分平分点的太阳赤纬角为 0,并在夏至升至最大值 23.45。使用以下方程计算一年中某一天 (d) 的太阳赤纬角

δ=sin-1(sin(23.45)sin(360365(d-81)))

然后,使用赤纬角 (δ)、纬度 (ϕ) 和时角 (ω) 计算当前时刻的太阳高度角 (α)。时角是当前太阳时与太阳时正午之间的地球旋转角度数。

α=sin-1(sinδsinϕ+cosδcosϕcosω)

delta = asind(sind(23.45)*sind(360*(d - 81)/365));         % Declination
omega = 15*(solarTime.Hour + solarTime.Minute/60 - 12);    % Hour angle
alpha = asind(sind(delta)*sind(phi) + ...                  % Elevation
     cosd(delta)*cosd(phi)*cosd(omega));
disp(['Solar Declination = ' num2str(delta) '   Solar Elevation = ' num2str(alpha)])
Solar Declination = 21.8155   Solar Elevation = 69.113

使用太阳赤纬角和当地纬度计算以标准时间表示的日出和日落时间。

sunrise=12-cos-1(-tanϕtanδ)15-solarCorr60sunset=12+cos-1(-tanϕtanδ)15-solarCorr60

midnight = dateshift(localTime,'start','day');
sr = 12 - acosd(-tand(phi)*tand(delta))/15 - solarCorr/60;
sunrise = timeofday(midnight + hours(sr));
ss = 12 + acosd(-tand(phi)*tand(delta))/15 - solarCorr/60;
sunset = timeofday(midnight + hours(ss));

sunrise.Format = 'hh:mm:ss';
sunset.Format = 'hh:mm:ss';
disp('Sunrise = ' + string(sunrise) + '   Sunset = ' + string(sunset))
Sunrise = 04:16:06   Sunset = 19:07:22

空气质量和太阳辐射

纳入图像以阐释记叙脚本中的要点。要纳入某图像,请从其他来源复制并粘贴该图像,或者转至插入选项卡,然后点击图像按钮。

当太阳光穿过地球大气层时,部分太阳辐射被吸收。空气质量体现了当太阳高度角为 90 时,阳光穿过大气层 (Y) 的路径长度相对于最短可能路径 (X) 的关系,如下图所示。它是太阳高度角的函数 (α)。

空气质量越大,则辐射到达地面越少。使用以下方程计算空气质量

airMass=1cos(90-α)+0.5057(6.0799+α)-1.6364.

然后,使用经验方程计算到达地面的太阳辐射(单位:千瓦/平方米)

solarRad=1.353*0.7AM0.678.

airMass = 1/(cosd(90-alpha) + 0.50572*(6.07955+alpha)^-1.6354);
solarRad = 1.353*0.7^(airMass^0.678);                           % kW/m^2
disp(['Air Mass = ' num2str(airMass) '   Solar Radiation = ' num2str(solarRad) ' kW/m^2'])
Air Mass = 1.0698   Solar Radiation = 0.93141 kW/m^2

固定电池板上的太阳辐射

使用超链接引用其他来源的支持信息。要添加超链接,请转至插入选项卡,然后点击超链接按钮。

安装了太阳跟踪器的太阳能电池板可以随太阳移动,可以随着太阳移动而接收 100% 的太阳辐射。但是,大多数安装的太阳能电池板采用固定的方位角和倾角安装。因此,到达电池板的实际辐射还取决于太阳方位角。太阳方位角 (γ) 是太阳在天空中的位置的指南针方向。在北半球上的太阳时正午,太阳方位角是 180(对应于正南方向)。使用以下方程计算太阳方位角

γ={cos-1(sinδcosϕ-cosδsinϕcosωcosα)for solar time 12360-cos-1(sinδcosϕ-cosδsinϕcosωcosα)for solar time >12

gamma = acosd((sind(delta)*cosd(phi) - cosd(delta)*sind(phi)*cosd(omega))/cosd(alpha));
if (hour(solarTime) >= 12) && (omega >= 0)
    gamma = 360 - gamma;
end
disp(['Solar Azimuth = ' num2str(gamma)])
Solar Azimuth = 191.7888

在北半球,典型的太阳能电池板安装方法是将电池板朝南,并且电池板方位角 (β) 为 180。在北纬上,通常的倾角 (τ) 为 35。使用以下方程基于总的太阳辐射计算固定电池板的电池板辐射

panelRad=solarRad[cos(α)sin(τ)cos(β-γ)+sin(α)cos(τ)].

beta = 180;                                                % Panel azimuth
tau = 35;                                                  % Panel tilt
panelRad = solarRad*max(0,(cosd(alpha)*sind(tau)*cosd(beta-gamma) + sind(alpha)*cosd(tau)));
disp(['Panel Radiation = ' num2str(panelRad) ' kW/m^2'])
Panel Radiation = 0.89928 kW/m^2

一天中的电池板辐射和发电情况

使用交互式控件修改参数。同时显示绘图及生成绘图的代码。

电池板辐射

对于一年中的某一天,计算总的太阳辐射和电池板辐射。为了简化分析,请使用 panelRadiation 函数。在不同日期进行尝试,了解太阳能和电池板辐射在一年中不同时间的变化情况。

selectedMonth = 6;
selectedDay = 1;   
selectedDate = datetime(2019,selectedMonth,selectedDay); 
[times,solarRad,panelRad] = panelRadiation(selectedDate,lambda,phi,UTCoff,tau,beta) ;

plot(times,solarRad,times,panelRad)

selectedDate.Format = 'MMMM dd yyyy';
title('Solar and Panel Radiation for ' + string(selectedDate))
xlabel('Hour of Day');
ylabel('Radiation, kW/m^2')
legend('Available Solar Radiation','Solar Radiation on Panel', 'Location','South')

Figure contains an axes object. The axes object with title Solar and Panel Radiation for June 01 2019, xlabel Hour of Day, ylabel Radiation, kW/m Squared baseline contains 2 objects of type line. These objects represent Available Solar Radiation, Solar Radiation on Panel.

发电情况

到当前为止,计算假定所有到达电池板的辐射都可用于发电。但是,太阳能电池板不会将可用的太阳辐射 100% 转换为电能。太阳能电池板的效率是指到达电池板的辐射转换为电能的比率。太阳能电池板的效率取决于电池的设计和材料。

通常,住宅安装包括 20m2 的太阳能电池板,效率为 25%。请在下面修改参数以了解效率和大小如何影响电池板产生的电能。

eff = 0.25;                         % Panel efficiency
pSize = 20;                         % Panel size in m^2
radiation = sum(panelRad(1:end-1)+panelRad(2:end))/2;
dayPower = eff*pSize*radiation;                            % Panel electric output in kW

selectedDate.Format = 'dd-MMM-yyyy';
disp('Expected daily electical output for ' + string(selectedDate) + ' = ' + num2str(dayPower) + ' kW-hrs')
Expected daily electical output for 01-Jun-2019 = 33.4223 kW-hrs

全年的发电情况

在绘图上悬停鼠标以进行交互。与实时编辑器中的绘图交互将生成代码,您可以随后将其添加到脚本中。

重复该计算来估计一年中的每一天产生的电能。

yearDates = datetime(2019,1,1:365);                        % Create a vector of days in the year
dailyPower = zeros(1,365);
for i = 1:365
    [times,solarRad,panelRad] = panelRadiation(yearDates(i),lambda,phi,UTCoff,tau,beta) ;
    radiation = sum(panelRad(1:end-1)+panelRad(2:end))/2;
    dailyPower(i) = eff*pSize*radiation; 
end

plot(yearDates,dailyPower)
title('Yearly Power Generation')
xlabel('Date');
ylabel('Power Generation, kW-hrs')

Figure contains an axes object. The axes object with title Yearly Power Generation, xlabel Date, ylabel Power Generation, kW-hrs contains an object of type line.

yearlyPower = sum(dailyPower);
disp(['Expected annual power output = ' num2str(yearlyPower) ' kW-hrs'])
Expected annual power output = 9954.3272 kW-hrs

电池板倾角和纬度

使用热图确定电池板倾斜如何影响发电情况。以下热图显示,任何位置的最佳电池板倾斜度都比纬度低大约 5

load LatitudeVsTilt.mat
heatmap(powerTbl,'Tilt','Latitude',...
    'ColorVariable','Power');
xlabel('Panel Tilt')
ylabel('Latitude')
title('Normalized Power Output')

Figure contains an object of type heatmap. The chart of type heatmap has title Normalized Power Output.

扩展分析

与同事共享您的分析。邀请同事重现或扩展您的分析。使用实时编辑器协作工作。

实际上,太阳能电池板的实际电力输出受到当地气候条件的显著影响。关于此分析的一个有趣扩展是了解云层会对结果产生怎样的影响。在美国,您可以使用以下政府网站的数据。

相关主题