一、前言
目录
在机器人控制系统设计与matlab仿真课上老师布置了一个作业,分别使用神经网络和模糊方法逼近非线性函数
模糊方法根据乘积推理机,单值模糊器和中心平均解模糊器得出的公式可以直接写代码得出,但是神经网络就没啥思路,查阅资料后就简单写了个神经网络逼近函数。
二、简单讲解
但是使用matlab自己训练就不需要这么麻烦,我们主要用到newff()这个函数。
关于newff函数可以看其他博客,例如:newff
创建好神经网络使用train函数给入输入输出开始训练模型,再使用sim函数给入输入得到输出。最后将两个模型表示出来,表示误差即可。
三、代码
clc;
close all;
x1=-1:0.05:1; %生成训练数据x
x2=-1:0.05:1;
[X1,X2]=meshgrid(x1,x2);
% P = [X1,X2];
yd=0.52+0.1*X1+0.28*X2-0.06*X1.*X2;
net = newff([X1;X2],yd,[8 8],{},"trainbr");
net.trainParam.lr=0.01; %学习率设置
net.trainParam.show=25; %显示的间隔次数
net.trainParam.epochs = 500; %训练最大次数
net.trainParam.goal=10^-10; %训练目标设置
net.trainParam.max_fail = 30;
net = train(net,[X1;X2],yd);
Y = sim(net,[X1;X2]);
subplot(211);
surf(X1,X2,yd);
title("原来函数0.52+0.1*X1+0.28*X2-0.06*X1.*X2");
subplot(212);
surf(X1,X2,Y);
title("神经网络逼近");
figure;
surf(X1,X2,Y-yd);
title("误差");
四、总结
因为自己这门课听的也是云里雾里,刚开始学习,如有错误请各位大佬指正!