MATLAB基于BP神经网络的光伏发电太阳辐照度预测(源码链接在文末)

news2024/11/8 18:30:42

光伏发电功率主要受太阳辐照度影响,所以准确预测太阳辐照度对光伏功率预测十分重要。程序采用小波分解先对辐照度数据进行分解,然后再用bp神经网络对分解的辐照度数据分别预测,再组合作为最后的预测结果。

人工神经网络(Artificial Neural Network,缩写为ANN)预测技术能从数据样本中自动地学习以前的经验而无需反复查询和表述过程,并自动地逼近那些最佳表征样本数据规律的函数,而不论这些函数具有怎样的形式,其考虑的系统表现的函数形式越复杂,神经网络这种特性的作用就越明显,即具有以任意精度逼近复杂的非线性函数的特性。


仿真程序(部分)

clear all;
clc;
%载入辐照度数据
load irr-temp-data.mat

%提取每天8:00-18:00的辐照度数据
irr_train=trainirr(33:72,:);
irr_test=testirr(33:72,:);

%选择输入与期望
[M_train N_train]=size(irr_train);%训练集的行与列
[M_test N_test]=size(irr_test);%测试集的行与列
%
% %% 将前三天作为输入 后一天作为输出  重新构造训练集和测试集
%
% %训练集输入和期望
% for i=1:(N_train-3)
%     
%     irr_train_input(:,i)=[irr_train(:,i);irr_train(:,i+1);irr_train(:,i+2)];
%     irr_train_target(:,i)=irr_train(:,i+3);
% end
%
% for i=1:(N_test-3)
%     irr_test_input(:,i)=[irr_test(:,i);irr_test(:,i+1);irr_test(:,i+2)];
%     irr_test_target(:,i)=irr_test(:,i+3);
% end

%% 将前一天数据作为输入 后一天作为输出个 构造训练集和测试集

%训练集输入和期望
irr_train_input=irr_train;
for i=1:(N_train-1)
    
    irr_train_target(:,i)=irr_train(:,i+1);
end

%测试集输入和期望
irr_test_input=irr_test;
for i=1:(N_test-1)
    
    irr_test_target(:,i)=irr_test(:,i+1);
end


分解函数

%测试集输入和期望
%%

%利用小波对数据进行分解

%%分三层

[M_train_input N_train_input]=size(irr_train_input);%训练集的行与列
[M_train_target  N_train_target]=size(irr_train_target);%训练目标集的行与列
[M_test_input  N_test_input]=size(irr_test_input);%测试集的行与列
[M_test_target   N_test_target]=size(irr_test_target);%测试目标集的行与列

n=5;%设置分解层数
A=cell(1,n+1);
A_target=cell(1,n+1);
B=cell(1,n+1);
B_target=cell(1,n+1);


%% 训练输入集进行小波分解

for i=1:N_train_input
    s=irr_train_input(:,i)';
    [c l]=wavedec(s,n,'db3');
    for j=1:n
      ca(j,:)=wrcoef('a',c,l,'db3',j);
      cd(j,:)=wrcoef('d',c,l,'db3',j);
    end

    A{1,1}(:,i)=ca(n,:)';
    for j=1:n
        A{1,j+1}(:,i)=cd(j,:)';
    end
end
%% 训练目标集进行小波分解
for i=1:N_train_target
    s1=irr_train_target(:,i)';
    [c1 l1]=wavedec(s1,n,'db3');
    for j=1:n
      ca1(j,:)=wrcoef('a',c1,l1,'db3',j);
      cd1(j,:)=wrcoef('d',c1,l1,'db3',j);
    end

    A_target{1,1}(:,i)=ca1(n,:)';
    for j=1:n
        A_target{1,j+1}(:,i)=cd1(j,:)';
    end
end


%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(irr_train_input1);
[outputn,outputps]=mapminmax(irr_train_target1);

03

%% BP网络训练
% %初始化网络结构
net=newff(inputn,outputn,10);

net.trainParam.epochs=100;
net.trainParam.lr=0.05;
net.trainParam.goal=0.000004;

%网络训练
net=train(net,inputn,outputn);

%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',irr_test_input1,inputps);

%网络预测输出
an=sim(net,inputn_test);

%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
C{1,i}=BPoutput;
end

sum_predict=C{1,1};
for ii=1:n
    sum_predict=sum_predict+C{1,ii+1};
end
sum_predict=sum_predict(:);
irr_test_target0=irr_test_target(:,18:27);
irr_test_target1=irr_test_target0(:);

%% 结果分析

figure(1)
plot(sum_predict,':og')
hold on
plot(irr_test_target1,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=sum_predict-irr_test_target1;


figure(2)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)

figure(3)
plot((irr_test_target1-sum_predict)./sum_predict,'-*');
title('神经网络预测误差百分比')


nn=size(error,1);%预测点的个数
RMSE=sqrt(sum(error.^2)/nn) ;
MSE=sum(error.^2)/nn;
MAE=sum(abs(error))/nn;
MAPE=sum(abs(error./sum_predict))/nn;


 


源码链接:

基于BP神经网络的光伏发电太阳辐照度预测Matlab仿真源码.rar资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

研0进阶式学习---数据库1

目录Excel和数据库数据库的分类数据库的举例数据库基本结构数据库管理系统xampp、Navicat、MySQL基础知识与界面展示数据库基本连接步骤Excel和数据库 Excel和数据库都是用来存储数据的工具,但它们有以下区别和联系: 区别: 数据类型&#…

Java实现内网穿透

使用场景 1、当公司的一些系统功能使用了第三方服务时,通常第三方会回调我们的接口。在对接阶段,为了方便debug,我们肯定希望能回调到我们本地电脑上来。 2、当你在公司想访问部署在家里电脑的服务或者文件时。 3、当你的外地同事想访问你…

搭建nginx反向代理实现动静态分离

搭建nginx反向代理实现动静态分离一、实现高可用动静分离二 实验步骤2.1 安装nginx和开启路由转发2.2 实现lvs负载均衡2.3 实现动态网页功能2.4 实现nginx反向代理2.5 重启服务网页查看一、实现高可用动静分离 1、部署目的 ①用户访问业务时访问虚拟ip由lvs负责转发请求到业务…

LAMP及论坛搭建

1.编译安装apache 关闭防火墙,将安装Apache所需软件包传到/opt目录下 systemctl stop firewalld.service setenforce 0[rootlocalhost opt]# lsapr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2安装环境依赖包 yum -y install gcc gcc-c make pc…

淘宝商品数据分析怎么操作?从哪些方面下手?

说起淘宝上面的商品可谓是成千上万,因此要是想对这些商品进行数据分析的话,也是需要一些技能的,并不是所有的数据都特别重要,我们需要学会选择比较重要的数据来进行分析。详细内容还请各位接着往下看! 一、根据淘宝指数分析以下相…

【JSP学习笔记】2.JSP 结构、生命周期及语法

前言 本章介绍JSP的结构、生命周期及语法。 JSP 结构 网络服务器需要一个 JSP 引擎,也就是一个容器来处理 JSP 页面。容器负责截获对 JSP 页面的请求。本教程使用内嵌 JSP 容器的 Apache 来支持 JSP 开发。 JSP 容器与 Web 服务器协同合作,为JSP的正…

springboot读取yml文件中的list列表、数组、map集合和对象方法实例

目录前言application.yml定义list集合application.yml定义数组类型总结 前言 springboot配置文件yml类型简单的风格,十分受大家的欢迎,支持字符string类型,支持列表list类型,支持集合map类型,支持数组array类型&#x…

MySQL数据库 - 基础篇

本文文章基于黑马《MySQL》课程所做的笔记 1、基础篇 1.1、MySQL概述 数据库相关概念 名称全称简介数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程…

ijkplayer 编译增加支持更多的音视频格式

ijkplayer是B站开源的一款基于ffmpeg的移动端播放器。但为了减少播放器的体积,很多音视频的格式播放默认都是不支持的,需要自己下载ijkplayer源码进行编译。这里以mac环境下android为例,简述ijkplayer的编译过程,以及为了支持更多…

最新版本 Stable Diffusion 开源 AI 绘画工具之图生图进阶篇

✨ 目录🎈 图生图基本参数🎈 图生图(img2img)🎈 涂鸦绘制(Sketch)🎈 局部绘制(Inpaint)🎈 涂鸦蒙版(Inpaint sketch)&…

Adams2020软件安装教程

目录 一、软件简介 二、软件下载 三、软件安装 一、软件简介 Adams是一款多领域仿真软件,可以对机械、电子、流体、化学等系统进行建模、仿真和分析。Adams具有强大的动力学分析功能,可以模拟多种复杂系统的运动、力学、热力学和控制行为,包…

点云目标检测:open3d多窗口联动可视化

多个模型之间的对比除了指标之外,还需要可以直观的对比可视化结果,这次介绍一下如何使用open3d同时打开两个窗口分别加载两个模型的结果,同时实现两个窗口的联动,也就是当一个窗口拖动或者缩放时另外一个窗口也跟着做同样的变换。 点云可视化:使用open3d实现点云连续播放这…

nginx虚拟主机

一、基于域名的nginx虚拟主机 1、基于域名的nginx虚拟主机的操作步骤 1.1 为虚拟主机提供域名和IP的映射(也可以使用DNS正向解析) echo "192.168.2.66 www.xkq.com www.wy.com" >> /etc/hosts1.2 为虚拟主机准备网页文档 mkdir -p /var/www/html/ly/ mkdir…

第一章 深度学习入门之流程初体验

效果图 文章中采用的是棋盘格数据,这张图里面用的是开源的模型,可以用于测试,此图为最终效果,加载mp4视频,通过opencv读取图像,传递到infer接口,进行推理识别,利用opencv显示出来 …

比较好的文档翻译软件-哪个翻译软件最精准

免费语言翻译软件可以帮助用户快速准确地翻译语言,其主要作用如下: 辅助语言学习:语言翻译软件可以帮助用户学习语言,让用户更好地理解在不同语言之间的差异,从而使语言学习更加高效。 翻译外语内容:语言翻…

Java中常见的几种分布式锁介绍及实战应用

文章目录什么是锁?场景描述代码示例总结Java中单体应用锁的局限性&分布式锁前言互联网系统架构的演进单体应用锁的局限性什么是分布式锁分布式锁的设计思路目前存在的分布式的方案Java中锁的解决方案前言乐观锁 与 悲观锁公平锁 与 非公平锁总结分布式锁设计如何…

Python基础教程:__call__用法

人生苦短,我用python python 安装包资料:点击此处跳转文末名片获取 __call__可以使得方法变成可被调用对象; (PS:python中的方法和普通函数有点区别: 方法的第一个参数是类实例) 允许一个类的实例像函数一样被调用。 实质上说…

相机雷达时间同步(基于ROS)

文章目录运行环境:思路:同步前和同步后效果对比1.1创建工作空间1.2创建功能包2.1编写源文件2.2编写头文件2.3编写可执行文件2.4配置文件3.1编译运行4.1录制时间同步后的rosbag4.2rviz可视化rosbag运行环境: ubuntu20.04 noetic usb_cam 速腾R…

小黑子—Java从入门到入土过程:第七章

Java零基础入门7.0Java系列第七章1. 游戏打包exe2. API2.1 Math2.2 练习2.2.1 判断质数2.2.2 判断水仙花数(自幂数)2.3 System2.4 Runtime2.5 Object2.5.1 Object 的成员方法(1) toString(2) equals 比较两个对象是否相等(3) clone方法(Objec…

投放视频广告时,如何快速与第三方播放器兼容?

新媒体时代,广告样式越来越丰富。相较于传统的图文信息,视频类广告更具有直观性,能够让消费者在了解产品知识和功能的同时加深对产品的印象。 因此在各类网站或App上投放视频类广告是个很好的宣传方式,但广告商们如果想在网站上展…