概述
%% 基于支持向量机的风电功率预测程序
%% 清空环境
clc
clear
load w.mat
x=x(1:144*7);
%%%----------下面这段程序用来构造网络的输入和输出-------------
n=144;
for i=1:length(x)-n-1
for j=i:i+n
input(i,j-i+1)=x(j,1);
end
end
output=x(n+2:length(x),1);
input=input';
output=output';
% 训练集
p_train = input(:,1:144*7-n-1)';
t_train = output(:,1:144*7-n-1)';
% 测试集
p_test = input(:,144*6-n+1:end)';
t_test = output(:,144*6-n+1:end)';
%
%% 数据归一化
% 训练集
[pn_train,inputps] = mapminmax(p_train');
pn_train = pn_train';
pn_test = mapminmax('apply',p_test',inputps);
pn_test = pn_test';
% 测试集
[tn_train,outputps] = mapminmax(t_train');
tn_train = tn_train';
tn_test = mapminmax('apply',t_test',outputps);
tn_test = tn_test';
%% SVM模型创建/训练
cmd = [' -t 2',' -c ',num2str(320),' -g ',num2str(0.05),' -s 3 -p 0.01'];
model = svmtrain(tn_train,pn_train,cmd);
%% SVM仿真预测
unknow=zeros(length(tn_test),1);
for i=1:(length(tn_test))
for j=1:i+n
if i==1
pn_test(i,j)=pn_test(i,j);
end
if i>1
if j<5
pn_test(i,j)=pn_test(i-1,j+1);
end
if j==5
[tn_sim_svm,inputps] = mapminmax(t_sim_svm);
tn_sim_svm =tn_sim_svm';
pn_test(i,j)=tn_sim_svm;
end
end
end
P_test=pn_test(i,:);
t_sim_svm=svmpredict(unknow(i),P_test,model);
Predict_2(1,i)=t_sim_svm;
end
[Predict_1,error_1] = svmpredict(tn_train,pn_train,model);
% 反归一化
predict_1 = mapminmax('reverse',Predict_1,outputps);
predict_2 = mapminmax('reverse',Predict_2,outputps)';
% 结果对比
result_1 = [t_train predict_1];
result_2 = [t_test predict_2];
error_svm=t_test-predict_2;
maxwindpower=max(x);
rmse=sqrt(sum((t_test-predict_2).^2)/length(t_test))/maxwindpower;
mae=sum(abs(error_svm))/(length(tn_test)*maxwindpower);
%% 绘图
figure(1)
plot(1:length(t_train),t_train,'r-*',1:length(t_train),predict_1,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('功率/kW')
string_1 = {'训练集预测结果对比';
['mse = ' num2str(error_1(2)) ' R^2 = ' num2str(error_1(3))]};
title(string_1)
figure(2)
plot(1:length(t_test),t_test,'r-*',1:length(t_test),predict_2,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('功率/kW')
figure(3)
plot(1:length(t_test),error_svm)
xlabel('样本编号')
ylabel('绝对误差')
figure(4)
plot(1:length(t_test),error_svm/t_test);
xlabel('样本编号')
ylabel('相对误差')
figure(5)
plot(1:length(t_test),error_svm/maxwindpower);
xlabel('样本编号')
ylabel('绝对误差与最大功率的比值')
求大神帮忙看看,哪里写错了,为什么会一直显示未定义变量x
最后
以上就是忧郁雪糕为你收集整理的matlab中未定义x,新人求助!!为什么这个程序会一直显示未定义函数或变量 'x'...的全部内容,希望文章能够帮你解决matlab中未定义x,新人求助!!为什么这个程序会一直显示未定义函数或变量 'x'...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复