我是做单神经元PID控制器仿真,这的S函数如下:function [sys,x0,str,ts]=PID(t,x,u,flag,deltak)switch flag, case 0 [sys,x0,str,ts] =mdlInitializeSizes; case 2 sys = mdlUpdates(t,x,u,deltak); 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;sizes.NumContStates = 0;sizes.NumDiscstates = 3;sizes.NumOutputs=1;sizes.NumInputs=4;sizes.DirFeedthrough =1;sizes.NumSampleTimes=1;sys = simsizes(sizes);x0 = [0;0;0];str = [ ];ts = [-1 0];% when flag=2,updates the discrete states function sys =mdlUpdates(t,x,u,deltaK)sys=x+deltaK*u(1)*u(4)*(2*u(1)-u(2));% when flag=3,computates the output signalsfunction sys = mdlOutputs(t,x,u)xx= [u(1)-u(2) u(1) u(1)+u(3)-2*u(2)];sys=[u(4)+0.12*xx*x/sum(abs(x)); x/sum(abs(x))]; 搭好模块之后,双击S-Function模块,在S-Function name:输入PID在S-Function parameters:输出入 X 然后运行系统,老是说 Error evaluating parameter 'x' in 'untitledd1226/S-Function': Undefined function or variable 'x'.请高手指点,不胜感激!
这个错误是未对x定义造成的。错误原因及修改方法如下
没有给变量x赋值。在函数调用x前要给x赋值,例如x = 5;
x已经赋值,但由于是在一个函数中赋值,但是在另一个函数中调用。此时用global在两个函数中分别声明x为全局变量。可以解决。