| 查看: 3638 | 回复: 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输出的数值较大,是否也影响运行速度。 |
» 猜你喜欢
268求调剂
已经有7人回复
一志愿重庆大学085700资源与环境总分308求调剂
已经有4人回复
302求调剂
已经有11人回复
306求调剂
已经有4人回复
材料学学硕080502 337求调剂-一志愿华中科技大学
已经有4人回复
求调剂
已经有6人回复
313求调剂
已经有3人回复
南昌大学材料专硕311分求调剂
已经有6人回复
316求调剂
已经有6人回复
346求调剂[0856]
已经有7人回复













回复此楼