24小时热门版块排行榜    

查看: 3618  |  回复: 0

zhanglulu302

新虫 (初入文坛)

[求助] matlab的simulink中s函数运行太慢,有没有什么办法可以提高运行速度?

s函数的作用是为了仿真变压器的饱和特性。
s函数程序如下:
function [sys,x0,str,ts,simStateCompliance] = myfunction(t,x,u,flag,x_initial)

switch flag,
  case 0,
    [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(x_initial);
  case 1,
    sys=mdlDerivatives(t,x,u);
  case 2,
    sys=mdlUpdate(t,x,u);
  case 3,
    sys=mdlOutputs(t,x,u);
  case 4,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
  case 9,
    sys=mdlTerminate(t,x,u);
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
sizes = simsizes;

sizes.NumContStates  = 1;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);
x0  = x_initial;
str = [];
ts  = [0 0];
simStateCompliance = 'UnknownSimState';

function sys=mdlDerivatives(t,x,u)
dx=qiudaofz(x)*u;
sys=dx;

function sys=mdlUpdate(t,x,u)
sys = [];

function sys=mdlOutputs(t,x,u)
sys = x;

function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 0.001;    %导致程序运行时间长的因素一
sys = t + sampleTime;

function sys=mdlTerminate(t,x,u)
sys = [];
其中调用了qiudaofz()函数,函数文件如下:
function mhtran=qiudaofz(cc)
xa=cc/0.39712;
syms ya;
g=1.5*10^6*(coth((xa+1.5*10^(-3)*ya)/1000)-1000/(xa+1.5*10^(-3)*ya))-ya;
yya=solve(g);      %导致程序运行时间长的因素二
m=xa;
yy=double(yya);
mht1=-1.48*10^6*(1440000-(m+0.0023*yy)^2*csch((m+0.0023*yy)/1200)^2)/(4.902*10^9-1200*(m+0.0023*yy)^2- 3404*(m+0.0023*yy)^2*csch((m+0.0023*yy)/1200)^2);
mhtran=1/(0.000195/0.39712*4*3.14*10^(-7)*(1+mht1));  %导致程序运行时间长的因素三
end

已经多次调试过程序,可能的影响的因素应该在三个方面,第一个可能是s函数的采样时间的设置上面,因为电源是正弦信号,所以我想时间设置小一点,会不会得到的结果更精确一点;第二个solve所解的方程为非线性方程,所以是否导致运行速度变慢,第三个mhtran输出的数值较大,是否也影响运行速度。
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zhanglulu302 的主题更新
信息提示
请填处理意见