神经网络模糊逻辑自整定PID控制器用于自主水下车辆AUV研究(Matlab代码实现)

  💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

神经网络模糊逻辑自整定PID控制器在AUV控制中的研究

一、AUV控制需求与核心挑战

二、传统PID控制方法的局限性

三、神经网络模糊PID控制器的技术原理

四、在AUV控制中的具体实现

五、对比实验与性能验证

六、技术优势与创新点

七、未来研究方向

结论

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

神经网络模糊逻辑自整定PID控制器是一种结合了神经网络、模糊逻辑和PID控制器的先进控制方法。在自主水下车辆(AUV)研究中,这种控制器可以用于提高AUV的导航、定位和姿态控制性能。

神经网络模糊逻辑自整定PID控制器在AUV控制中的研究

一、AUV控制需求与核心挑战

自主水下航行器(AUV)的工作环境具有高度复杂性,需满足以下控制需求:

  1. 动态环境适应性:需应对水流、盐度梯度、压力变化等干扰。
  2. 能源效率优化:传统多推进器结构持续耗能,需通过控制算法减少能量消耗。
  3. 自主决策能力:受限于水下通信带宽低(<1 kHz),需实现离线自主控制。
  4. 多自由度协同控制:需同时处理姿态、深度、航向的强耦合问题。

主要挑战包括:

  • 非线性动力学特性:AUV运动模型包含科氏力、流体阻尼等非线性项。
  • 参数时变性:负载变化、生物附着导致质量/浮力参数漂移。
  • 实时性约束:典型AUV控制周期需<100 ms。
二、传统PID控制方法的局限性

传统PID在AUV应用中存在显著缺陷:

指标传统PID表现数据来源
响应时间深度控制稳态时间>15 s(固定参数)
超调量阶跃响应超调量可达20%-35%
抗扰能力水流扰动下稳态误差增加40%-60%
参数调整需人工经验调整,耗时>50次迭代


案例研究显示,传统PID在AUV悬停控制中能耗比模糊PID高23%。

三、神经网络模糊PID控制器的技术原理
  1. 混合架构设计

    \Delta K_{p,i,d} = f_{FNN}(e, \dot{e}, \ddot{e}; W, b)
    

    其中模糊神经网络(FNN)采用五层结构:

    • 输入层:误差e、误差变化率Δe、误差二次微分Δ²e
    • 模糊化层:高斯隶属函数μ(x)=exp(-(x-c)^2/σ²)
    • 规则层:Mamdani型规则库(规则数≥49)
    • 归一化层:加权平均法
    • 输出层:PID参数增量ΔKp, ΔKi, ΔKd
  2. 参数优化策略

    • 离线优化:混沌遗传算法(CGA)全局搜索,种群规模≥200,变异率0.1-0.3
    • 在线调整:改进型BP算法,学习率η=0.05-0.2,惯性系数α=0.8-0.95
  3. 动态调整机制

    • 响应阶段:侧重比例项(Kp↑50%)
    • 稳态阶段:增强积分项(Ki↑30%)
    • 扰动阶段:提升微分项(Kd↑40%)
四、在AUV控制中的具体实现
  1. 运动模型适配
    针对典型6自由度AUV模型:

    • 解耦控制:分别设计航向/深度子控制器
    • 鲁棒性增强:引入积分滑模面s=∫e dt + λe
  2. M\dot{\nu} + C(\nu)\nu + D(\nu)\nu + g(η) = τ
    

    控制器设计需考虑:

  3. 典型控制场景表现

    场景模糊PID vs 传统PID改进指标数据来源
    深度跟踪超调量↓67.5%,调节时间↓56.4%
    航向保持稳态误差<0.1°,抗流扰动能力↑40%
    悬停控制能耗降低18%-23%
    轨迹跟踪路径偏差<0.3m(复杂海况)


3. 实时控制框架

五、对比实验与性能验证
  1. 阶跃响应测试(水深50m→80m):

    • 模糊PID:上升时间2.8s,超调量4.2%
    • 传统PID:上升时间4.5s,超调量22.1%
  2. 抗扰实验(叠加1m/s侧向流):

    控制器类型恢复时间(s)最大偏移(m)
    模糊PID8.20.35
    滑模控制12.70.68
    传统PID15.41.02
    (数据来源:)
  3. 长期稳定性测试(72小时连续作业):

    • 参数漂移量:Kp<±3%,Ki<±5%,Kd<±4%
    • 定位精度衰减率:<0.1%/h
六、技术优势与创新点
  1. 多模态控制能力

    • 潜浮阶段:侧重积分项抑制静差
    • 巡航阶段:增强微分项提升响应
    • 避障阶段:模糊规则动态重构
  2. 新型优化策略

    • 引入量子粒子群算法(QPSO)优化隶属函数参数
    • 采用Dropout技术(概率0.2)防止规则过拟合
  3. 硬件兼容性

    • 可在ARM Cortex-M7(180MHz)实现实时控制
    • 内存占用<512KB,适合嵌入式部署
七、未来研究方向
  1. 多AUV协同控制

    • 基于联邦学习的参数共享机制
    • 群体智能优化算法应用
  2. 数字孪生技术

    • 建立高精度流体力学仿真模型
    • 实现控制器参数的虚拟预整定
  3. 新型混合架构

    • 融合模型预测控制(MPC)的滚动优化
    • 结合强化学习的策略梯度更新
结论

神经网络模糊PID控制器通过参数自适应调整机制,显著提升了AUV在复杂海洋环境中的控制精度和鲁棒性。实验表明,其响应速度比传统PID提升35%-60%,能耗降低18%-25%,为深海勘探、海底测绘等任务提供了可靠的技术支撑。随着边缘计算和数字孪生技术的发展,该控制器有望在AUV集群控制和长时序任务中发挥更大作用。

📚2 运行结果

部分代码:

function [E,EE,iii,A,B,C]= nnfuzzypid()
clear;
clc;
num=6000;

d1 = 0.191;
l1 = 1.33;

d = 0.2;
l = 2.135;

g=9.8;
W1 = 299;
B1 = 306;
m1 = W1/g;

global W;
global B;
global m;

m=2.18+3.33+25+3.33+8.6;
Bm=2.88+1.14+28.59+1.14+10.1;
W = m*g;
B = Bm*g;


global xg;
global yg;
global zg;
xg=0;
yg=0;
zg=0.05;

global xb;
global yb;
global zb;
xb=0.01;
yb=0;
zb=0;

global I;
global X;
global Y;
global Z;
global K;
global M;
global N;

I.xx=0.177/(W1*l1*d1^2)*(W*l*d^2);
I.yy=3.45/(W1*l1^2*d1^2)*(W*l^2*d^2);
I.zz=3.45/(W1*l1^2*d1^2)*(W*l^2*d^2);

X.u_u = -1.62/(d1^2)*(d^2);
X.ua = -0.93/0.3585*0.02071/(l1*d1^2)*(l*d^2);

Y.v_v = -131/(d1*l1)*(d*l);
Y.r_r = 0.632/(l1^3*d1)*(l^3*d);
Y.va = -35.5/(l1*d1^2)*(l*d^2);
Y.ra = 1.93/(l1^2*d1^2)*(l^2*d^2);

Z.w_w = -131/(d1*l1)*(d*l);
Z.q_q = -0.632/(l1^3*d1)*(l^3*d);
Z.wa = Y.va;
Z.qa = -1.93/(l1^2*d1^2)*(l^2*d^2);

K.p_p = Y.v_v*0.001;
K.pa = -0.0704*l/l1;

M.w_w = 3.18/(l1^2*d1)*(l^2*d);
M.q_q = -188/(l1^4*d1)*(l^4*d);
M.wa = -1.93/(l1^2*d1^2)*(l^2*d^2);
M.qa = -4.88/(l1^3*d1^2)*(l^3*d^2);

N.r_r = -94/(l1^4*d1)*(l^4*d);
N.v_v = -M.w_w;
N.va = 1.93/(l1^2*d1^2)*(l^2*d^2);
N.ra = -4.88/(l1^3*d1^2)*(l^3*d^2);

X.wq = Z.wa;
X.qq = Z.qa;
X.vr = -Y.va;
X.rr = -Y.ra;

Y.ur = 5.22/(l1*d1^2)*(l*d^2);
Y.wp = -Z.wa;
Y.pq = -Z.qa;

Z.uq = -Y.ur;
Z.vp = Y.va;
Z.rp = Y.ra;

M.uw = 24/(l1*d1^2)*(l*d^2);
M.vp = -Y.ra;
M.rp = 4.86/(l1^3*d1^2)*(l^3*d^2);
M.uq = -2/(l1^2*d1^2)*(l^2*d^2);

N.uv = -24/(l1*d1^2)*(l*d^2);
N.wp = Z.qa;
N.pq = -4.86/(l1^3*d1^2)*(l^3*d^2);
N.ur = -2/(l1^2*d1^2)*(l^2*d^2);

Y.uv = -28.6/(d1*l1)*(d*l);
Z.uw = Y.uv;

global DD;
global DDD;
DD=zeros(6,6);

DD(1,1)=m-X.ua;
DD(1,5)=m*zg;
DD(1,6)=-m*yg;

DD(2,2)=m-Y.va;
DD(2,4)=-m*zg;
DD(2,6)=m*xg-Y.ra;

DD(3,3)=m-Z.wa;
DD(3,4)=m*yg;
DD(3,5)=-m*xg-Z.qa;

DD(4,2)=-m*zg;
DD(4,3)=m*yg;
DD(4,4)=I.xx-K.pa;

DD(5,1)=m*zg;
DD(5,3)=-m*xg-M.wa;
DD(5,5)=I.yy-M.qa;

DD(6,1)=-m*yg;
DD(6,2)=m*xg-N.va;
DD(6,6)=I.zz-N.ra;
DDD=DD;
DD = DD^-1;

for i=1:6;
    for j=1:6
        if abs(DD(i,j))<0.00009
            DD(i,j)=0;
        end
    end
end

global Sv;
Sv.x=0;
Sv.y=0.1;


%%%%%%%%%%%%%%      %%%%%%%%%%%%%%
E=zeros(1,3);%XYZ
E(3)=10;
% XXX=zeros(1,1000);
% YYY=zeros(1,1000);
% ZZZ=zeros(1,1000);
EE=zeros(num,3);

buf1=zeros(num,1);
buf2=zeros(num,1);
buf3=zeros(num,1);
buf4=zeros(num,1);
buf5=zeros(num,1);
buf6=zeros(num,1);
buf7=zeros(num,1);
buf8=zeros(num,1);
buf9=zeros(num,1);
buf10=zeros(num,1);
buf11=zeros(num,1);
buf12=zeros(num,1);
buf13=zeros(num,1);
buf14=zeros(num,1);

buf15=zeros(num,1);
buf16=zeros(num,1);
buf17=zeros(num,1);
buf18=zeros(num,1);
buf19=zeros(num,1);
buf20=zeros(num,1);
buf21=zeros(num,1);
buf22=zeros(num,1);
buf23=zeros(num,1);
buf24=zeros(num,1);
buf25=zeros(num,1);
buf26=zeros(num,1);
buf27=zeros(num,1);
buf28=zeros(num,1);
%%%%%%%%%%%%%%    %%%%%%%%%%%%%%
%%%%%%%%%%%%%%    %%%%%%%%%%%%%%
ins.x=0;%    
ins.y=0;
ins.z=0;
ins.px=0;%    
ins.py=0;
ins.pz=0;

ins.u_a=0;
ins.v_a=0;
ins.w_a=0;
ins.p_a=0;
ins.q_a=0;
ins.r_a=0;
ins.pu_a=0;
ins.pv_a=0;
ins.pw_a=0;
ins.pp_a=0;
ins.pq_a=0;
ins.pr_a=0;

ins.p=0;
ins.q=0;
ins.r=0;
ins.pp=0;
ins.pq=0;
ins.pr=0;
%%%%%%%%%%%%%%     %%%%%%%%%%%%%%
depth=0;
pdepth=0;
%%%%%%%%%%%%%%GPS  %%%%%%%%%%%%%%
gps.x=E(1);%  
gps.y=E(2);%  
gps.px=E(1);%  
gps.py=E(2);%  
%%%%%%%%%%%%%%     %%%%%%%%%%%%%%
doppler.u=0;
doppler.v=0;
doppler.w=0;

doppler.pu=0;
doppler.pv=0;
doppler.pw=0;

doppler.fu=0;
doppler.fv=0;
doppler.fw=0;
% doppler.nfu=0;%                 
% doppler.nfv=0;
% doppler.nfw=0;
doppler.f=600;%kHz
EDV=zeros(1,3);
%%%%%%%%%%%%%%USBL%%%%%%%%%%%%%%
%             
usbl=zeros(1,3);
usbl(1)=10;
usbl(2)=10;
usbl(3)=20;
%usb=zeros(1,3);
usb=usbl;
pan=0;
an=0;
% usb(1)=atan(usbl(3)/usbl(2));
% usb(2)=atan(usbl(1)/usbl(3));
% usb(3)=atan(usbl(2)/usbl(1));
%%%%%%%%%%%%%%   %%%%%%%%%%%%%%
TT=zeros(1,5);
TTf=zeros(1,5);

%%%%%%%%%%%%%%    u v w p q r heel trim head%%%%%%%%%%%%%%
vel=zeros(1,9);
velf=zeros(1,9);

EV=zeros(1,3);%E   
EVf=zeros(1,3);
J=zeros(3,3);

k1=0;
k2=0;
k3=0;
k4=0;

ins.x=vel(7);%    
ins.y=vel(8);
ins.z=vel(9);

E
T=0.05;
Tc=0.2;

%%%%%%%%%%%%%%PID I
INT.dd=0;
INT.dtrim=0;
INT.angel=0;
INT.x=0;
INT.y=0;
%%%%%%%%%%%%%%    +
flag=1;
obj=pi;%     

for ii=1:num
    EV=EVf;
    TT=TTf;
    %%   
    
%     if ii==1000
%        velf(8)=1;
%     end
    
    
    if mod(ii+1,Tc/T)==0
        
        pan=an;
        
        ins.px=ins.x;
        ins.py=ins.y;
        ins.pz=ins.z;
        ins.pp=ins.p;
        ins.pq=ins.q;
        ins.pr=ins.r;
        ins.pu_a=ins.u_a;
        ins.pv_a=ins.v_a;
        ins.pw_a=ins.w_a;
        ins.pp_a=ins.p_a;
        ins.pq_a=ins.q_a;
        ins.pr_a=ins.r_a;
        
        pdepth=depth;
        
        gps.px=gps.x;
        gps.py=gps.y;
        
        doppler.pu=doppler.u;
        doppler.pv=doppler.v;
        doppler.pw=doppler.w;
        
        ins.p=velf(4) ;%     
        ins.q=velf(5) ;%     
        ins.r=velf(6) ;%     
        
        ins.u_a=(velf(1)-vel(1))/Tc ;%     
        ins.v_a=(velf(2)-vel(2))/Tc ;%     
        ins.w_a=(velf(3)-vel(3))/Tc ;%     
        
        ins.p_a=(velf(4)-vel(4))/Tc ;%     
        ins.q_a=(velf(5)-vel(5))/Tc ;%     
        ins.r_a=(velf(6)-vel(6))/Tc ;%     
        
        ins.x=ins.x+(ins.p+sin(ins.x)*tan(ins.y)*ins.q+cos(ins.x)*tan(ins.y)*ins.r)*Tc;
        ins.y=ins.y+(cos(ins.x)*ins.q-sin(ins.x)*ins.r)*Tc;
        ins.z=ins.z+(sin(ins.x)/cos(ins.y)*ins.q+cos(ins.x)/cos(ins.y)*ins.r)*Tc;
%         ins.x=velf(7);
%         ins.y=velf(8);
%         ins.z=velf(9);
        
        depth=E(3) ;%     
        
        %     gps.x=gps.x+;%x
        %     gps.y=gps.y+;%y
        
        doppler.fu=(1+velf(1)/1500)*doppler.f ;%     
        doppler.fv=(1+velf(2)/1500)*doppler.f ;%     
        doppler.fw=(1+velf(3)/1500)*doppler.f ;%     
        
        doppler.u=(doppler.fu/doppler.f-1)*1500;
        doppler.v=(doppler.fv/doppler.f-1)*1500;
        doppler.w=(doppler.fw/doppler.f-1)*1500;
        
        %  
        
        pusb=usb;
        J=[cos(ins.z)*cos(ins.y),                                 sin(ins.z)*cos(ins.y),                                 -sin(ins.y);
            cos(ins.z)*sin(ins.y)*sin(ins.x)-sin(ins.z)*cos(ins.x),sin(ins.z)*sin(ins.y)*sin(ins.x)+cos(ins.z)*cos(ins.x),cos(ins.y)*sin(ins.x);
            cos(ins.z)*sin(ins.y)*cos(ins.x)+sin(ins.z)*sin(ins.x),sin(ins.z)*sin(ins.y)*cos(ins.x)-cos(ins.z)*sin(ins.x),cos(ins.y)*cos(ins.x)];
        usb=(J*(usbl-E)')';%      
        EDV = double((J'*[doppler.u,doppler.v,doppler.w]')');
        INT.dd=INT.dd+(usbl(3)-depth);
        
        
        
        if flag==1
            if (usb(1)<0)&&(usb(2)<=0)
                
            an=atan(usb(2)/usb(1))-pi;
            elseif (usb(1)<0)&&(usb(2)>=0)
                an=atan(usb(2)/usb(1))+pi;
            elseif (usb(1)==0)&&(usb(2)>=0)
                an=pi/2;
            elseif  (usb(1)==0)&&(usb(2)<=0)
                an=-pi/2;
            else
                an=atan(usb(2)/usb(1));
            end
            File=load('nn_pid');
            flag_value=[File.flag_value;flag]; 
            save('nn_pid.mat','flag_value','-append');
            INT.dtrim=INT.dtrim+0.1-ins.y;
            INT.angel=INT.angel+an;
            INT_dtrim=[File.INT_dtrim;INT.dtrim]; 
            save('nn_pid.mat','INT_dtrim','-append');
            INT_angel=[File.INT_angel;INT.angel]; 
            save('nn_pid.mat','INT_angel','-append');
            TTf(1)=-X.u_u*0.8*0.8;
            File=load('nn_pid');
            fismat = readfis('fuzzy_piddirect');
            out_direct = evalfis([an;pan],fismat);
            d_an=[File.d_an;an]; 
            d_pan=[File.d_pan;pan]; 
            save('nn_pid.mat','d_an','-append');
            save('nn_pid.mat','d_pan','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[an,pan];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
                       Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            d_Kp=[File.d_Kp;Kp]; 
            d_Ki=[File.d_Ki;Ki]; 
            d_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','d_Kp','-append');
            save('nn_pid.mat','d_Ki','-append');
            save('nn_pid.mat','d_Kd','-append');
            TTf(5)=Direct(pan,an,INT.angel,1,Kp,Ki,Kd);
            fismat = readfis('fuzzy_pid3');
            out_direct = evalfis([ins.y;ins.py],fismat);
            t_ins_y=[File.t_ins_y;ins.y]; 
            t_ins_py=[File.t_ins_py;ins.py]; 
            save('nn_pid.mat','t_ins_y','-append');
            save('nn_pid.mat','t_ins_py','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[ins.y,ins.py];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
                       Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            t_Kp=[File.d_Kp;Kp]; 
            t_Ki=[File.d_Ki;Ki]; 
            t_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','t_Kp','-append');
            save('nn_pid.mat','t_Ki','-append');
            save('nn_pid.mat','t_Kd','-append');
            TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1,Kp,Ki,Kd);
            if usb(1)^2+usb(2)^2<sqrt(25) 
                if usbl(1)~=0
                    usbl(1)=0;    
                    usbl(2)=20;
                else flag=2;
                     
                     
              
                    
%                     flag=2;
%                     INT.dtrim=0;
%                     INT.angel=0;
%                     pan=0;
                end                
            end
        elseif flag==2
            if (usb(1)<0)&&(usb(2)<=0)
                
            an=atan(usb(2)/usb(1))-pi;
            elseif (usb(1)<0)&&(usb(2)>=0)
                an=atan(usb(2)/usb(1))+pi;
            elseif (usb(1)==0)&&(usb(2)>=0)
                an=pi/2;
            elseif  (usb(1)==0)&&(usb(2)<=0)
                an=-pi/2;
            else
                an=atan(usb(2)/usb(1));
            end
            flag_value=[File.flag_value;flag]; 
            save('nn_pid.mat','flag_value','-append');
            INT.dtrim=INT.dtrim+0.1-ins.y;
            INT.angel=INT.angel+an;
            INT_dtrim=[File.INT_dtrim;INT.dtrim]; 
            save('nn_pid.mat','INT_dtrim','-append');
            INT_angel=[File.INT_angel;INT.angel]; 
            save('nn_pid.mat','INT_angel','-append');
            TTf(1)=-X.u_u*0.8*0.8;
File=load('nn_pid');
            fismat = readfis('fuzzy_piddirect');
            out_direct = evalfis([an;pan],fismat);
            d_an=[File.d_an;an]; 
            d_pan=[File.d_pan;pan]; 
            save('nn_pid.mat','d_an','-append');
            save('nn_pid.mat','d_pan','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[an,pan];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features); 
             Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            d_Kp=[File.d_Kp;Kp]; 
            d_Ki=[File.d_Ki;Ki]; 
            d_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','d_Kp','-append');
            save('nn_pid.mat','d_Ki','-append');
            save('nn_pid.mat','d_Kd','-append');
            TTf(5)=Direct(pan,an,INT.angel,1,Kp,Ki,Kd);
            fismat = readfis('fuzzy_pid3');
            out_direct = evalfis([ins.y;ins.py],fismat);
            t_ins_y=[File.t_ins_y;ins.y]; 
            t_ins_py=[File.t_ins_py;ins.py]; 
            save('nn_pid.mat','t_ins_y','-append');
            save('nn_pid.mat','t_ins_py','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[ins.y,ins.py];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
                       Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            t_Kp=[File.d_Kp;Kp]; 
            t_Ki=[File.d_Ki;Ki]; 
            t_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','t_Kp','-append');
            save('nn_pid.mat','t_Ki','-append');
            save('nn_pid.mat','t_Kd','-append');
            TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1,Kp,Ki,Kd);
             if usb(1)^2+usb(2)^2<sqrt(25)
                if usbl(1)~=10
                    usbl(1)=10;
                    usbl(2)=30;
                else flag=3;
                end   
             end
              elseif flag==3
            if (usb(1)<0)&&(usb(2)<=0)
                
            an=atan(usb(2)/usb(1))-pi;
            elseif (usb(1)<0)&&(usb(2)>=0)
                an=atan(usb(2)/usb(1))+pi;
            elseif (usb(1)==0)&&(usb(2)>=0)
                an=pi/2;
            elseif  (usb(1)==0)&&(usb(2)<=0)
                an=-pi/2;
            else
                an=atan(usb(2)/usb(1));
            end
            flag_value=[File.flag_value;flag]; 
            save('nn_pid.mat','flag_value','-append');
            INT.dtrim=INT.dtrim+0.1-ins.y;
            INT.angel=INT.angel+an;
            INT_dtrim=[File.INT_dtrim;INT.dtrim]; 
            save('nn_pid.mat','INT_dtrim','-append');
            INT_angel=[File.INT_angel;INT.angel]; 
            save('nn_pid.mat','INT_angel','-append');
            TTf(1)=-X.u_u*0.8*0.8;
            File=load('nn_pid');
            fismat = readfis('fuzzy_piddirect');
            out_direct = evalfis([an;pan],fismat);
            d_an=[File.d_an;an]; 
            d_pan=[File.d_pan;pan]; 
            save('nn_pid.mat','d_an','-append');
            save('nn_pid.mat','d_pan','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[an,pan]
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
             Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            d_Kp=[File.d_Kp;Kp]; 
            d_Ki=[File.d_Ki;Ki]; 
            d_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','d_Kp','-append');
            save('nn_pid.mat','d_Ki','-append');
            save('nn_pid.mat','d_Kd','-append');
            TTf(5)=Direct(pan,an,INT.angel,1,Kp,Ki,Kd);
            fismat = readfis('fuzzy_pid3');
            out_direct = evalfis([ins.y;ins.py],fismat);
            t_ins_y=[File.t_ins_y;ins.y]; 
            t_ins_py=[File.t_ins_py;ins.py]; 
            save('nn_pid.mat','t_ins_y','-append');
            save('nn_pid.mat','t_ins_py','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[ins.y,ins.py];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
                       Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            t_Kp=[File.d_Kp;Kp]; 
            t_Ki=[File.d_Ki;Ki]; 
            t_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','t_Kp','-append');
            save('nn_pid.mat','t_Ki','-append');
            save('nn_pid.mat','t_Kd','-append');
            TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1,Kp,Ki,Kd);
             if usb(1)^2+usb(2)^2<sqrt(25)
                if usbl(1)~=20
                    usbl(1)=20;
                    usbl(2)=30;
                else flag=4;
                end   
             end
             elseif flag==4
            if (usb(1)<0)&&(usb(2)<=0)
                
            an=atan(usb(2)/usb(1))-pi;
            elseif (usb(1)<0)&&(usb(2)>=0)
                an=atan(usb(2)/usb(1))+pi;
            elseif (usb(1)==0)&&(usb(2)>=0)
                an=pi/2;
            elseif  (usb(1)==0)&&(usb(2)<=0)
                an=-pi/2;
            else
                an=atan(usb(2)/usb(1));
            end
            flag_value=[File.flag_value;flag]; 
            save('nn_pid.mat','flag_value','-append');
            INT.dtrim=INT.dtrim+0.1-ins.y;
            INT.angel=INT.angel+an;
            INT_dtrim=[File.INT_dtrim;INT.dtrim]; 
            save('nn_pid.mat','INT_dtrim','-append');
            INT_angel=[File.INT_angel;INT.angel]; 
            save('nn_pid.mat','INT_angel','-append');
            TTf(1)=-X.u_u*0.8*0.8;
            File=load('nn_pid');
            fismat = readfis('fuzzy_piddirect');
            out_direct = evalfis([an;pan],fismat);
            d_an=[File.d_an;an]; 
            d_pan=[File.d_pan;pan]; 
            save('nn_pid.mat','d_an','-append');
            save('nn_pid.mat','d_pan','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[an,pan];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
             Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            d_Kp=[File.d_Kp;Kp]; 
            d_Ki=[File.d_Ki;Ki]; 
            d_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','d_Kp','-append');
            save('nn_pid.mat','d_Ki','-append');
            save('nn_pid.mat','d_Kd','-append');
            TTf(5)=Direct(pan,an,INT.angel,1,Kp,Ki,Kd);
            fismat = readfis('fuzzy_pid3');
            out_direct = evalfis([ins.y;ins.py],fismat);
            t_ins_y=[File.t_ins_y;ins.y]; 
            t_ins_py=[File.t_ins_py;ins.py]; 
            save('nn_pid.mat','t_ins_y','-append');
            save('nn_pid.mat','t_ins_py','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[ins.y,ins.py];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
                       Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            t_Kp=[File.d_Kp;Kp]; 
            t_Ki=[File.d_Ki;Ki]; 
            t_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','t_Kp','-append');
            save('nn_pid.mat','t_Ki','-append');
            save('nn_pid.mat','t_Kd','-append');
            TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1,Kp,Ki,Kd);
             if usb(1)^2+usb(2)^2<sqrt(25)
                if usbl(1)~=30
                    usbl(1)=30;
                    usbl(2)=20;
                else flag=5;
                end   
             end
              elseif flag==5
            if (usb(1)<0)&&(usb(2)<=0)
                
            an=atan(usb(2)/usb(1))-pi;
            elseif (usb(1)<0)&&(usb(2)>=0)
                an=atan(usb(2)/usb(1))+pi;
            elseif (usb(1)==0)&&(usb(2)>=0)
                an=pi/2;
            elseif  (usb(1)==0)&&(usb(2)<=0)
                an=-pi/2;
            else
                an=atan(usb(2)/usb(1));
            end
            flag_value=[File.flag_value;flag]; 
            save('nn_pid.mat','flag_value','-append');
            INT.dtrim=INT.dtrim+0.1-ins.y;
            INT.angel=INT.angel+an;
            INT_dtrim=[File.INT_dtrim;INT.dtrim]; 
            save('nn_pid.mat','INT_dtrim','-append');
            INT_angel=[File.INT_angel;INT.angel]; 
            save('nn_pid.mat','INT_angel','-append');
            TTf(1)=-X.u_u*0.8*0.8;
            File=load('nn_pid');
            fismat = readfis('fuzzy_piddirect');
            out_direct = evalfis([an;pan],fismat);
            d_an=[File.d_an;an]; 
            d_pan=[File.d_pan;pan]; 
            save('nn_pid.mat','d_an','-append');
            save('nn_pid.mat','d_pan','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[an,pan]
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
             Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            d_Kp=[File.d_Kp;Kp]; 
            d_Ki=[File.d_Ki;Ki]; 
            d_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','d_Kp','-append');
            save('nn_pid.mat','d_Ki','-append');
            save('nn_pid.mat','d_Kd','-append');
            TTf(5)=Direct(pan,an,INT.angel,1,Kp,Ki,Kd);
            fismat = readfis('fuzzy_pid3');
            out_direct = evalfis([ins.y;ins.py],fismat);
            t_ins_y=[File.t_ins_y;ins.y]; 
            t_ins_py=[File.t_ins_py;ins.py]; 
            save('nn_pid.mat','t_ins_y','-append');
            save('nn_pid.mat','t_ins_py','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[ins.y,ins.py];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
                       Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            t_Kp=[File.d_Kp;Kp]; 
            t_Ki=[File.d_Ki;Ki]; 
            t_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','t_Kp','-append');
            save('nn_pid.mat','t_Ki','-append');
            save('nn_pid.mat','t_Kd','-append');
            TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1,Kp,Ki,Kd);
             if usb(1)^2+usb(2)^2<sqrt(25)
                if usbl(1)~=20
                    usbl(1)=20;
                    usbl(2)=10;
                else flag=6;
                end   
             end
              elseif flag==6
            if (usb(1)<0)&&(usb(2)<=0)
                
            an=atan(usb(2)/usb(1))-pi;
            elseif (usb(1)<0)&&(usb(2)>=0)
                an=atan(usb(2)/usb(1))+pi;
            elseif (usb(1)==0)&&(usb(2)>=0)
                an=pi/2;
            elseif  (usb(1)==0)&&(usb(2)<=0)
                an=-pi/2;
            else
                an=atan(usb(2)/usb(1));
            end
            flag_value=[File.flag_value;flag]; 
            save('nn_pid.mat','flag_value','-append');
            INT.dtrim=INT.dtrim+0.1-ins.y;
            INT.angel=INT.angel+an;
            INT_dtrim=[File.INT_dtrim;INT.dtrim]; 
            save('nn_pid.mat','INT_dtrim','-append');
            INT_angel=[File.INT_angel;INT.angel]; 
            save('nn_pid.mat','INT_angel','-append');
            TTf(1)=-X.u_u*0.8*0.8;
            File=load('nn_pid');
            fismat = readfis('fuzzy_piddirect');
            out_direct = evalfis([an;pan],fismat);
            d_an=[File.d_an;an]; 
            d_pan=[File.d_pan;pan]; 
            save('nn_pid.mat','d_an','-append');
            save('nn_pid.mat','d_pan','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[an,pan]
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
             Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            d_Kp=[File.d_Kp;Kp]; 
            d_Ki=[File.d_Ki;Ki]; 
            d_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','d_Kp','-append');
            save('nn_pid.mat','d_Ki','-append');
            save('nn_pid.mat','d_Kd','-append');
            TTf(5)=Direct(pan,an,INT.angel,1,Kp,Ki,Kd);
            fismat = readfis('fuzzy_pid3');
            out_direct = evalfis([ins.y;ins.py],fismat);
            t_ins_y=[File.t_ins_y;ins.y]; 
            t_ins_py=[File.t_ins_py;ins.py]; 
            save('nn_pid.mat','t_ins_y','-append');
            save('nn_pid.mat','t_ins_py','-append');
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
            Features=[ins.y,ins.py];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
                       Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            t_Kp=[File.d_Kp;Kp]; 
            t_Ki=[File.d_Ki;Ki]; 
            t_Kd=[File.d_Kd;Kd];
            save('nn_pid.mat','t_Kp','-append');
            save('nn_pid.mat','t_Ki','-append');
            save('nn_pid.mat','t_Kd','-append');
            TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1,Kp,Ki,Kd);
             if usb(1)^2+usb(2)^2<sqrt(25)
                if usbl(1)~=7
                    usbl(1)=7;
                    usbl(2)=10;
                else break
                end   
             end
%               elseif flag==4
%               if (usb(1)<=0)&&(usb(2)<=0)
%                 
%             an=atan(usb(2)/usb(1))-pi;
%             elseif (usb(1)<=0)&&(usb(2)>=0)
%                 an=atan(usb(2)/usb(1))+pi;
%             else an=atan(usb(2)/usb(1));
%               end
%             INT.dtrim=INT.dtrim+0.1-ins.y;
%             INT.angel=INT.angel+an;
%             TTf(1)=-X.u_u*0.8*0.8;
%             TTf(5)=Direct(pan,an,INT.angel,1);
%             TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1);
%              if usb(1)^2+usb(2)^2<sqrt(25)
%                 if usbl~=10
%                     usbl(1)=10;
%                     usbl(2)=10;
%                 else break
%                 end   
%              end
%               elseif flag==5
%               if (usb(1)<=0)&&(usb(2)<=0)
%                 
%             an=atan(usb(2)/usb(1))-pi;
%             elseif (usb(1)<=0)&&(usb(2)>=0)
%                 an=atan(usb(2)/usb(1))+pi;
%             else an=atan(usb(2)/usb(1));
%               end
%             INT.dtrim=INT.dtrim+0.1-ins.y;
%             INT.angel=INT.angel+an;
%             TTf(1)=-X.u_u*0.8*0.8;
%             TTf(5)=Direct(pan,an,INT.angel,1);
%             TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1);
%              if usb(1)^2+usb(2)^2<sqrt(25)
%                 if usbl~=20
%                     usbl(1)=20;
%                     usbl(2)=10;
%                 else flag=5;
%                 end   
%              end
%               elseif flag==6
%               if (usb(1)<=0)&&(usb(2)<=0)
%                 
%             an=atan(usb(2)/usb(1))-pi;
%             elseif (usb(1)<=0)&&(usb(2)>=0)
%                 an=atan(usb(2)/usb(1))+pi;
%             else an=atan(usb(2)/usb(1));
%               end
%             INT.dtrim=INT.dtrim+0.1-ins.y;
%             INT.angel=INT.angel+an;
%             TTf(1)=-X.u_u*0.8*0.8;
%             TTf(5)=Direct(pan,an,INT.angel,1);
%             TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0.1,1);
%              if usb(1)^2+usb(2)^2<sqrt(25)
%                 if usbl~=10
%                     usbl(1)=10;
%                     usbl(2)=10;
%                 else break
%                 end   
%              end
%         elseif flag==2
%             INT.x=INT.x+usb(1);
%             INT.y=INT.y+usb(2);
%             an=pi/2-ins.z;
%             INT.dtrim=INT.dtrim-ins.y;
%             INT.angel=INT.angel+an;
%             TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0,0);
%             [TTf(1),TTf(2)]=Control(pusb,usb,0,INT.x,INT.y);
%             if usb(1)^2+usb(2)^2<1
%                 flag=0;
%             end
%             TTf(5)=Direct(pan,an,INT.angel,0);
%         else
%             INT.x=INT.x+usb(1);
%             INT.y=INT.y+usb(2);
%             an=pi/2-ins.z;
%             INT.dtrim=INT.dtrim-ins.y;
%             INT.angel=INT.angel+an;
%             TTf(4)=TRIM(ins.py,ins.y,INT.dtrim,0,0);
%             [TTf(1),TTf(2)]=Control(pusb,usb,1,INT.x,INT.y);
%             
%             TTf(5)=Direct(pan,an,INT.angel,0);
        end
        File=load('nn_pid');
        fismat = readfis('fuzzy_piddepth');
            out_direct = evalfis([depth;pdepth],fismat);
            d_depth=[File.d_depth;ins.y]; 
            d_pdepth=[File.d_pdepth;ins.py]; 
            save('nn_pid.mat','d_depth','-append');
            save('nn_pid.mat','d_pdepth','-append');
        Kp = out_direct(1); Ki= out_direct(2);Kd= out_direct(3);
        Features=[depth,pdepth];
            [Kp_range,Ki_range ,Kd_range]=neural_network_classification(Features) ;
                       Kp=mean([Kp_range,Kp]);
            Ki=mean([Ki_range,Ki]);
            Kd=mean([Kd_range,Kd]);
            de_Kp=[File.de_Kp;Kp]; 
            de_Ki=[File.de_Ki;Ki]; 
            de_Kd=[File.de_Kd;Kd];
            save('nn_pid.mat','de_Kp','-append');
            save('nn_pid.mat','de_Ki','-append');
            save('nn_pid.mat','de_Kd','-append');
        TTf(3)=Deep(pdepth,depth,INT.dd,usbl(3),Kp,Ki,Kd);
        
%         if isnan(TTf(4))
%             break;
%         end
     TTF=[File.TTF;TTf]; 
            save('nn_pid.mat','TTF','-append');
     
    end
    %TTf = Control(E, usbl, EV, vel, usb, T ,ii);
    
    %  
    vel=velf;
%     k1 = vel+AUV(vel,TT)*T;
%     k2 = AUV(k1,TTf);
%     velf = vel+T*k2;
    k1 = AUV(vel,TTf);
    k2 = AUV(vel+0.5.*T.*k1,(TT+TTf)./2);
    k3 = AUV(vel+0.5.*T.*k2,(TT+TTf)./2);
    k4 = AUV(vel+T.*k3,TTf);
    velf = vel+T/6*(k1+2*k2+2*k3+k4);
    
    %J=J'%J^-1==J'
    J=[cos(velf(9))*cos(velf(8)),-sin(velf(9))*cos(velf(7))+cos(velf(9))*sin(velf(8))*sin(velf(7)),sin(velf(9))*sin(velf(7))+cos(velf(9))*sin(velf(8))*cos(velf(7));
        sin(velf(9))*cos(velf(8)),cos(velf(9))*cos(velf(7))+sin(velf(9))*sin(velf(8))*sin(velf(7)), -cos(velf(9))*sin(velf(7))+sin(velf(9))*sin(velf(8))*cos(velf(7));
        -sin(velf(8)),            cos(velf(8))*sin(velf(7)),                                        cos(velf(8))*cos(velf(7))                                        ];
    EVf = double((J*[velf(1),velf(2),velf(3)]')') ;
    
    E = E+EVf*T;
    %    if E(3)<0
    %        E(3)=0;
    %    end
    %    if abs(E(1))>1000
    %        break;
    %    end
    %    if abs(E(2))>1000
    %        break;
    %    end
    %    if abs(E(3))>1000
    %        break;
    %    end
    
    
    
%     if E(3)<0
%         E(3)=0;
%         velf(3)=0;
%         break;
%     end

    EE(ii,:)=E;
    
    buf1(ii,1)=velf(1);
    buf2(ii,1)=velf(2);
    buf3(ii,1)=velf(3);
    buf4(ii,1)=velf(4);
    buf5(ii,1)=velf(5);
    buf6(ii,1)=velf(6);
    buf7(ii,1)=velf(7);
    buf8(ii,1)=velf(8);
    buf9(ii,1)=velf(9);
    buf10(ii,1)=TTf(1);
    buf11(ii,1)=TTf(2);
    buf12(ii,1)=TTf(3);
    buf13(ii,1)=TTf(4);
    buf14(ii,1)=TTf(5);
    
    buf15(ii,1)=ins.p;
    buf16(ii,1)=ins.q;
    buf17(ii,1)=ins.r;
    buf18(ii,1)=ins.u_a;
    buf19(ii,1)=ins.v_a;
    buf20(ii,1)=ins.w_a;
    buf21(ii,1)=ins.x;
    buf22(ii,1)=ins.y;
    buf23(ii,1)=ins.z;
    buf24(ii,1)=depth;
    buf25(ii,1)=doppler.u;
    buf26(ii,1)=doppler.v;
    buf27(ii,1)=doppler.w;
    if flag==0
        buf28(ii,1)=sqrt(usb(1)^2+usb(2)^2);
    else
        buf28(ii,1)=0;
    end
end
%k1(5)
%velf(5)
E
iii=1:ii-1;
figure(1);
subplot(311);
plot(iii,buf1(iii),'-');
title('u');
subplot(312);
plot(iii,buf2(iii),'-');
title('v');
subplot(313);
plot(iii,buf3(iii),'-');
title('w');

figure(2);
subplot(311);
plot(iii,buf4(iii),'-');
title('p');
subplot(312);
plot(iii,buf5(iii),'-');
title('q');
subplot(313);
plot(iii,buf6(iii),'-');
title('r');

figure(3);
subplot(311);
plot(iii,buf7(iii),'-');
title('heel');
subplot(312);
plot(iii,buf8(iii),'-');
title('trim');
subplot(313);
plot(iii,buf9(iii),'-');
title('head');

figure(4);
subplot(3,1,1);
plot(iii,buf10(iii),'-');
title('Tx');
subplot(3,2,3);
plot(iii,buf11(iii),'-');
title('Ty');
subplot(3,2,4);
plot(iii,buf12(iii),'-');
title('Tz');
subplot(3,2,6);
plot(iii,buf13(iii),'-');
title('My');
subplot(3,2,5);
plot(iii,buf14(iii),'-');
title('Mz');


A=[0 10 0 10 20 30 20 7];
B=[0 10 20 30 30 20 10 10];
C=[10 20 20 20 20 20 20 20];


figure(6);
subplot(311);
plot(iii,buf15(iii),'-');
title('   Roll angular velocity');
subplot(312);
plot(iii,buf16(iii),'-');
title('    Pitch angular velocity');
subplot(313);
plot(iii,buf17(iii),'-');
title('    Heading speed');

figure(7);
subplot(311);
plot(iii,buf18(iii),'-');
title('x   Axis acceleration');
subplot(312);
plot(iii,buf19(iii),'-');
title('y  Axis acceleration');
subplot(313);
plot(iii,buf20(iii),'-');
title('z  Axis acceleration');

figure(8);
subplot(311);
plot(iii,buf18(iii),'-');
title('x  Axis acceleration');
subplot(312);
plot(iii,buf19(iii),'-');
title('y  Axis acceleration');
subplot(313);
plot(iii,buf20(iii),'-');
title('z  Axis acceleration');

figure(9);
subplot(311);
plot(iii,buf21(iii),'-');
title('  Roll angle');
subplot(312);
plot(iii,buf22(iii),'-');
title(' Trim angle');
subplot(313);
plot(iii,buf23(iii),'-');
title('  Route angle');

figure(10);
plot(iii,buf24(iii),'-');
title(' Depth gauge');

figure(11);
subplot(311);
plot(iii,buf25(iii),'-');
title('x Shaft speed');
subplot(312);
plot(iii,buf26(iii),'-');
title('y Shaft speed');
subplot(313);
plot(iii,buf27(iii),'-');
title('z Shaft speed');
% figure(12);
% title('  Power positioning error');
% plot(iii,buf28(iii),'-');

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]李文,赵强.基于神经网络的多变量模糊自整定PID控制器[J].大连铁道学院学报, 1998, 019(001):55-62.

[2]郝丽娜,张国钧.基于BP神经网络的参数自整定PID控制器仿真研究[J].电脑开发与应用, 2008.DOI:JournalArticle/5aeb70f1c095d70944094697.

[3]郝丽娜,张国钧.基于BP神经网络的参数自整定PID控制器仿真研究[J].电脑开发与应用, 2008, 21(3):3.DOI:CNKI:SUN:DNKF.0.2008-03-004.

🌈4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值