matlab if和error函数,使用MATLAB 's ' decic'函数实现一致初始条件的收敛失败

我有一组高度非线性的隐式ODE,我需要使用ode15i等隐式求解器来积分方程 . 为了使用ode15i,您必须获得衍生物和因变量的一致初始条件 . MATLAB有一个内置函数'decic',可以计算一致的IC,但是,当我执行该函数时,我得到以下错误:

“DECIC的融合失败 . ”

现在,一般来说,如果你的方程式不一致,'decic'会给你一个警告,要求你释放一些Y0的变量 . 但在我的情况下,我不认为我有不一致的方程,但我不确定为什么会出现收敛失败错误以及如何解决它 . 网上没有很多关于它的文档 . 我在下面包含一个包含所有必要值的自包含代码来运行它 . 由于这是一个非常具体的问题,我无法真正缩短代码或给出一个简化的例子 . 任何建议/帮助表示赞赏 .

function [Y0,YP0] = droplet_momentum_IC(theta,K,G,P,Z0,Y0)

YP0 = [0;0;0;0];

[Y0,YP0] = decic(@momentum,Z0,Y0,[1;1;1;1],YP0,[0;0;0;0]);

function RES = momentum(z,y,yp)

RES = zeros(4,1);

%Entrained Total Velocity

Ve = sin(theta)*(0.5*z*yp(4) + y(4));

%Total Relative Velocity

Urs = sqrt((y(1) - y(4))^2 + (y(2) - Ve*cos(theta))^2 + (y(3))^2);

%Coefficients

PSI = K*Urs/y(1);

PHI = P*Urs/y(1);

%Liquid Axial Velocity

RES(1) = yp(1) - PSI*sign(y(1) - y(4))*(1 + (1/6)*(abs(y(1) - y(4))*G)^(2/3));

%Liquid Radial Velocity

RES(2) = yp(2) - PSI*sign(y(2) - Ve*cos(theta))*(1 + (1/6)*(abs(y(2) - ...

Ve*cos(theta))*G)^(2/3));

%Liquid Tangential Velocity

RES(3) = yp(3) - PSI*sign(y(3))*(1 + (1/6)*(abs(y(3))*G)^(2/3));

%Gaseous Axial Velocity

RES(4) = yp(4) - (1/z/y(4))*((PHI/z)*sign(y(1) - y(4))*(1 + ...

(1/6)*(abs(y(1) - y(4))*G)^(2/3)) + Ve*Ve - y(4)*y(4));

end

end

可以使用以下命令调用上述函数:

theta = 0.48;

K = -8.99*10^(-4);

G = 251.6818;

P = 0.1780;

Y0 = [0.7884;0.6145;0.0272;0.0079];

Z0 = 10.4105;

[Y0,YP0] = droplet_momentum_IC(theta,K,G,P,Z0,Y0);

可以在这里找到'decic'的文档(虽然关于我的问题没有太多有用的信息):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值