马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
大家好,最近一直在忙仿真,用到单神经元PID控制,在MATLAB中可以用S函数搭建其模型(见附件),但在pscad中用fortran语言不太会,请求高手指点,很急!各位朋友帮帮忙!下面是在MATLAB中的单神经元PID的S函数编写的文件,结合。- function [sys,x0,str,ts] =Sfunction(t,x,u,flag,yita,K)& M# S1 E# Z v* |% c' M, O8 O9 H
- % function [sys,x0,str,ts] =Sfunction(t,x,u,flag,K)
$ J/ N/ |; T2 u K. | - switch flag, x+ P/ f" M" _9 c1 ~/ s0 `
- & m' B) ^( p% F; ^' i$ X: I( }
- case 0,4 `, n. E. k; S( u
- [sys,x0,str,ts]=mdlInitializeSizes;& x+ x' C, H7 u; T6 {& {
- case {1,4,9},4 Y+ B `3 |' ^2 u7 u# F
- sys=[];
5 p7 o+ M+ T6 S# s - case 2,1 Z4 O8 d1 M! Q# d* c
- % sys=mdlUpdate(t,x,u);
/ o1 @5 ^2 r: B' _8 R8 y - sys=mdlUpdate(t,x,u,yita);4 y7 i; e7 m0 O0 m4 z9 k
$ z/ X [* w! q- S: a- case 3,
) v% D) |' g- o, n: o" N - sys=mdlOutputs(t,x,u,K);
# e! F) R* r! d# c* G' _; l. P - otherwise: b, x4 L% [0 O& `7 {7 O
- error(['Unhandled flag = ',num2str(flag)]);
1 t' H# ` \) ~ - end
! u7 A/ A* s7 ~7 f
6 K2 n/ B- d+ t( N2 s, T- function [sys,x0,str,ts]=mdlInitializeSizes()
! q4 Q( a5 p+ p2 J
4 r% l0 `. b% k" ^- sizes = simsizes;* I+ y' \6 b8 ~8 `# o# j4 j5 a
- sizes.NumContStates = 0;
+ @3 P1 V: N+ {' I* `1 K/ L+ { - sizes.NumDiscStates = 3;
& w6 H r0 c$ e! s; w# T7 X+ w - sizes.NumOutputs = 4;- L* \9 b* O! C/ u. v. u
- sizes.NumInputs = 4;
6 e# O2 F4 ^6 }3 I- m/ ?$ j - sizes.DirFeedthrough = 1; _' j4 }4 x8 a u7 w$ J6 r7 d5 K
- sizes.NumSampleTimes = 1; 6 u' N$ g; R. n! [; H
- sys = simsizes(sizes);, f; Z- e3 I# C+ c, U
- ) o7 w+ ~7 ^! p. x' n7 w
- x0 = [9;0.01;0];. T# ^: j' K) E! `, U8 k3 D, R( z
- # d; V/ U' ^$ j# Y# i7 k; b
- str = [];+ z. {) E7 U1 J9 }. m
- , x/ B7 c6 i/ {1 R7 @' E7 Q
- ts = [-1 0];( ~9 M2 c9 f3 x% J2 ~
, V9 _5 C5 o. b0 X- function sys=mdlUpdate(t,x,u,yita)
" |3 b/ Q2 o F$ r - % function sys=mdlUpdate(t,x,u)
( W' {( r5 A+ H* O6 j( U - sys=x+yita*u(1)*u(4)*(2*u(1)-u(2));
5 y5 A' |1 O" T. X& P& t2 l) [4 U
% V6 @' H" x) V$ _4 g- function sys=mdlOutputs(t,x,u,K)
: ]7 ?$ D! T+ V/ Q' e. T; o - xx=[u(1)-u(2) u(1) u(1)+u(3)-2*u(2)];
( G4 x' S9 \' P* x1 ^+ A - sys =[u(4)+K*xx*x/sum(abs(x));x/sum(abs(x))];) _& t! r+ X, _/ V, G' O' K7 s
复制代码 |