
电力系统电价与温度模型(Matlab代码实现)
用于模拟电价的模型是一个简化形式的混合模型,如下图1所示。其根本驱动因素是天然气价格和气温。该模型在内部捕获了驱动因素与电价的关系之间的关系,以及与一天中的时间、一周中的哪一天和节假日的关系。
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
用于模拟电价的模型是一个简化形式的混合模型,如下图1所示。其根本驱动因素是天然气价格和气温。该模型在内部捕获了驱动因素与电价的关系之间的关系,以及与一天中的时间、一周中的哪一天和节假日的关系。天然气价格模型是一种简化的均值回归随机微分方程模型。温度模型是参数函数和时间序列模型的组合。
模拟的天然气和电价路径被送入调度算法,该算法计算工厂的最优调度,以产生一系列现金流,可用于计算风险现金流。
本文通过案例研究展示了如何使用 MATLAB 构建一个用于测量新英格兰地区运营的一系列燃气发电厂组合相关风险的应用程序。该应用程序具有一个在 Excel 中实现的界面,所有分析均由 MATLAB 执行。用户可以通过该应用程序指定 7 座发电厂的特征,包括容量、热效率、可变运营和维护成本以及最低运行时间。通过在历史天然气和电力价格上使用简单的调度策略对该组合进行回测,可以计算历史利润和发电厂运营统计数据。通过使用在 MATLAB 中实现的混合模型对未来的天然气和电力价格进行模拟,对每种市场价格情景进行调度模拟,并计算发电厂运营产生的现金流,从而计算风险度量。分析现金流的分布,为每座发电厂以及发电资产组合生成 90% 和 95% 的现金流风险度量。所有这些功能都通过简洁的 Excel 前端呈现。本文描述了在 MATLAB 环境中构建该应用程序的过程。该案例研究旨在展示 MATLAB 产品的更广泛功能,因此利用了多个工具箱中的函数。每个部分都突出了所需的产品。在某些情况下,可能有其他方法可以执行相同的分析,这些方法也将被说明。
应用程序中包含三个 Excel 电子表格。 PlantRiskDeployed.xlsm 是与已部署应用程序一起使用的接口。它包括调用使用 MATLAB Builder Ex 创建的 COM DLL 的已部署方法的 VBA 代码。部署项目 PlantRisk.prj 包括构建已部署应用程序所需的相关文件。这可以在 MATLAB 中打开并构建以创建 Excel 应用程序所需的 DLL。 vbamodule.bas 中的 VBA 代码包含已成为 PlantRiskDeployed 一部分的 VBA 代码,用于从 Excel 自动调用 DLL 函数。 PlantRiskSpLink.xlsm 是与 Spreadsheet Link EX 一起使用的接口,用于在 MATLAB 的运行会话中调用 MATLAB 函数。如果您不需要与不是 MATLAB 用户的其他人共享应用程序,或者在创建已部署的应用程序之前对界面进行原型设计,则此版本非常有用。 PlantRiskTemplate.xlsx 是没有集成到 MATLAB 的简单接口。 vbamodule.bas 中的 VBA 代码以及 MATLAB Builder EX 生成的 VBA 代码可以导入此文件,使其成为与 PlantRiskDeployed.xlsm 相同的功能齐全的部署应用程序.
使用界面:单击 Run Backtest 按钮调用 backtestPlantPortfolio 函数(在 MATLAB 中或在 MATLAB 生成的 DLL 中)。此函数加载工作表上指定日期范围内的历史电力和天然气价格,并计算每个发电机的每日最佳调度,从而在尊重最小运行时间限制的同时最大化每日发电利润。回测的结果是每个工厂的一组运营统计数据,例如已实现利润、运营天数、工厂运行时间百分比以及每个运营日的平均小时数。该函数还计算投资组合的总预期利润和日期范围内每个日期的现金流(利润)图。回测结果的屏幕截图如下所示。单击 Run Simulation 按钮会调用 simulationPlantPortfolio 函数(在 MATLAB 中或在 MATLAB 生成的 DLL 中)。该函数加载预训练的天然气价格、温度和电价模型,并联合模拟指定日期范围内天然气和电价的多条路径。可以在工作表上指定模拟次数。然后针对每个模拟价格路径为每个工厂执行最佳调度,以计算每个工厂以及整个投资组合的利润和运营统计数据。然后将这些平均并显示在工作表上。此外,还计算了每个资产和投资组合的风险现金流量度。该函数还创建了现金流(收益)分布的直方图,其中突出显示了风险指标。
电力系统电价与温度模型研究
一、电价的核心影响因素
电价的形成是供需关系、成本结构和政策调控共同作用的结果。核心要素包括:
-
供需格局
供需关系直接决定电价波动方向。当电力需求激增(如夏季高温或冬季寒潮)而供给受限时,电价显著上涨。例如,爱尔兰的研究表明,气温每降低1°C,高峰电力需求增加40兆瓦。相反,在春秋季温和气候下,需求下降会压低电价。供需偏紧时,发电端掌握定价权;供大于求时,用电端受益于价格下行。 -
发电成本
燃料成本(如煤、天然气)是火电成本的核心变量。2017-2018年煤价上涨直接推高市场化交易电价,煤电交易价差收窄至0.103元/千瓦时。此外,可再生能源的初始投资(如光伏电站建设)和政策性税费(增值税、环保附加)也构成电价下限。 -
政策与市场结构
政府通过碳减排目标、可再生能源配额等政策间接影响电价。例如,欧盟要求电力公司使用清洁能源,虽长期降低边际成本,但短期推高电价。竞争性市场结构(如美国德州)可通过供应商竞争抑制电价,而垄断市场则缺乏价格弹性。
二、温度对电力需求的影响机制
温度通过非线性关系影响电力需求,表现为“U型曲线”特征:
-
季节性与极端天气效应
- 制冷需求:夏季气温超过阈值(如22°C)时,空调负荷显著增加。东京研究显示,夏季气温每升高1°C,家庭用电增加40千瓦时(占年用电量1.5%)。北京数据表明,温度高于25°C时,电力需求随温度升高呈指数增长。
- 供暖需求:冬季低温(如<7°C)时,电采暖设备负荷上升。北欧市场研究表明,供暖需求是电价的主要驱动力,而制冷效应因温和夏季气候不显著。
-
度日法与负荷预测
采用采暖度日(HDD)和制冷度日(CDD)量化温度影响。例如,北京以18°C为基准,HDD反映低温累积效应,CDD量化高温持续时间。爱尔兰通过25年气候数据校正历史峰值需求,消除温度波动干扰。 -
尖峰负荷与系统压力
极端天气(热浪、寒潮)导致尖峰负荷短期激增。中国研究显示,夏季持续高温引发“积温效应”,传统负荷预测误差达13%-30%,需引入温度修正模型。美国亚利桑那州因夏季高温,电价较寒冷地区高13-14美分/千瓦时。
三、电价-温度建模方法
-
传统数学模型
- 混合驱动模型:以天然气价格和气温为核心变量,结合时间序列与节假日效应。例如,Matlab实现的混合模型通过均值回归方程描述天然气价格,正弦函数模拟温度季节性波动。
- 阈值自回归模型(TAR) :分析电价对数与温度的抛物线关系。美国研究发现,日间电价在57°F(约13.9°C)时最低,偏离该温度时电价波动加剧。
- 联合动态模型(VARFIMA-BEKK) :整合电价、温度和水文平衡变量,处理多因素非线性交互。北欧市场案例显示,温度与电价冬季负相关,夏季相关性趋零。
-
机器学习与深度学习
- 特征工程:利用互信息(MI)和核主成分分析(KPCA)筛选关键变量,如历史电价、温度、湿度。LSTM模型通过168小时历史数据预测24小时电价,MAPE误差低于5%。
- 混合预测框架:变分模态分解(VMD)将电价序列分解为子序列,PSO优化LSSVM参数,集成预测精度提升29%。深度强化学习(DRL)用于需求响应定价策略,优化用户峰谷用电行为。
四、典型案例与区域差异
-
北欧市场
温度主导冬季供暖需求,水文平衡(如水库水位)影响水电供给。模型显示,水文平衡每增加1单位,电价下降0.2%,而低温(<0°C)推高电价15%。 -
中国分时电价实践
- 南方园区:夏季尖峰电价(0.95元/千瓦时)结合光伏-储能系统,降低峰时购电成本。
- 北方供暖优化:沈阳案例中,基于峰谷电价调整地板辐射供暖温度,日用电费用下降27%。
-
气候区域差异
- 热带地区(如沙特):全年高温导致制冷负荷稳定,电价波动较小。
- 温带大陆性气候(如德国):温和夏季减少空调使用,但能源危机推高电价至0.44欧元/千瓦时(中国6倍)。
- 政策响应:浙江实施全年尖峰电价,安徽则按气温阈值(36°C或-5°C)动态调整。
五、未来研究方向
-
气候适应性模型
需整合气候变化预测(如RCP情景),评估长期温度趋势对电力需求的影响。澳大利亚研究显示,RCP8.5情景下2050年制冷需求将导致年度电力消费增长8%。 -
多能源耦合优化
虚拟电厂(VPP)通过光-储-气互补调度,在阶梯电价政策下提升经济性。案例显示,优化后夏季峰时收益增加20%。 -
数据驱动与隐私保护
联邦学习与数字孪生技术可解决用户用能数据隐私问题,同时支持微电网多智能体协调控制。
六、结论
电价与温度模型研究需综合经济学、气象学与数据科学方法。核心在于量化温度对供需的边际影响,并通过动态模型捕捉政策、燃料成本与气候变化的交互效应。未来,机器学习与跨学科融合将进一步提升预测精度与系统韧性,为电力市场设计提供科学支撑。
📚2 运行结果
部分代码:
%% 每小时温度建模和模拟
% 这个例子演示了每小时干球温度拟合一个非线性温度模型。
% 温度序列被建模为两个分量的总和,一个确定性的非线性函数,
% 用来解释给定年份某一时刻的季节或预期温度,另一个随机分量,用来解释实际温度与平均值的偏差。
%% 导入数据
%数据集从先前创建的MAT-file中加载。它由一系列日期的向量和相应的历史记录温度组成。
clear
load Data\TempSeries
whos
%% 季节性成分(确定性)
% 确定性或期望的温度分量用正弦和模型建模,激励的是数据中观察到的温度和周期性的物理本质。
% 利用曲线拟合工具箱对模型参数进行估计。统计工具箱函数NLINFIT也可以用来估计模型参数。
% 计算平均值(年平均值)并将其从系列中剔除
m = mean(drybulb)
drybulb0 = drybulb - m;
% Fit double-sine model
model = fit(dates, drybulb0, 'sin2')
%% 可视化模型精度
% 用自定义图对拟合结果进行可视化分析。图中的两个轴是相连的,这极大地使数据的视觉探索。
% 还要注意,X轴上的日期tick相对于缩放和平移是动态的。
pred = model(dates) + m;
res = drybulb - pred;
fitPlot(dates, [drybulb pred], res);
disp(['平均绝对误差: ' num2str(mean(abs(res))) ' 华氏度']);
%% 分析残差中的序列相关性
% 上述图中明显的特征之一是残差不具有序列相关性。预计这是因为高于平均气温很可能跟随高于平均气温。
% 这种序列相关性可以被明确地度量。这里用AUTOCORR和PARCORR函数来显示序列的自相关和部分自相关。
figure;
subplot(2,1,1);
autocorr(res,50);
title('随机序列的序列相关性');
subplot(2,1,2);
parcorr(res(1:1000),50);
%% 利用季节AR模型对随机成分进行建模
% 可以选择对随机分量建模一个均值回复漂移SDE。
% 但是,由于季节性,我们将使用带有季节性滞后的自回归模型。
% 这里可以使用MATLAB反斜杠算子代替REGRESS函数,但这不会返回置信区间。
lags = [1 2 3 4 23 24 25 47 48 49];
Xres = lagmatrix(res, lags);
[beta, betaci, res2] = regress(res, Xres);
disp('滞后系数和置信区间');
disp([lags' beta betaci])
%% 对回归残差进行序列相关分析
%来自回归的残差现在应该大多是序列不相关的。
figure;
subplot(2,1,1);
plot(dates, res2); datetick
title('回归残差及其序列相关性');
subplot(2,1,2);
autocorr(res2(lags(end)+1:end),50);
%% 对残差拟合一个分布
% 由于残差大多是不相关的,因此可以将它们建模为独立的从适当的分布中提取的。
% 一个t位置尺度分布可以显示出很好的拟合性。
PD = fitdist(res2, 'tlocationscale');
%% 模型总结
% 温度模型现在可以定义为,
%
% *平均气温' m '
% *正弦模型'模型'
% *回归参数'β '
% *自相关滞后'滞后'
% *剩馀概率分布PD
% *可选样本前数据( 回归温度的最后一次观测值 )
tempModel = struct('m', m, 'sinmodel', model, 'reglags', lags, 'regbeta', beta, 'dist', PD, 'presample', res(end-lags(end)+1:end));
save SavedModels\TemperatureModel.mat -struct tempModel
clearvars -except tempModel dates drybulb
%% 仿真模型
% 我们现在可以对这个模型进行2009年的模拟,并将模拟值与2009年的观测数据进行比较。
% 注意我们已经捕获了我们模型中的相关特征。
newDates = dates(end-365*24+1:end);
simTemp = simulateTemperature(tempModel, newDates, 1);
%% 可视化仿真结果
ax1 = subplot(2,1,1);
plot(newDates, drybulb(end-365*24+1:end))
title('实际温度');
ax2 = subplot(2,1,2);
plot(newDates, simTemp);
title('模拟温度');
linkaxes([ax1 ax2], 'x');
dynamicDateTicks([ax1 ax2], 'linked');
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
🌈4 Matlab代码、数据、文档下载
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取
更多推荐
所有评论(0)