BP网络的代码:

function [sys,x0,str,ts]=BPwangluo(t,x,u,flag)

switch flag

case 0

[sys,x0,str,ts]=mdlInitializeSizes;

case 2

sys=mdlUpdates(x,u);

case 3

sys=mdlOutputs(t,x,u);

case {1,4,9}

sys=[];

otherwise

error(['unhandled flag=',num2str(flag)]);%异常处理

end

function[sys,x0,str,ts]=mdlInitializeSizes

sizes=simsizes;%用于设置模块参数的结构体用simsizes来生成

sizes.NumContStates=0;%模块连续状态变量的个数

sizes.NumDiscStates=6;%模块离散状态变量的个数

sizes.NumOutputs=3;%模块输出变量的个数

sizes.NumInputs=14;%模块输入变量的个数

sizes.DirFeedthrough=1;%模块是否存在直接贯通,1表示存在直接贯通,若为0,则mdlOutputs函数里不能有u

sizes.NumSampleTimes=1;%模块的采样时间个数,至少是一个

sys=simsizes(sizes);%设置完后赋给sys输出

x0=zeros(6,1);%系统状态变量设置

str=[];

ts=[1 0];%采样周期设为0表示是连续系统,

function sys=mdlUpdates(x,u)

x1=[u(5);x(2)+u(5);(u(5)-u(6))];%3个状态量(电机的偏差、偏差和以及偏差变化量),u(5)是偏差,u(4)是上一次的偏差,x(2)是之前的偏差和

x2=[u(7);x(5)+u(7);(u(7)-u(8))];%3个状态量(电机的偏差、偏差和以及偏差变化量),u(7)是偏差,u(8)是上一次的偏差,x(5)则是之前的偏差和

sys=[x1(1);x1(2);x1(3);x2(1);x2(2);x2(3)];

function sys=mdlOutputs(t,x,u)

xite=0.2;

alfa=0.05;

IN=6;H=8;OUT=3;

wi=rand(8,6);%产生一个的随机8*6数矩阵,随机数在(0,1)区间

wi_1=wi;wi_2=wi;wi_3=wi;wi_4=wi;wi_5=wi;wi_6=wi;

wo=rand(3,8);%产生一个的随机3*8数矩阵,随机数在(0,1)区间

wo_1=wo;wo_2=wo;wo_3=wo;wo_4=wo;wo_5=wo;wo_6=wo;wo_7=wo;wo_8=wo;

Oh=zeros(1,8);%产生一个1*8的零矩阵(行矩阵)

I=Oh;

xi=[u(9),u(5),u(3),u(10),u(7),u(11)];%神经网络的6个输入,电机2的期望值、误差以及实际值,电机1的期望值、误差以及实际值

emfa1=[x1(1);x1(2);x1(3)];emfa2=[x2(1);x2(2);x2(3)]%6个状态变量(两个电机的偏差、偏差和、偏差变化量)(两个3*1矩阵,列向量)

I=xi*wi';%隐层的输入(1*8的矩阵)

for j=1:1:8

Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%隐层的输出值(1*8矩阵)行矩阵

end

K1=Oh*wo';%输出层的输入(1*3矩阵)

for i=1:1:3

K(i)=exp(K1(i))/(exp(K1(i))+exp(-K1(i)));%得到输出层的输出:惩罚因子、学习率(1*3矩阵,行向量)

end

%%以下是权值调整

%隐含层至输出层的权值调整

dyu1=sign((u(3)-u(4))/(u(1)-u(2)+0.0001));

dyu2=sign((u(11)-u(12))/(u(13)-u(14)+0.0001))

for j=1:1:3

dK(j)=2/(exp(K1(j))+exp(-K1(j)))^2; %输出层的输出的一阶导

end

for i=1:1:3

delta31(i)=u(5)*dyu1*emfa1(i)*dK(i);  %输出层的delta1

delta32(i)=u(7)*dyu2*emfa2(i)*dK(i);  %输出层的delta2

delta3(i)= (delta31(i)+delta32(i))/2;  %输出层的delta的均值,3*1矩阵,列向量

end

for j=1:1:3

for i=1:1:8

d_wo=xite*delta3(j)*Oh(i)+alfa*(wo_1-wo_2);

end

end

wo=wo_1+d_wo;   %3*8矩阵

%以下是输入层至隐含层的权值调整

for i=1:1:8

dO(i)=4/(exp(I(i))+exp(-I(i)))^2;%(1*8矩阵)

end

segma=delta3'*wo; %(1*8矩阵,行向量)

delta2 = dO.*segma; %1*8矩阵

d_wi = xite*delta2'*xi+alfa*(wi_1-wi_2);

wi=wi_1+d_wi;

wo_6=wo_5;

wo_5=wo_4;

wo_4=wo_3;

wo_3=wo_2;

wo_2=wo_1;

wo_1=wo;   %储存输出层本次调整后的权值

wi_6=wi_5;

wi_5=wi_4;

wi_4=wi_3;

wi_3=wi_2;

wi_2=wi_1;

wi_1=wi;   %储存隐层本次调整后的权值

sys=[K(1),K(2),K(3)];

matlab运行没有图片,simulink模型运行时没报错,但scope没有图像,什么原因?相关推荐

  1. Django启动服务器时,报错mysql的2059错误的原因。

    当启动django自带的服务器时,报错2059: > _mysql_exceptions.OperationalError: (2059, ) > django.db.utils.Oper ...

  2. 【Python】import pandas时,报错 pandas Missing required dependencies ['numpy'] 原因分析

    结论:在需要 import pandas 时,同级目录下不要有 unittest.py同名文件,否则,会与pandas自带的unittest冲突,导致 import pandas 失败. 错误使用场景 ...

  3. siesta在Linux运行,请教,为什么siesta编译中没报错,然而运行的时候跑不起来呢...

    杈撳嚭鐨勬枃浠舵槸杩欐牱鐨� DM.Energy.Tolerance 1.0d-5 eV DM.Require.Harris.Convergence .true. DM.Harris.Toleranc ...

  4. siesta在Linux运行,请教,为什么siesta编译中没报错,然而运行的时候跑不起来呢 - 第一原理 - 小木虫 - 学术 科研 互动社区...

    杈撳嚭鐨勬枃浠舵槸杩欐牱鐨� DM.Energy.Tolerance 1.0d-5 eV DM.Require.Harris.Convergence .true. DM.Harris.Toleranc ...

  5. dparsf是什么_老师,我用DPARSF做Slice Timeing时老报错,请问您是什么原因呢?

    错误报告如下: ------------------------------------------------------------------------ Running job #1 ---- ...

  6. 安mysql一直转圈_在访问数据库时没报错一直转圈,mysql版本不同的连接方式

    如url访问获取数据库信息,一直转圈.一般为数据库无法连接.需要检查数据库连接信息 mysql5.0以下的连接方式: db.properties jdbc.driver=com.mysql.jdbc. ...

  7. Chrome插件请求数据时 请求报错(blocked:mixed-content)

    Chrome插件请求数据时请求报错(blocked:mixed-content) 问题原因 解决方案 方案1:配置https 方案1:使用background.js请求http 问题原因 问题原因是我 ...

  8. python 运行画图时,报错:“RuntimeError: Invalid DISPLAY variable“

    python 运行画图时,报错:"RuntimeError: Invalid DISPLAY variable" 错误描述 错误原因 matplotlib的默认backend是Tk ...

  9. 使用uniapp做微信小程序,在小程序编辑器运行时编译报错:appid不合法,导致启用不了。

    使用uniapp做微信小程序,在小程序编辑器运行时编译报错:appid不合法,导致启用不了.这个好坑爹啊,我这么淑女的小可爱都想骂人了,我好累,写个博客发泄发泄吧! 复现我的问题:神操作--代码跟别人 ...

  10. 运行python脚本时,报错InsecurePlatformWarning: A true SSLContext object is not available,解决方法

    运行python脚本时,报错InsecurePlatformWarning: A true SSLContext object is not available,解决方法 参考文章: (1)运行pyt ...

最新文章

  1. csgo 人数文件_学生机简单开一个CSGO的社区服务器
  2. ffmpeg支持x264插件
  3. 注册页面所涉及的知识
  4. python 16进制加法_在python中追加2个十六进制值
  5. 就知道调bert,都不知道加个对比学习吗?
  6. leetcode1487. 保证文件名唯一
  7. oracle dg 日志手动应用,做了DG之后,日志没有被应用
  8. bootstrap 学习 ---css样式学习
  9. linux svn 客户端安装
  10. 数字孪生-输电铁塔及线路的结冰、融化
  11. 如何管理项目成本:工时管理
  12. b站取消视频自动播放、自动续播(电脑端)
  13. 如何在html修改图片大小,HTML – 如何在CSS中动态调整图像大小?
  14. 笔记本电脑下面的任务栏一直转圈圈
  15. 全站替换https攻略
  16. 「迅捷」校园网多设备认证
  17. Hamming Embedding 汉明嵌入
  18. oracle date类型字段,Oracle Date类型
  19. some以及every的区别
  20. 365打卡小程序搭建教程

热门文章

  1. 解决requests.text乱码问题content.decode()
  2. python机器学习-糖尿病数据挖掘
  3. php 中echo命令详解,DOS中的ECHO命令详解
  4. SLAM--搭建自己的视觉里程计VO-RGBD相机(一)
  5. hbase 查询某列_hbase shell使用STARTROW、ENDROW、FILTER查出指定的列
  6. Pandas:金融数据下载和分析
  7. 阿里云云计算 10 ECS的使用
  8. 极客大学产品经理训练营 产品思维和产品意识 解决方案的设计与积累 作业3
  9. 翻译:Swift 5.1中的Protocol面向协议的编程教程:从入门到精通
  10. Java 最长递增子序列_最长递增子序列问题 Java