【MATLAB】用简单神经网络逼近非线性函数

一、前言

目录

一、前言

二、简单讲解

三、代码

四、总结


        在机器人控制系统设计与matlab仿真课上老师布置了一个作业,分别使用神经网络和模糊方法逼近非线性函数{\color{Blue} g(x_{1},x_{2})=0.52*0.1x_{1}+0.28x_{2}-0.06x_{1}x_{2}}

        模糊方法根据乘积推理机,单值模糊器和中心平均解模糊器得出的公式可以直接写代码得出,但是神经网络就没啥思路,查阅资料后就简单写了个神经网络逼近函数。

二、简单讲解

         但是使用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("误差");

四、总结

        因为自己这门课听的也是云里雾里,刚开始学习,如有错误请各位大佬指正!

猜你喜欢

转载自blog.csdn.net/ClushioAqua/article/details/130643869