灰色预测难道无法在simulink中实现么?
我做毕业设计,希望在simulink中做仿真。由于使用的灰色预测GM(1,1)模型在simulink中本来没有,我想通过编写s-function的形式,通过编写m文件在simulink中实现灰色预测。但是询问一个老师说不可能使用simulink实现,我认为他有敷衍的嫌疑,特来发帖询问一下各位,能否实现。请各位达人赐教。
我编了程序可是总是不理想,你的是否解决了啊
function [sys,x0,str,ts] = try_3(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes
case 3,
sys=mdlOutputs(t,x,u)
case{1,2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)])
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [-1 0];
set_param(gcb,'UserData',[0 0 0] );
function sys=mdlOutputs(t,x,u)
g=get_param(gcb,'UserData');
c=u
Y=[g u];
Ym= [Y(2) Y(3) Y(4)];
set_param(gcb,'UserData',Ym);
y1=Y(1);
y2=Y(1)+Y(2);
y3=y2+Y(3);
y4=y3+Y(4);
B=[-0.5*(y1+y2),1;-0.5*(y2+y3),1;-0.5*(y3+y4),1];
N=B'*B;
if det(N)==0;
a=0;
else
C=(inv(B'*B));
E=C*B';
D=E*[Y(2) Y(3) Y(4)]';
m = (y1-D(2)/D(1))*exp(-D(1)*4)+D(2)/D(1);
n=(y1-D(2)/D(1))*exp(-D(1)*3)+D(2)/D(1);
a=m-n;
end
sys=a;
这是我的程序,你的能否让我借鉴一下呢,不胜感激了