| 查看: 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输出的数值较大,是否也影响运行速度。 |
» 猜你喜欢
全日制(定向)博士
已经有5人回复
假如你的研究生提出不合理要求
已经有10人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
实验室接单子
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复












回复此楼