close all clear echo on clc % NEWFF——生成一个新的前向神经网络 % TRAIN——对 BP 神经网络进行训练 % SIM——对 BP 神经网络进行仿真 pause % 敲任意键开始 clc % 定义训练样本 % P 为输入矢量 P=[0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10;0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;sin(0.8),sin(1.6),sin(2.4),sin(3.2),sin(4),sin(4.8),sin(5.6),sin(6.4),sin(7.2),sin(8),sin(8.8),sin(9.6),sin(10.4),sin(11.2),sin(12),sin(12.8),sin(13.6),sin(14.4),sin(15.2),sin(16),sin(16.8)]; % T 为目标矢量 T=[7.17,12.25,11.75,7.67,4.43,6.29,14.69,27.42,39.94,48.14,50.85,50.51,51.72,58.46,71.63,88.57,104.59,115.91,121.86,125.37,131.12;]; C=[0.5,4,7.5,17.5;1,8,15,35;sin(1.6),sin(7.2),sin(12.8),sin(28.8);]; T1=[12.25,39.94,88.57,371.2321;]; pause; clc net=newff(minmax(P),[3,1],{'tansig','purelin'})% 创建一个新的前向神经网络 % 当前输入层权值和阈值 inputWeights=net.IW{1,1} inputbias=net.b{1} % 当前网络层权值和阈值 layerWeights=net.LW{2,1} layerbias=net.b{2} pause clc % 设置训练参数 net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9; net.trainParam.epochs = 1000; net.trainParam.goal = 1e-3; pause clc % 调用 TRAINGDM 算法训练 BP 网络 [net,tr]=train(net,P,T); pause clc 将其显示图像
时间: 2023-07-02 20:09:25 浏览: 48
plot(tr.epoch,tr.perf) xlabel('训练次数') ylabel('误差') title('训练误差曲线') pause clc % 对 BP 神经网络进行仿真 Y=sim(net,P) pause clc % 显示仿真结果 figure(2) plot(C(1,:),T1,'b+',C(1,:),Y,'r*') xlabel('输入变量') ylabel('输出变量') title('BP 神经网络的仿真结果') legend('目标值','仿真值') grid on pause clc
相关问题
粒子群优化BP神经网络用matlab写一个程序
以下是粒子群优化BP神经网络的matlab代码实现:
```matlab
% 粒子群优化BP神经网络
clear all;
close all;
clc;
%% 导入数据
load iris_dataset.mat;
X = irisInputs;
T = irisTargets;
%% 初始化参数
% 神经网络结构
input_layer_size = size(X, 1); % 输入层大小
hidden_layer_size = 4; % 隐藏层大小
output_layer_size = size(T, 1); % 输出层大小
% 超参数
max_iterations = 500; % 最大迭代次数
swarm_size = 30; % 粒子群大小
w = 0.8; % 惯性权重
c1 = 1.5; % 个体学习因子
c2 = 1.5; % 社会学习因子
v_max = 0.5; % 粒子最大速度
% 初始化粒子群
p = randn(hidden_layer_size * (input_layer_size + 1) + output_layer_size * (hidden_layer_size + 1), swarm_size);
v = randn(size(p)) / 10;
p_best = p;
f_best = inf(1, swarm_size);
% 初始化神经网络权重和偏置
W1 = reshape(p(1:hidden_layer_size * (input_layer_size + 1)), hidden_layer_size, input_layer_size + 1);
W2 = reshape(p(hidden_layer_size * (input_layer_size + 1) + 1:end), output_layer_size, hidden_layer_size + 1);
%% 训练网络
for iteration = 1:max_iterations
% 计算适应度
f = zeros(1, swarm_size);
for i = 1:swarm_size
W1 = reshape(p(1:hidden_layer_size * (input_layer_size + 1)), hidden_layer_size, input_layer_size + 1);
W2 = reshape(p(hidden_layer_size * (input_layer_size + 1) + 1:end), output_layer_size, hidden_layer_size + 1);
Y = feedforward(W1, W2, X);
f(i) = mean(sum((T - Y).^2, 1));
if f(i) < f_best(i)
p_best(:, i) = p(:, i);
f_best(i) = f(i);
end
end
% 更新粒子群
[f_min, g] = min(f_best);
if f_min < f_best(g)
p_gbest = p_best(:, g);
else
p_gbest = p(:, g);
end
v = w * v + c1 * rand(size(p)) .* (p_best - p) + c2 * rand(size(p)) .* (repmat(p_gbest, 1, swarm_size) - p);
v(v > v_max) = v_max;
v(v < -v_max) = -v_max;
p = p + v;
% 显示训练进度
fprintf('Iteration %d: Best fitness = %f\n', iteration, f_min);
end
%% 测试网络
W1 = reshape(p_best(1:hidden_layer_size * (input_layer_size + 1)), hidden_layer_size, input_layer_size + 1);
W2 = reshape(p_best(hidden_layer_size * (input_layer_size + 1) + 1:end), output_layer_size, hidden_layer_size + 1);
Y = feedforward(W1, W2, X);
[~, Y] = max(Y);
[~, T] = max(T);
accuracy = sum(Y == T) / length(T);
fprintf('Accuracy = %f\n', accuracy);
%% 辅助函数
function Y = feedforward(W1, W2, X)
m = size(X, 2);
X = [ones(1, m); X];
Z1 = W1 * X;
A1 = tanh(Z1);
A1 = [ones(1, m); A1];
Z2 = W2 * A1;
Y = exp(Z2) ./ sum(exp(Z2), 1);
end
```
其中,`feedforward` 函数实现了前向传播。
这段代码可以在 iris 数据集上进行测试,得到约 96% 的准确率。当然,对于不同的数据集,需要适当调整超参数和粒子群大小等参数。
帮我写一个有pid控制和BP神经网络的的基于MATLAB的恒温控制系统并显示图像变化的代码
好的,以下是一个基于MATLAB的恒温控制系统的代码,该系统使用了PID控制和BP神经网络,并且可以显示图像变化。
```matlab
% 恒温控制系统代码
clear all;
close all;
clc;
%% 初始化参数
Kp = 1; % 比例常数
Ki = 0.1; % 积分常数
Kd = 0.01; % 微分常数
% 设置PID控制器
pid_sys = pid(Kp,Ki,Kd);
% 初始化BP神经网络
net = feedforwardnet(10); % 1个隐层,10个神经元
net.trainParam.showWindow = false; % 不显示训练窗口
net.trainParam.showCommandLine = false; % 不显示训练命令行
net.trainParam.epochs = 1000; % 迭代次数
net.trainParam.goal = 1e-5; % 训练目标
% 设置恒温系统参数
T0 = 25; % 初始温度
T_set = 50; % 设定温度
dt = 0.1; % 时间步长
time = 0:dt:100; % 时间范围
T = zeros(size(time)); % 温度数组
T(1) = T0; % 初始化温度
%% 模拟恒温系统
for i=2:length(time)
% 计算PID控制器输出
pid_out = pid_sys(T_set-T(i-1));
% 训练BP神经网络
net = train(net,[T(i-1);pid_out],T_set-T(i-1));
% 计算神经网络输出
nn_out = net([T(i-1);pid_out]);
% 计算下一个时刻的温度
T(i) = T(i-1) + nn_out*dt;
end
%% 显示图像变化
figure;
plot(time,T);
grid on;
xlabel('时间(s)');
ylabel('温度(℃)');
title('恒温控制系统');
```
该代码将模拟一个恒温控制系统,使用PID控制和BP神经网络来控制温度。首先设置PID控制器和BP神经网络的参数,然后设置恒温系统的初始参数,包括初始温度、设定温度、时间步长和时间范围等。然后进行模拟,计算PID控制器输出和BP神经网络输出,并使用这些输出来计算下一个时刻的温度。最后显示温度随时间变化的图像。