Matlab调用ode函数程序出错
你这个程序出错是因为目标函数写错了,可这样改:
function dy = ndd_fun(t,y,C)
chi=C(1);lambda=C(2);lambda_s=C(3);chi_s=C(4);Z_s=C(5);mu=C(12);
theta=C(6);B=C(7);V=C(8);Delta=C(9);delta=C(10);alpha=C(11);
Z = y(1); l = y(2); v = y(3);
psi = (Z>=0&Z<1).*( chi*Z.*(1 + lambda*Z + mu*Z) ) +...
(Z>=1&Z<Z_s).*( chi_s*Z.*(1 + lambda_s*Z) ) +...
(Z>=Z_s)*1;
l_psi = 1 - (Delta/delta)*(1-psi) - alpha*Delta*psi;
p = ( psi - v*v )/( l + l_psi );
dy(1) = sqrt(theta/(2*B))*(p^V)*(Z>=0&Z<=Z_s);
dy(2) = v;
dy(3) = theta*p/2;
dy=[dy(1);dy(2);dy(3)];
zs是多少?
你贴的代码不完整(尤其是出错的函数opfun的代码),原因不太容易判断。猜测比较大的可能是,在出错的那行之前,变量Y被赋过值,但行数不是10。
其实检查这类问题非常容易,在出错的地方设置断点,然后运行程序到该行暂停,这时检查等号右边算出来的结果是什么,再看看左边的Y是什么,基本上就找到原因了。
你这个程序出错是因为目标函数写错了,可这样改:
function dy = ndd_fun(t,y,C)
chi=C(1);lambda=C(2);lambda_s=C(3);chi_s=C(4);Z_s=C(5);mu=C(12);
theta=C(6);B=C(7);V=C(8);Delta=C(9);delta=C(10);alpha=C(11);
Z = y(1); l = y(2); v = y(3);
psi = (Z>=0&Z<1).*( chi*Z.*(1 + lambda*Z + mu*Z) ) +...
(Z>=1&Z<Z_s).*( chi_s*Z.*(1 + lambda_s*Z) ) +...
(Z>=Z_s)*1;
l_psi = 1 - (Delta/delta)*(1-psi) - alpha*Delta*psi;
p = ( psi - v*v )/( l + l_psi );
dy(1) = sqrt(theta/(2*B))*(p^V)*(Z>=0&Z<=Z_s);
dy(2) = v;
dy(3) = theta*p/2;
dy=[dy(1);dy(2);dy(3)];
用matlab求解二阶微分方程数值解,程序出现错误,求大神指点
G=1\/3*((5*Pp-2*P1)\/(P1+2*Pp)-P1*c1^2\/(Pp*cp^2));表达式的错误导致出现高频振荡,积分步长非常小(大约在10^-8量级),所以很长时间算不出。2、从结果看,仿真时间取50秒就足够了(已进入稳态)。3、在出现busy的情况下,可以考虑让 ode 函数不返回参数,此种情况下,会自动绘制...
Matlab,odeplot,小程序挑错及原理。
你把下面的程序放到第一个m文件中 t0=[0,2];x0=[0,0,12,5,5,0];options = odeset('RelTol',1e-8,'AbsTol',1e-8,'OutputFcn',@odeplot);[t,y] = ode45(@odefunc,t0,x0,options);figure(2)plot3(y(:,1),y(:,2),y(:,3))把下面的程序放在第二个m文件中 function dy=...
matlab 中我需要调用ode45这个函数,但是我的Matlab说这个函数不存在,我...
那说明你的matlab安装的时候没有安装ODE toolbox 最快的办法是重新安装较新版本的matlab
matlab ode45求解有错误
以下是我个人的一些理解,供参考:MATLAB提供了7个常微分方程求解器(solver),分别是ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb,其中前3个适用于求解非刚性(Nonstiff)问题,后4个适用于刚性问题。所谓刚性问题,简单点说,就是系统包含多个相互作用但变化速度相差十分悬殊的子过程...
matlab ode45解微分方程组
1、你贴出来的报错信息和代码对不上号:前面显示错误的那行代码和你贴出来的完全不一样;而后面的错误(Input argument 'u1' is undefined)也不可能是目前的代码所导致的——的确是有错,但错误应该是iL未定义才对。2、使用ode*系列函数解常微分方程,用于描述微分方程的函数(例如你这里的current)...
matlab 求解隐式常微分方程时用ode15i 函数出现的问题求助
①明确它的输入输出是什么Tensor,附加的静态参数是什么。②它的符号名是什么,是什么符号类型,如果怀疑错了,直接if(name=xxx) {...} 即可针对性调试。对于几个符号组成的局部图单元:只需要各个符号间输入输出的拓扑连接关系,这个和看net.prototxt没什么区别。以上两种规格的单元调试,最好能够跳过...
matlabr2017bode45函数显示输入参数不足的原因有哪些?
MATLAB中ODE45函数用于求解常微分方程,使用方式包括函数句柄、求解区间、初值以及可选参数。若遇到参数不足的情况,应从以下几个方面排查原因:首先,确保提供了函数句柄(odefun)。该句柄应准确定义待求解的微分方程,包括自变量、因变量及其导数的关系。若句柄未定义或定义错误,会导致参数不足的提示。其...
matlab 求解隐式常微分方程时用ode15i 函数出现的问题求助
function res = weissinger(t,y,yp)res = t*y^2 * yp^3 - y^3 * yp^2 + t*(t^2 + 1)*yp - t^2 * y;2、然后建立执行命令文件 clc,clear all t0 = 1;y0 = sqrt(3\/2);yp0 = 0;[y0,yp0] = decic(@weissinger,t0,y0,1,yp0,0);[t,y] = ode15i(@weissinger,[...
matlab 中ode 应该怎样使用。下面的代码每次编译都说x没有定义,该怎么...
这是函数,不能直接运行.ode需要dx为列向量。将一下程序保存为 myfun.m function dx=myfun(t,x)dx=zeros(3,1);dx(1)=20\/7*x(1)-x(2)*x(3);dx(2)=-10*x(2)+x(1)*x(3);dx(3)=-4*x(3)+x(1)*x(2);然后在命令窗口输入 [T,X]=ode45(@myfun, 1:10,[1 1 1])--...
MATLAB仿真的时候点run完全没反应,点其他原来能仿真的文件也卡住了...
1、原因在于,这个微分方程是病态的,大约从0.087秒左右开始,步长会非常小,要运行题主所设置的仿真时间1500秒,不知需要多久才能算完。2、调用 ode* 系列函数遇到时间很久不出结果的情况时,可以考虑采用不带返回参数的调用形式,如:ode45(@Jerk,t0,x0,options)这种调用方式会把计算结果实时以绘图...