clear;
clc;
t_count0=cputime;
n=3;%电池片数
Dot_regon=100;%初始点数
Speed1=0.5;%此处应测试不同参数下的影响
Speed2=0.5;
P_max_all=0;
I_max_all=0;
P_max_sig=zeros(1,Dot_regon+1);
I_max_sig=zeros(1,Dot_regon+1);
Temp_L=30;%运行于最低温度的电池片环境温度
S_H=0;%运行于最高光强的电池片光照强度
Select_1=0;
Select_redom=1;
Temp_in=[25,25,25,25,25,25,25,25,25,25];
S_in=[1000,600,400,1000,1000,1000,600,400,1000,1000];
for i=1:n
if (Temp_L>Temp_in(i))
Temp_L=Temp_in(i);
end
if (S_H<S_in(i))
S_H=S_in(i);
end
end
I_sc=8.58;%此参数为厂家提供参数,无需修正
I_m=7.94;
U_oc=22;
U_ocnm=0;
I_scnm=0;
U_m=17.7;
T_b=25; %标准条件
S_b=1000;
a=0.0025;%默认参数,可尝试修正
b=0.5;
c=0.00288;
V_recal=0.05;
for i=1:n
d_T(1,i)=Temp_in(1,i)-T_b;
d_S(1,i)=S_in(1,i)-S_b;
I_scn(1,i)=I_sc*(S_in(1,i)/S_b)*(1+a*d_T(1,i));
I_mn(1,i)=I_m*(S_in(1,i)/S_b)*(1+a*d_T(1,i));
U_ocn(1,i)=U_oc*((1-c*d_T(1,i))*log(exp(1)+b*d_S(1,i)/S_b));
U_mn(1,i)=U_m*((1-c*d_T(1,i))*log(exp(1)+b*d_S(1,i)/S_b));
if U_ocnm<U_ocn(1,i)
U_ocnm=U_ocn(1,i);
end
if I_scnm<I_scn(1,i)
I_scnm=I_scn(1,i);
end
end
C2=(U_m/U_oc-1)/(log(1-I_m/I_sc));
C1=(1-I_m/I_sc)*exp(-U_m/(C2*U_oc));
Dump=U_ocnm/Dot_regon;
U_regon(1,1:Dot_regon+1)=[0:Dump:U_ocnm];
I_regon=I_scnm*(1-C1*(exp(U_regon/(C2*U_ocnm))-1));
for j=1:200
U_count=zeros(1,Dot_regon+1);
for i=1:Dot_regon+1
for m=1:n
if(I_regon(1,i)<=I_scn(1,m))
U(m,i)=log((1-I_regon(1,i)/I_scn(1,m))/C1+1)*(C2*U_ocn(1,m));
U_count(1,i)=U_count(1,i)+U(m,i);
end
end
P(1,i)=U_count(1,i)*I_regon(1,i);
if (P(1,i)>P_max_sig(1,i))
P_max_sig(1,i)=P(1,i);
I_max_sig(1,i)=I_regon(1,i);
end
if (P(1,i)>P_max_all)
P_max_all=P(1,i);
I_max_all=I_regon(1,i);
U_max_all=U_count(1,i);
end
Rand1=rand(1,3);
V_1=Rand1(1)*V_recal+Rand1(2)*Speed1*(I_max_all-I_regon(1,i))+Rand1(3)*Speed2*(I_max_sig(1,i)-I_regon(1,i))*5/j+0.005*rand(1,1)*Select_redom;
I_regon(1,i)=I_regon(1,i)+V_1+0.005*rand(1,1);
V_recal=V_1;
end
plot(U_count,P,'.');
axis([0 65 0 P_max_all+5 ]);
% pause(1);
if (j>8)
Select_1=1;
if (j>20)
Select_redom=0;
end
end
if(Select_1)
for p_sx1=1:Dot_regon %进行n次才可互换完
for p_sx2=2:Dot_regon+1 %比较相邻两数的大小
if( P(1,p_sx2-1)<P(1,p_sx2))
sx_TURN=P(1,p_sx2);
P(1,p_sx2)=P(1,p_sx2-1);
P(1,p_sx2-1)=sx_TURN; %比较相邻两数的大小,若前大后小则互换位置
sx_TURN=I_regon(1,p_sx2);
I_regon(1,p_sx2)=I_regon(1,p_sx2-1);
I_regon(1,p_sx2-1)=sx_TURN; %比较相邻两数的大小,若前大后小则互换位置
end
end
end
if((P(1,1)-P(1,101))<1)
t_count1=cputime-t_count0;
disp(['程序经过',num2str(j),'步达到精度要求']);
disp(['此时最佳功率控制点电压为',num2str(U_max_all),'V']);
disp(['此时最佳功率控制点电流为',num2str(I_max_all),'A']);
disp(['此时最佳功率控制点功率为',num2str(P_max_all),'W']);
disp(['最佳功率追踪耗时',num2str(t_count1),'S']);
break;
end
for p_sx3=1:50
I_regon(1,p_sx3+51)= (I_regon(1,p_sx3+1)+I_regon(1,p_sx3))/2;
end
end
if(j==199)
disp('未完成最佳功率追踪目标');
end
end
阴影条件下最大功率追踪matlab程序
需积分: 9 18 浏览量
2018-10-23
19:41:14
上传
评论 3
收藏 1KB ZIP 举报
qq_22302287
- 粉丝: 0
- 资源: 1
最新资源
- 藏区特产销售平台源代码+论文+毕业设计.zip
- B297C8EC5A69641DB3E681E1B3F894E5.mp4
- PrimitivesPro v2.2.unitypackage
- 财务管理系统源代码+论文.zip
- 高级信息通信运行管理员第七套试卷
- UModeler v2.11.6 (May 10, 2024).unitypackage
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本127.0.6486.0)
- 基于FPGA的CORDIC算法旋转模式实现
- bilibili视频解析下载源码
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本124.0.6367.60)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈